
- UID
- 2033152
- 威望
- 1 点
- 金钱
- 3090 金币
- 点卡
- 0 点
|
1#
发表于 2003-9-3 18:19
| 只看该作者
[转帖]A NEtwork Scanner
呵呵!少做修改就可以做其他的scanner.
#!/usr/bin/perl -w
# Scan for open specified port on a class C IP address block, or all
# open ports on a single host.
use strict;
use Socket;
my ($verbose_ccipa, $verbose_shps, $connect_time, $protocol_name, $protocol_id,
$ccnip, $port, $scdnip, $ecdnip, $i, $iaddr, $paddr, $cdnip);
$verbose_ccipa = 1;
$verbose_shps = 0;
$connect_time = 1;
$protocol_name = "tcp";
$protocol_id = getprotobyname($protocol_name);
($ccnip, $port, $scdnip, $ecdnip) = @ARGV;
$ccnip or die global_usage();
$port and class_c_network_specified_port_scan() or single_host_port_scan();
sub global_usage()
{
print "\nSingle host port scan:\n",
" \$ ss.pl <dns/ip>\n",
" - Scan for all open ports on <dns/ip>.\n\n",
"Class C IP specified port scan:\n",
" \$ ss.pl <ccnip> <port> [<scdnip>] [<ecdnip>]\n",
" - Scan for specified open <port> on <ccnip>.<1|<scdnip>>\n",
" to <ccnip>.<255|<ecdnip>>.\n\n";
exit 1;
}
sub class_c_network_specified_port_scan()
{
$ccnip !~ /[0-9]+\.[0-9]+\.[0-9]+/ and
die "Error: $ccnip [ccnip] is not in format <0-255>.<0-255>.",
"<0-255>\n";
if ($scdnip) {
$scdnip !~ /[0-9]+/ and
die "Error: $scdnip [scdnip] is not in format ",
"<0-255>\n";
$scdnip > 254 and $scdnip = 254;
$scdnip < 0 and $scdnip = 1;
} else {
$scdnip = 1;
}
if ($ecdnip) {
$ecdnip !~ /[0-9]+/ and
die "Error: $ecdnip [ecdnip] is not in format ",
"<0-255>\n";
$ecdnip > 254 and $ecdnip = 254;
$ecdnip < 0 and $ecdnip = 1;
} else {
$ecdnip = 254;
}
print "\nScanning for open port $port on $ccnip.($scdnip > $ecdnip) ",
"using $protocol_name protocol.\n";
$verbose_ccipa and
print "Verbose mode is on, printing refused connections.\n\n"
or
print "Verbose mode is off, only printing accepted ",
"connections.\n\n";
for ($i = $scdnip; $i < $ecdnip + 1; $i++) {
$SIG{"ALRM"} = sub { close(SOCKET); };
alarm $connect_time;
socket(SOCKET, PF_INET, SOCK_STREAM, $protocol_id);
$cdnip = "$ccnip.$i";
$iaddr = inet_aton($cdnip);
$paddr = sockaddr_in($port, $iaddr);
if (connect(SOCKET, $paddr)) {
printf "%0s %20s %14s %12s", $protocol_name, $cdnip,
$port;
print "Connection accepted.\n";
close(SOCKET);
} else {
if ($verbose_ccipa) {
printf "%0s %20s %14s %12s", $protocol_name,
$cdnip, $port;
print "Connection refused.\n";
}
close(SOCKET);
}
}
exit 1;
}
sub single_host_port_scan()
{
if ($ccnip !~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) {
gethostbyname($ccnip) or
die "Error: Can't resolv $ccnip [dns/ip].\n";
}
print "\nScanning for all open ports on $ccnip using $protocol_name ",
"protocol.\n";
$verbose_shps and
print "Verbose mode is on, printing refused connections.\n\n"
or
print "Verbose is off, only printing accepted connections.\n\n";
for ($port = 1; $port < 65536; $port++) {
$SIG{"ALRM"} = sub { close(SOCKET); };
alarm $connect_time;
socket(SOCKET, PF_INET, SOCK_STREAM, $protocol_id);
$iaddr = inet_aton($ccnip);
$paddr = sockaddr_in($port, $iaddr);
if (connect(SOCKET, $paddr)) {
printf "%0s %20s %14s %12s", $protocol_name, $ccnip,
$port;
print "Connection accepted.\n";
close(SOCKET);
} else {
if ($verbose_shps) {
printf "%0s %20s %14s %12s", $protocol_name,
$ccnip, $port;
print "Connection refused.\n";
}
close(SOCKET);
}
}
exit 0;
}
|
|