Rock
#!/usr/bin/perl #IOServer.pl use warnings; use strict; use IO::Socket; use IO::Select; use Net::Ping; my $serverport = 23; # create a socket to listen on SOMAXCONN = 512 my $server = new IO::Socket( Domain => PF_INET, Proto => 'tcp', LocalPort => $serverport, Listen => SOMAXCONN, ); die "Cannot bind: $!\n" unless $server; # create a 'select' object and add server fh to it my $selector = new IO::Select($server); # stop closing connections from aborting the server $SIG{PIPE} = 'IGNORE'; # loop and handle connections print "Multiplex server started on port $serverport...\n"; while (my @clients = $selector->can_read) { $| = 1; # input has arrived, find out which handles(s) foreach my $client (@clients) { if ($client == $server) { # it's a new connection, accept it my $newclient = $server->accept; my $port = $newclient->peerport; syswrite $newclient, "You've reached the server port # + $port\n"; #my $port = $newclient->peerport; my $name = $newclient->peerhost; #print "New client $port:$name\n"; $selector->add($newclient); } else { # it's a message from an existing client my $port = $client->peerport; my $name = $client->peerhost; my ($message, $buf, $host); my $newclient = $client->accept; # my $port = $newclient->peerport; # my $reach = Net::Ping->new("icmp"); my $reach = Net::Ping->new($ > ? "tcp": "icmp"); (defined $reach) or die "Couldn't create Net::Ping object: $!\n +"; if (sysread $client, $message, 1024) { my $host = ""; my $host1 = ""; print "\n Client $name:$port sent: $message"; #while($newserver = $newserver->accept()) #{ while (defined ($buf = <"$message">)) { print "\n $buf"; $host = (split(/:/,$buf))[1]; $host1 = (split(/[\s\n]/,$host +))[0]; print "\nHost: '".$host1."'"; #print "Remote IP to be pinged + $host"; if($reach->ping("$host1")){ print "$host1 is reachable"; syswrite $client, "reachable +$host1 "; } else{ print "$host1 is unreachable +"; syswrite $client, "unreachab +le $host1"; } } # }#end of outer while {} syswrite $client, "\n Message received OK\n"; } else else { $selector->remove($client); $client->shutdown(SHUT_RDWR); print "\nClient disconnected\n"; # port, name +not defined } } } }#end of foreach loop
#!/usr/bin/perl use IO::Socket; $destination = 'www.yahoo.com'; $sock = new IO::Socket::INET (PeerAddr => 'xxx.xxx.xxx.xxx', PeerPort => 23, Proto => 'tcp', ); die "Socket could not be created. Reason: $!\n" unless $sock; #Enable autoflush $|=1; #foreach (1 .. 10) { # print $sock "Msg $_: How are you?\n"; # print $sock "ping:$destination \n"; #} print $sock "ping:$destination \n"; print "Client Connected. \n"; print "Server says: ",scalar(<$sock>); $sock->autoflush(1); print $sock "Message acknowledged from the client!\n"; print $sock "Good Bye! \n"; print "Ping result =>: ",scalar(<$sock>); #while(1) #{} close ($sock)
In reply to Net::ping is failing. Any reason? by rockmountain
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |