端口扫描(TCP)
测试了一下速度和 C 几乎一样有时候甚至更快
usage: port_scan.pl localhost 1 65535
#!/usr/bin/perl
# NetKen.
if ( @ARGV != 3 ) {
print "\nUsage: port_scan.pl <IP Address> <Start Port> <End Port>\n\n";
exit(0);
}
($SERVER,$PORT_START,$PORT_END) = @ARGV;
$PACKIT = 'S n C4 x8';
$AF_INET = 2;
$SOCK_STR = 1;
$DEF_PROTO=0;
$PORT = $PORT_START;
my($name,$aliases,$addrtype,$len,@addrs) = gethostbyname($SERVER);
@IPaddr = unpack('C4',$addrs[0]);
print "Host: $name\nIP : $IPaddr[0].$IPaddr[1].$IPaddr[2].$IPaddr[3]\nAlias:$aliases , Address type: $addrtype , Length:$len\n";
while ( $PORT++ < $PORT_END ) {
$that=pack($PACKIT,$AF_INET,$PORT,@IPaddr);
$socket = socket(CSOCK,$AF_INET,$SOCK_STR,$DEF_PROTO) || print "$0: Could not Create Socket\n";
$result = connect(CSOCK,$that);
if($result == 1) {
print "\nOpen $PORT\n";
} else {
print "\b.";
}
close(CSOCK);
}
print "\n";
exit(0);