Не прошло и месяца, как специалисты из Мичиганского университета выпустили программу Zmap, которая способна с одного-единственного ПК, подключенного к сети по гигабитному каналу, просканировать все адресное пространство IPv4 за 45 минут. Естественно, имеется в виду только время рассылки пакетов, без учета последующих действий.
Теперь вышел еще один сканер под названием Masscan с примерно такой же производительностью и таким же методом работы — через собственный сетевой драйвер PF_RING DNA, собственный TCP-стек, в обход ядра операционной системы.
Разработчик уверяет, что программа на 1-гигабитном канале генерирует 1,6 млн SYN-пакетов в секунду (под Linux) или 300 тыс. (в виртуальной машине или под Windows). На 10-гигабитном канале производительность системы превышает 10 млн пакетов в секунду, а подключив к северу восемь сетевых карт по 10 гигабит, можно добиться производительности 100 млн пакетов в секунду.
Чтобы не повалить подсеть, куда направлено сканирование, сканер осуществляет принудительную рандомизацию IP-адресов. Авторы пришлось немало поломать голову, как сделать это наиболее эффективным способом, чтобы не уменьшать скорость сканирования.
range = ip_count * port_count; for (i = 0; i < range; i++) { x = encrypt(i); ip = pick(addresses, x / port_count); port = pick(ports, x % port_count); scan(ip, port); }
Если так пойдет и дальше, то через несколько лет, когда 10-гигабитные каналы станут более обычным делом, чуть ли не каждый школьник сможет просканировать интернет со своего домашнего ПК.