
11.04.2009, 22:13
|
|
Познающий
Регистрация: 29.03.2009
Сообщений: 87
С нами:
9010027
Репутация:
308
|
|
Если требуется быстро просканить некоторок количество сайтов и их ближайшие IP на маленький список возможных уязвимостей, то вот скрипт:
Код:
#! /usr/bin/perl -w
use Net::DNS;
if (@ARGV<2) {
print <<END;
============================================================
Usage: SCRIPT.PL TOP BOTTOM
ip4scan.pl 10 15 > out.txt
TOP & BOTTOM: scope around ip
example: ip = 64.125.86.120, TOP = 10 BOTTOM = 15
get range to scan: 64.125.86.105 ... 64.125.86.130
in.txt: list hostnames for scan
ipbase.txt: note base of scaned hostname
format hostname -> ip
============================================================
END
exit;}
open(IN, "<in.txt");
open(IPBASE, ">>ipbase.txt");
@hostname = <IN>;
chomp @hostname;
# Строим хэш $hostname -> $IP-адрес (только первый IP из возвращаемых)
foreach $hostname (@hostname) {
$ip{$hostname} = &resolve($hostname);
}
# Записываем эти пары в одну кучу в файл без проверки на повторы
foreach $hostname (sort keys %ip) {
print IPBASE "$hostname -> $ip{$hostname}\n";
}
# Строим диапазоны для сканирования вокруг целевых IP-адресов
# Нижнее и верхнее значение задается в параметрах, передаваемых скрипту
foreach $hostname (sort keys %ip) {
$top = &ip2int( $ip{$hostname} ) + $ARGV[0];
$bottom = &ip2int( $ip{$hostname} ) - $ARGV[1];
@range = map {&int2ip($bottom + $_)} (0..$top-$bottom);
print join ("\n", @range),"\n";
}
# Подпрограмма определения ip-адреса по имени хоста
sub resolve {
my $res = Net::DNS::Resolver->new;
my $query = $res->search("$hostname");
if ($query) {
foreach my $rr ($query->answer) {
next unless $rr->type eq "A";
return $rr->address;
}
} else {
warn "query failed: ", $res->errorstring, "\n";
}
}
# Подпрограмма перевода IP-адреса в 32-разрядное число
# Лучше подпрограмм ip2int и int2ip не придумалось
sub ip2int {
@a = split(/\./,$_[0]);
return $a[0]*256**3+$a[1]*256**2+$a[2]*256+$a[3];
}
# Подпрограмма перевода 32-разрядного числа в IP-адрес
sub int2ip {
$d[0] = int($_[0]/256/256/256);
$d[1] = int(($_[0]-$d[0]*256**3)/256/256);
$d[2] = int(($_[0]-$d[0]*256**3-$d[1]*256**2)/256);
$d[3] = int($_[0]-$d[0]*256**3-$d[1]*256**2-$d[2]*256);
return join (".", @d);
}
Список с именами хостов находится в файле in.txt.На выходе в файле out.txt получаются диапазоны IP с заданными границами.
|
|
|