Для этой задачи вы можете использовать структуру создания пакетов, такую как scapy или PacketFu, так как они позволят вам точно указать, какой тип пакетов отправлять, не требуя нового процесса для запускаться каждый раз.
Вы также можете использовать инструмент для создания пакетов, например Nping, hping3 или nemesis, но эти также потребует запуска нового процесса для каждого зонда (насколько мне известно).
Вы можете сделать что-то подобное в сценарии Nmap, используя socket:bind
для выбора исходного порта. для каждого connect
, но для получения где-то рядом с производительностью полного сканирования портов Nmap. Во-первых, вам нужно будет распараллелить, чтобы отправлять более одного пакета за раз, но тогда вы можете перегрузить цель или сеть и столкнуться с проблемами перегрузки. Тем не менее, возможно, стоит попробовать небольшое количество (около 20) рабочих потоков, чтобы ускорить процесс.
Чтобы ускорить текущий метод, используйте -n
, чтобы пропустить обратное разрешение имен. Вы можете распараллелить его, запустив некоторые процессы nmap в фоновом режиме или используя GNU Parallel. Вы можете попытаться уменьшить количество повторных попыток с помощью --max-retries
, так как максимальное значение по умолчанию равно 10, но быстрый тест здесь показывает, что с -Pn
и одним портом Nmap пытается получить доступ к порту только 2 раза. Если вы хотите чего-то особенного, вы можете использовать --initial-rtt-timeout
и --max-rtt-timeout
, так как Nmap преднамеренно консервативен при запуске, предполагая, что он отправит много пакетов и получит лучшее представление о состоянии сети. Сканирование одного порта на одном хосте без обнаружения хоста означает, что у него не будет возможности настроить себя. Если вы запустите ping -c 10
для своей цели, вы можете использовать ее последнюю строку вывода для установки этих значений. Например, если я вижу:
$ ping -c 10 scanme.nmap.com
PING scanme.nmap.com (74.207.244.221) 56(84) bytes of data.
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=1 ttl=56 time=75.0 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=2 ttl=56 time=75.5 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=3 ttl=56 time=73.9 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=4 ttl=56 time=75.4 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=5 ttl=56 time=74.7 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=6 ttl=56 time=78.9 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=7 ttl=56 time=73.6 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=8 ttl=56 time=79.4 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=9 ttl=56 time=74.8 ms
64 bytes from scanme.nmap.org (74.207.244.221): icmp_req=10 ttl=56 time=75.1 ms
--- scanme.nmap.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9012ms
rtt min/avg/max/mdev = 73.646/75.691/79.459/1.857 ms
затем я могу установить --initial-rtt-timeout
в avg + 4 * mdev = 83ms
, чтобы получить хороший широкий запас в 4 стандартных отклонения от среднего времени прохождения туда и обратно. По умолчанию Nmap ожидает 1000 мс (1 секунду), так что это довольно большое ускорение. На всякий случай установите --max-rtt-timeout
в 10 раз больше начального значения.
person
bonsaiviking
schedule
12.09.2014