Этюд 5. Сканирование под собственные нужды. Сначала я хотел в этом топе показать обычный сканер портов. Но это скучно.
Покажу ка лучше вот что: тоже сканер, но сканировать он будет указанный диапазон ip, на один открытый порт, тот который мы укажем.
Ну, например мы просканируем какую то сеть на открытый 23 порт. Те системы, у которых он открыт, могут быть уязвимы.
Итак, алгоритм:
Нам будет дан адрес и порт. В цикле перебираем последний разряд айпишника от 0 до 255 и пытаемся подключиться к указанному порту.
Ну и все в принципе. Если подключение произошло успешно, выводим адрес.
Вотисходник:
Code
#!/usr/bin/perl
use Socket;
$host=@ARGV[0];
$port=@ARGV[1];
@ip=split (/\D+/, $host); #делим айпи на разряды по точке
$index=0;
$r1=$ip[0]; #записываем разряды в массив
$r2=$ip[1];
$r3=$ip[2];
$host=$r1.".".$r2.".".$r3; #составляем предварительный адрес
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
while($index<=255)
{
$host=host.".".$index; #составляем окончательный адрес
$addr = inet_aton($host); # далее коннект
$paddr = sockaddr_in($port, $addr);
if(connect(SOCK, $paddr)){
print("Host: $host open $port port");
}else{
next;
}
}
Это нужно принимать как макет.
Если будет серьезная разработка, то нужно включить многопоточность.
Вообще еще можно сделать так:
читать баннеры и сравнивать их с уязвимыми. Если сходиться, то сервис возможно уязвим.
Напоследок.
Данный материал был написан даже не с целью напичкать вас чем то новым (если это для вас ново), а для того что бы показать всю привлекательность языка perl. Я искренне надеюсь, что после этой статьи вам захочется изучать его.