Guest User

Untitled

a guest
Oct 16th, 2017
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use warnings;
  4.  
  5. use strict;
  6.  
  7. use Socket;
  8.  
  9. use POE;
  10.  
  11. use IO::Socket::INET;
  12.  
  13. ########################################
  14.  
  15. #Author sponji #
  16.  
  17. #E-mail sponji@mindboggle.us #
  18.  
  19. #Date created 8-19-2011 #
  20.  
  21. # Requiers POE to be installed #
  22.  
  23. # Launch with ./gameping.pl <port> #
  24.  
  25. ########################################
  26.  
  27. my $port = $ARGV[0];
  28.  
  29. use constant DATAGRAM_MAXLEN => 1024;
  30.  
  31.  
  32.  
  33. POE::Session->create(
  34.  
  35. inline_states => {
  36.  
  37. _start => \&server_start,
  38.  
  39. get_datagram => \&server_read,
  40.  
  41. }
  42.  
  43. );
  44.  
  45.  
  46.  
  47.  
  48.  
  49. #Start the server magic
  50.  
  51. sub server_start {
  52.  
  53. my $kernel = $_[KERNEL];
  54.  
  55. my $gamesocket = IO::Socket::INET->new(
  56.  
  57. Proto => 'udp',
  58.  
  59. LocalPort => "$port",
  60.  
  61. );
  62.  
  63. die "Couldn't create server socket: $!" unless $gamesocket;
  64.  
  65. $kernel->select_read( $gamesocket, "get_datagram" );
  66.  
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75. #This is where the real magic is
  76.  
  77. sub server_read {
  78.  
  79. my ( $kernel, $gamesocket ) = @_[ KERNEL, ARG0 ];
  80.  
  81. my $remote_address = recv( $gamesocket, my $packet = "", DATAGRAM_MAXLEN, 0 );
  82.  
  83. return unless defined $remote_address;
  84.  
  85. my ( $peer_port, $peer_addr ) = unpack_sockaddr_in($remote_address);
  86.  
  87. my $human_addr = inet_ntoa($peer_addr);
  88.  
  89. my $ip = unpack "H*", inet_aton("$human_addr");
  90.  
  91. my $port = unpack "H*", inet_aton("$peer_port");
  92.  
  93. $packet =~ s/(.|\n)/sprintf("%02lx", ord $1)/eg;
  94.  
  95. my $newpacket = "$packet";
  96.  
  97. $newpacket =~ s/([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  98.  
  99. send( $gamesocket, $newpacket, 0, $remote_address )
  100.  
  101. }
Add Comment
Please, Sign In to add comment