Назад | Перейти на главную страницу

Самый быстрый способ сканировать все хосты, которые находятся в сети

Я ищу, чтобы найти все хосты, которые подключены к сети в наборе сетей.

Я хотел бы найти все хосты, которые находятся в сети во всей сети 170.10.. (возможных хостов ~ 64К). Сеть, которую я пытаюсь просканировать, является внутренней локальной сетью.

Я использовал инструмент nmap. Но это занимает около 50 минут, что слишком долго. Из 64К хостов в сети может быть только около 20-40 хостов. Но проблема в том, что они могут быть в любой (или в одной или нескольких) сетях из возможных 256 сетей.

Я ищу способ быстро в этом разобраться. Я не думаю, что использование команды ping поможет, поскольку пинг 64K хостов не будет быстрее.

Я ищу какое-либо альтернативное решение, например, рассылку ICMP-пакетов напрямую во все 256 сетей или что-то подобное.

Есть идеи / предложения? Спасибо.

короткий ответ: nmap -sn -T5 --min-parallelism 100 subnet/mask -oG output.file.txt; grep -v Down output.file.txt

Объяснение: один Nmap может сканировать намного быстрее. Начнем с того, что ограничим nmap сканирование ping с помощью -sP (в более новых версиях -sP заменено -sn)

Из man nmap:

TIMING AND PERFORMANCE:
     Options which take <time> are in seconds, or append 'ms' (milliseconds),
     's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
     -T<0-5>: Set timing template (higher is faster)
     --min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
     --min-parallelism/max-parallelism <numprobes>: Probe parallelization
     --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
         probe round trip time.
     --max-retries <tries>: Caps number of port scan probe retransmissions.
     --host-timeout <time>: Give up on target after this long
     --scan-delay/--max-scan-delay <time>: Adjust delay between probes
     --min-rate <number>: Send packets no slower than <number> per second
     --max-rate <number>: Send packets no faster than <number> per second

Пришло время для небольшого эксперимента с параллельным запуском дополнительных сканирований ping --max-parallelism и бросая предупреждение о том, что вас заметят на ветру -T5:

nmap без опций:

% time nmap -sP 192.168.1.0/24 
[...]
nmap -sP 192.168.1.0/24  0.04s user 0.02s system 2% cpu 2.917 total
% time nmap -T5 --max-parallelism=100 -sP 192.168.1.0/23
[...]
nmap -sP 192.168.1.0/23  0.08s user 0.04s system 0% cpu 37.469 total

nmap с параметрами времени:

% time nmap -T5 --max-parallelism=100 -sP 192.168.1.0/24
[...]
nmap -T5 --max-parallelism=100 -sP 192.168.1.0/24  0.03s user 0.03s system 3% cpu 2.016 total
% time nmap -T5 --max-parallelism=100 -sP 192.168.1.0/23
[...]
nmap -T5 --max-parallelism=100 -sP 192.168.1.0/23  0.11s user 0.02s system 2% cpu 4.869 total

Вполне улучшение.

Для сканирования подсети / 16, как спросил OP:

Nmap done: 65536 IP addresses (30 hosts up) scanned in 169.43 seconds
nmap -sP -T5 --min-parallelism 100 --max-parallelism 256 192.168.0.0/16  44.67s user 8.45s system 31% cpu 2:49.44 total

Чтобы добавить предложение @Dan в микс, мне стало скучно после пяти минут, когда fping все еще работал :-)

Больше тем. Запустите 256 сканирований Nmap одновременно. Надеюсь, ваш хост сможет обрабатывать одновременные подключения.

for i in 172.10.{0..255}.0 ; do nmap $i <arguments> & done;

Возможно, вы захотите убедиться, что он где-то записывается в файл, так как вывод терминала было бы ужасным, если бы пытаться анализировать с 256 nmaps за один раз.

Редактировать:

Вы можете сделать то же самое с ping. Просто убедитесь, что вы ограничили количество. Возможно, вы захотите настроить это:

for i in {0..255} ; do for j in 172.10.$i.{0..255} ; do ping $j -c 2 -W 1 | \
    grep "bytes from" >> aliveips.txt & done ; done