zagadka
21-08-2007, 21:35
Hallo!
Ich versuche gerade ein Perl-Skript zu schreiben, das eine Netzwerkverbindung zu einem Game-Server öffnet, ein Zeichen sendet ("s"), und Teile der Antwort (Player, Map, etc.) in entsprechende Variablen ablegt.
Eine Verbindung und Antwort kommt schon zustande, die Ausgabe erfolgt in der Shell.
#!/usr/bin/perl
use IO::Socket;
$remote_host = "81.0.231.147";
$remote_port = "49124";
$socket = IO::Socket::INET->new(PeerAddr => $remote_host,
PeerPort => $remote_port,
Proto => "udp",
Timeout => 5)
or die "Verbindungsaufbau fehlgeschlagen\n";
$socket->autoflush(1);
print $socket "s";
while (<$socket>) {
print };
close($socket);
EYE1farcry49001>$2>$1>$4> $61. $0{$8FC$1CZ$0} $1P$4ublic $1S$4erver $3AssaulAssault
mp_px_dune
gr_TimeLimit 1.4.0.140501516gr_ScoreLimit0 usw.
Zum einen beendet sich das Skript so nicht und zum anderen hätte ich die Antwort ganz gerne in einer Variablen, nur kommt folgendermaßen keine Antwort.
#!/usr/bin/perl
use IO::Socket::INET;
$remote_host = "81.0.231.147";
$remote_port = "49124";
$connection = new IO::Socket::INET (Proto=>"udp",
PeerAddr=>$remote_host,
PeerPort=>$remote_port);
print "Verbindungsaufbau fehlgeschlagen\n" if (!$connection);
$connection->autoflush(1);
send($connection, "s", 0 );
read($connection, $page, 1024*1024);
print $page;
Ich bin für jeden Tip dankbar.
Im nächsten Schritt stellt sich die Frage, wie man byte-weise lesen und bearbeiten kann. Das ASE-Protokoll fängt mit eye1 dann folgt ein byte, dass die Länge des folgenden Strings+ das byte angibt. Weiter gehts mit dem nächsten Byte+String usw. http://www.int64.org/docs/gamestat-protocols/ase.html
Gruß, zagadka
Ich versuche gerade ein Perl-Skript zu schreiben, das eine Netzwerkverbindung zu einem Game-Server öffnet, ein Zeichen sendet ("s"), und Teile der Antwort (Player, Map, etc.) in entsprechende Variablen ablegt.
Eine Verbindung und Antwort kommt schon zustande, die Ausgabe erfolgt in der Shell.
#!/usr/bin/perl
use IO::Socket;
$remote_host = "81.0.231.147";
$remote_port = "49124";
$socket = IO::Socket::INET->new(PeerAddr => $remote_host,
PeerPort => $remote_port,
Proto => "udp",
Timeout => 5)
or die "Verbindungsaufbau fehlgeschlagen\n";
$socket->autoflush(1);
print $socket "s";
while (<$socket>) {
print };
close($socket);
EYE1farcry49001>$2>$1>$4> $61. $0{$8FC$1CZ$0} $1P$4ublic $1S$4erver $3AssaulAssault
mp_px_dune
gr_TimeLimit 1.4.0.140501516gr_ScoreLimit0 usw.
Zum einen beendet sich das Skript so nicht und zum anderen hätte ich die Antwort ganz gerne in einer Variablen, nur kommt folgendermaßen keine Antwort.
#!/usr/bin/perl
use IO::Socket::INET;
$remote_host = "81.0.231.147";
$remote_port = "49124";
$connection = new IO::Socket::INET (Proto=>"udp",
PeerAddr=>$remote_host,
PeerPort=>$remote_port);
print "Verbindungsaufbau fehlgeschlagen\n" if (!$connection);
$connection->autoflush(1);
send($connection, "s", 0 );
read($connection, $page, 1024*1024);
print $page;
Ich bin für jeden Tip dankbar.
Im nächsten Schritt stellt sich die Frage, wie man byte-weise lesen und bearbeiten kann. Das ASE-Protokoll fängt mit eye1 dann folgt ein byte, dass die Länge des folgenden Strings+ das byte angibt. Weiter gehts mit dem nächsten Byte+String usw. http://www.int64.org/docs/gamestat-protocols/ase.html
Gruß, zagadka