aboutsummaryrefslogtreecommitdiffstats
path: root/mbd/access_list.pl
diff options
context:
space:
mode:
Diffstat (limited to 'mbd/access_list.pl')
-rw-r--r--mbd/access_list.pl294
1 files changed, 294 insertions, 0 deletions
diff --git a/mbd/access_list.pl b/mbd/access_list.pl
new file mode 100644
index 0000000..89a8182
--- /dev/null
+++ b/mbd/access_list.pl
@@ -0,0 +1,294 @@
+
+package Config;
+
+sub game_id {
+ my ($data, $offset) = @_;
+ my $id = ((ord(substr($data, $offset, 1)) << 8) | ord(substr($data, $offset + 1, 1)));
+ return $id;
+}
+
+our @access_list = (
+ # half-life - untested (packet dump only)
+ {
+ name => 'Half-Life',
+ ports => [ 27015 ],
+ sizes => [ 16 ]
+ },
+
+ # cs 1.6 - verified
+ # (funker muligens for _alle_ source-spill inkl. hl2/cs:s)
+ {
+ name => 'CS:Source',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 25 ],
+ filter => sub { return (game_id(shift, 4) == 0x4325); }
+ },
+ {
+ name => 'Left 4 Dead',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 25 ],
+ filter => sub { return (game_id(shift, 4) == 0x43f3); }
+ },
+ {
+ name => 'CS 1.6',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 25 ],
+ filter => sub { return (game_id(shift, 4) == 0x5453); }
+ },
+ {
+ name => 'Unknown Source-based game (ID 0x4326)',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 25 ],
+ filter => sub { return (game_id(shift, 4) == 0x4326); }
+ },
+ {
+ name => 'Other Source game (unknown game ID)',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 25 ],
+ },
+ {
+ name => 'Other Source game (unknown game ID, odd length 33)',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 33 ],
+ },
+ {
+ name => 'Other Source game (unknown game ID, odd length 58)',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 58 ],
+ },
+ {
+ name => 'Other Source game (unknown game ID, odd length 15)',
+ ports => [ "26900..26903", "27015..27017" ],
+ sizes => [ 15 ],
+ },
+
+ # doom 3 - verified
+ {
+ name => 'Doom 3',
+ ports => [ "27666" ],
+ sizes => [ 14 ]
+ },
+
+ # quake 1 - verified
+ {
+ name => 'Quake 1',
+ ports => [ 26000 ],
+ sizes => [ 12 ]
+ },
+
+ # q3a - tested with demo only
+ # rtcw: enemy territory - untested (packet dump only)
+ {
+ name => 'Quake 3 Arena, RTCW: ET',
+# ports => [ "27960..27969" ],
+ ports => [ "27960..27961" ],
+ sizes => [ 15 ]
+ },
+
+ # bf2 - tested with demo only
+ # bf2142 reportedly uses same engine
+ {
+ name => 'BF2/BF2142',
+ ports => [ "29900" ],
+ sizes => [ 8 ]
+ },
+
+ # bf1942 - unverified (packet dump only)
+ {
+ name => 'BF1942',
+ ports => [ "22000..22010" ],
+ sizes => [ 8 ]
+ },
+
+ # quake 4 - tested with demo only, MUST select "internet"
+ {
+ name => 'Quake 4',
+ ports => [ 27950, 28004 ],
+ sizes => [ 14 ]
+ },
+
+ # quake 2 - untested (packet dump only)
+ {
+ name => 'Quake 2',
+ ports => [ 27910 ],
+ sizes => [ 11 ]
+ },
+
+ # warcraft 3 - untested (packet dump only)
+ {
+ name => 'Warcraft 3: Reign of Chaos (1.00)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 0; }
+ },
+ {
+ name => 'Warcraft 3: Reign of Chaos (1.07)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 7; }
+ },
+ {
+ name => 'Warcraft 3: Reign of Chaos (1.20)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 20; }
+ },
+ {
+ name => 'Warcraft 3: Reign of Chaos (1.22)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 22; }
+ },
+ {
+ name => 'Warcraft 3: Reign of Chaos (1.23)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 23; }
+ },
+ {
+ name => 'Warcraft 3: Reign of Chaos (other patch level)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (1.17)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 17; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (1.18)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 18; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (1.20)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 20; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (1.21)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 21; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (1.22)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 22; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (1.23)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 23; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (1.26)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 26; }
+ },
+ {
+ name => 'Warcraft 3: The Frozen Throne (other patch level)',
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058; }
+ },
+ {
+ name => 'Warcraft 3 (unknown version)',
+# ports => [ "6112..6119" ],
+ ports => [ 6112 ],
+ sizes => [ 16 ],
+ filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) != 0x5058 && game_id($data, 4) != 0x3352; }
+ },
+ {
+ name => 'Warcraft 3 (unknown version, odd length)',
+ ports => [ 6112 ],
+ sizes => [ 19 ],
+ },
+
+ # ut2003/ut2004 - untested (packet dump only)
+ {
+ name => 'UT2003/UT2004',
+ ports => [ 10777 ],
+ sizes => [ 5 ]
+ },
+
+ # soldat - untested (packet dump only)
+ {
+ name => 'Soldat',
+ ports => [ 23073 ],
+ sizes => [ 8 ]
+ },
+
+ # starcraft - untested (packet dump only)
+ {
+ name => 'Starcraft',
+ ports => [ 6111, 6112 ],
+ sizes => [ 8 ],
+ filter => sub { return (game_id(shift, 0) == 0x08ef); }
+ },
+ {
+ name => 'Starcraft: Brood War',
+ ports => [ 6111, 6112 ],
+ sizes => [ 8 ],
+ filter => sub { return (game_id(shift, 0) == 0xf733); }
+ },
+ {
+ name => 'Starcraft (unknown game ID)',
+ ports => [ 6111, 6112 ],
+ sizes => [ 8 ],
+ filter => sub { my $id = game_id(shift, 0); return ($id != 0x08ef && $id != 0xf733); }
+ },
+
+ # trackmania nations - untested (packet dump only)
+ {
+ name => 'Trackmania Nations',
+ ports => [ "2350" ],
+ sizes => [ 42, 30 ]
+ },
+
+ # company of heroes - untested (packet dump only)
+ {
+ name => 'Company of Heroes',
+ ports => [ 9100 ],
+ sizes => [ 39 ]
+ },
+
+ # command & conquer 3 - untested (packet dump only, reported to have some kind
+ # of chat functionality)
+# {
+# name => 'Command & Conquer 3',
+# ports => [ "8086..8093" ],
+# sizes => [ 476 ],
+# filter => sub { return 0; }
+# },
+
+ # openttd
+ {
+ name => 'OpenTTD',
+ ports => [ 3979 ],
+ sizes => [ 3 ]
+ },
+
+ # CoD4
+ {
+ name => 'Call of Duty 4',
+ ports => [ 28960 ],
+ sizes => [ 15 ],
+ },
+
+ # Far Cry 2
+ {
+ name => 'Far Cry 2',
+ ports => [ 9004 ],
+ sizes => [ 114, 118, 122, 126 ],
+ },
+
+ # unreal tournament, port 9777?
+)