
В настоящее время я используюNmapдля отображения локальных сетей в рамках моей программы, и мне было интересно, сколько времени займет выполнение различных сканирований портов на всех портах?
Каковы время ожидания и средний размер пакета, отправляемого для проверки открытости порта (если пакеты отправляются для проверки), и есть ли какая-либо корреляция между временем, затраченным на сканирование, на основе этих и других факторов?
Мне бы хотелось иметь возможность представить это в виде графика и, возможно, также проверить эти результаты.
Я знаю, что сканирование портов UDP обычно занимает больше времени, чем TCP, поскольку не требует установления соединения и использует гораздо больше ресурсов.
решение1
Здесь может быть задействовано множество факторов, включая скорость соединения, дуплекс, минимальный размер пакета, время прохождения сигнала туда и обратно, задержку целевого хоста, задействована ли система обнаружения/предотвращения вторжений, а также количество проходов туда и обратно, требуемое для конкретного типа сканирования, загруженность соединения и т. д.
Итак, предположим, что сканирующая машина и цель находятся на одном гигабитном Ethernet, и оценим теоретическое минимальное время, которое может занять сканирование 65536 портов. GigE всегда полнодуплексный, имеет минимальный размер кадра 64 байта и после расчета обязательных межкадровых промежутков имеет максимальную частоту кадров 1 488 000 кадров минимального размера в секунду. TCP Syns, Syn-Acks, (пустые) Acks, Fins и Rsts — все это кадры минимального размера. На GigE, на котором я сейчас работаю, RTT составляет 0,3 мс (300 мкс), поэтому предположим, что целевой хост отвечает на Syns либо Syn-Ack, либо Rst в пределах той же задержки в 0,3 мс. Давайте далее предположим, что он ответит одним или другим; что не будет никаких «отфильтрованных» портов, для которых нам просто придется ждать некоторого произвольного тайм-аута.
Таким образом, время, необходимое для отправки TCP Syns на все порты, составляет: 65 536 / 1 488 000 = 44 мс.
Поскольку GigE является полнодуплексным, первые ответы начнут приходить по мере отправки более поздних Syn, но нам придется ждать 1 RTT между последним отправленным Syn и последним ответом, поэтому добавьте 1 RTT, что составляет 0,3 мс, итого44,3 мс.
Даже если бы сканирование выполнялось дважды, весь сетевой трафик все равно мог бы быть обработан менее чем за секунду.
Обратите внимание, что если целевой хост не отвечает на Syns для некоторых портов, вам придется сделать свой собственный выбор того, как долго устанавливать тайм-аут «нет ответа», в вашем собственном алгоритме. Но вы можете думать об этом как о RTT. Допустим, вы хотите использовать 10-секундный тайм-аут. Вы по-прежнему можете отправлять все свои Syns за 44 мс, но вам, возможно, придется подождать 10 секунд с момента последней отправки Syn, чтобы определить, что вы вряд ли получите ответ с этого порта. Таким образом, даже в случае, если все 2^16 портов не отвечают, и 10-секундный тайм-аут, ваше общее время будет 44 мс + 10 секунд = 10,044 секунды.