- Copier le code suivant sur la machine Unix ciblée (par exemple sous le nom TestPortIP.pl).
- Fermer le programme utilisant ce port (AP0, Tomcat, OpenHR ...), sinon une erreur "Failed to initialize socket" apparaitra du fait d'un conflit d'accès.
- L'exécuter en lui passant en paramètre le port à tester (par exemple "perl TestPortIP.pl 2222").
- Sur votre poste Windows, ouvrir une fenêtre DOS et exécutez un telnet en précisant la machine et le port ciblés (par exemple "telnet 10.20.30.40 2222").
Si le telnet (au bout de son time out) n'arrive pas à accéder au serveur, une erreur apparaît, le port est bloqué.
Dans le cas contraire, un message "got a connection from:" apparait sur le serveur et "Smile from the server" sur le PC.
#!/usr/bin/perl
use Socket;
$port = $ARGV[0];
$server_struct = pack("S n a4 x8", AF_INET, $port, $server_addr);
$proto = (getprotobyname('tcp'))[2];
socket(MYSOCK, PF_INET, SOCK_STREAM, $proto)|| die "Failed to initialize socket: $!\n";
setsockopt(MYSOCK, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";
my $paddr = sockaddr_in($port, INADDR_ANY);
# bind to a port, then listen
bind(MYSOCK, $paddr) or die "bind: $!";
listen(MYSOCK, SOMAXCONN) or die "listen: $!";
print "SERVER started on port $port\n";
# accepting a connection
my $client_addr;
while ($client_addr = accept(CLIENT, MYSOCK)) {
# find out who connected
my ($client_port, $client_ip) = sockaddr_in($client_addr);
my $client_ipnum = inet_ntoa($client_ip);
my $client_host = gethostbyaddr($client_ip, AF_INET);
# print who has connected
print "got a connection from: $client_host", "[$client_ipnum]\n";
# send them a message, close connection
print CLIENT "Smile from the server";
close CLIENT;
}