Скрипт nmap для перебора исходных портов

Я пытаюсь сканировать сеть, меняя исходный порт и нацеливаясь на один порт назначения в соответствии с:

for source_port in `seq $start $end`
do
    nmap -sS -p $dest_port --source-port $source_port -P0 $dest_ip
done

проблема в том, что я каждый раз запускаю процесс nmap

Кажется, что nmap спроектирован так, чтобы легко переключать порты назначения в командной строке, но для исходного порта я не могу найти способ указать диапазон даже с помощью сценария nmap (не знаю, как получить доступ к переменной исходного порта в сценарии)

у кого-нибудь есть идея?

Спасибо


person Louis    schedule 12.09.2014    source источник


Ответы (1)


Для этой задачи вы можете использовать структуру создания пакетов, такую ​​как 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