#! /usr/local/bin/perl
# ポートスキャンする。
$servername = 'localhost';
$debug = 1;
$| = 1;
foreach('telnet', 'smtp', 'http', 'pop3' ,'ftp', 'domain'){
&an_w($servername, $_) || print " error\n";
}
sub an_w {
local($servername, $serv) = @_;
$AF_INET = 2;
$SOCK_STREAM = 1;
$sockaddr = 'S n a4 x8';
$crlf = "\x0d\x0a";
$port = ($serv+0) == 0 ? getservbyname($serv, 'tcp') : $serv;
chop($hostname = `hostname`);
($name, $aliases, $proto) = getprotobyname('tcp');
($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname);
($name, $aliases, $type, $len, $thataddr) = gethostbyname($servername);
($this) = pack($sockaddr, $AF_INET, 0, $thisaddr);
($that) = pack($sockaddr, $AF_INET, $port, $thataddr);
printf "Connect $servername:%6.6s... " , $serv if $debug;
print "Socket" if $debug2 || $debug;
if ( ! socket(S, $AF_INET, $SOCK_STREAM, $proto) ) {
close(S);
return 0;
}
print ". " if $debug2 || $debug;
print "Bind" if $debug2 || $debug;
if ( ! ( $be = bind(S, $this)) ) {
close(S);
return 0;
}
print ". " if $debug2 || $debug;
print "Connect" if $debug2 || $debug;
if ( ! ( $be = connect(S, $that)) ) {
close(S);
return 0;
}
print ". ok\n" if $debug2 || $debug;
1;
}