12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #!/usr/bin/perl -w
- ##########################################################################
- # INFORMATION TOOL ABOUT THE SERVERS VERSION OF ATHENA
- #
- # By connection on a server, this software display the version of the
- # designed server.
- #-------------------------------------------------------------------------
- # Usages:
- # ./checkversion.pl IP:port
- # ./checkversion.pl IP port
- # perl checkversion.pl IP:port
- # perl checkversion.pl IP port
- #
- # note: default port: 6900
- #
- # When successfull, the software return the value 0.
- #
- ##########################################################################
- #------------------------- start of configuration ------------------------
- $connecttimeout = 10; # Connection Timeout (in seconds)
- #-------------------------- End of configuration -------------------------
- use IO::Socket;
- unless($ARGV[0]) {
- print "USAGE: $0 server_ip:port\n";
- exit(1);
- }
- $server = $ARGV[0];
- $port = $ARGV[1];
- $port = $1 if ($server =~ s/:(\d+)//);
- $port ||= 6900;
- # Connection to the server
- my($so,$er) = ();
- eval{
- $so = IO::Socket::INET->new(
- PeerAddr=> $server,
- PeerPort=> $port,
- Proto => "tcp",
- Timeout => $connecttimeout) or $er = 1;
- };
- if($er || $@) {
- print "Can't not connect to server [$server:$port] !\n";
- exit(2);
- }
- # Request for the server version
- print $so pack("v",30000); # 0x7530
- $so->flush();
- # Receiving of the answer of the server
- if (read($so,$buf,10) < 10) {
- print "Invalid answer. It isn't an athena server or it is a too old version.\n";
- exit(5);
- }
- # Sending end of connection to the server
- print $so pack("v",30002); # 0x7532
- $so->flush();
- # Analyse of the answer
- my($ret,$maver,$miver,$rev,$dev,$mod,$type,$mdver) = unpack("v c6 v",$buf);
- if ($ret != 30001) { # 0x7531
- print "Invalid answer. It isn't an athena server or it is a too old version.\n";
- exit(6);
- }
- my(@stype) = ();
- foreach $i(0..3) {
- push @stype,(("login","char","inter","map")[$i]) if( $type & (1<<$i) );
- }
- print " ".join("/",@stype)." server [$server:$port].\n";
- printf " Athena version %s-%d.%d", ("stable","dev")[$dev], $maver,$miver;
- printf " revision %d",$rev if $rev;
- printf "%s%d\n",("","-mod")[$mod],$mdver;
- exit(0);
|