[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / 便利なスクリプト片(未整理) / portscan.pl ]

portscan.pl

#! /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;
}