Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use warnings;
- use strict;
- use Socket;
- use POE;
- use IO::Socket::INET;
- ########################################
- #Author sponji #
- #E-mail sponji@mindboggle.us #
- #Date created 8-19-2011 #
- # Requiers POE to be installed #
- # Launch with ./gameping.pl <port> #
- ########################################
- my $port = $ARGV[0];
- use constant DATAGRAM_MAXLEN => 1024;
- POE::Session->create(
- inline_states => {
- _start => \&server_start,
- get_datagram => \&server_read,
- }
- );
- #Start the server magic
- sub server_start {
- my $kernel = $_[KERNEL];
- my $gamesocket = IO::Socket::INET->new(
- Proto => 'udp',
- LocalPort => "$port",
- );
- die "Couldn't create server socket: $!" unless $gamesocket;
- $kernel->select_read( $gamesocket, "get_datagram" );
- }
- #This is where the real magic is
- sub server_read {
- my ( $kernel, $gamesocket ) = @_[ KERNEL, ARG0 ];
- my $remote_address = recv( $gamesocket, my $packet = "", DATAGRAM_MAXLEN, 0 );
- return unless defined $remote_address;
- my ( $peer_port, $peer_addr ) = unpack_sockaddr_in($remote_address);
- my $human_addr = inet_ntoa($peer_addr);
- my $ip = unpack "H*", inet_aton("$human_addr");
- my $port = unpack "H*", inet_aton("$peer_port");
- $packet =~ s/(.|\n)/sprintf("%02lx", ord $1)/eg;
- my $newpacket = "$packet";
- $newpacket =~ s/([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
- send( $gamesocket, $newpacket, 0, $remote_address )
- }
Add Comment
Please, Sign In to add comment