Есть ли способ сканировать бесплатные IP-адреса в сети? я использую nmap -sP 192.168.1.0/24
но на самом деле это показывает, что хосты активны.
Использование Nmap таким образом - довольно точный способ сделать то, что вы просили, при условии, что некоторые предварительные условия верны:
Чтобы получить «доступные» адреса, вам необходимо получить список адресов, которые Nmap сообщает как «неработающие». Вы можете сделать это с помощью простой команды awk:
sudo nmap -v -sn -n 192.168.1.0/24 -oG - | awk '/Status: Down/{print $2}'
Сводка используемых опций Nmap:
-v
опция, Nmap будет печатать найденные адреса как «неработающие» в дополнение к «верхним».-sP
, Я заменил новое написание -sn
, который по-прежнему выполняет то же сканирование, но означает «пропустить сканирование порта» вместо вводящего в заблуждение «Ping-сканирования» (поскольку фаза обнаружения хоста не обязательно означает сканирование ICMP Echo или Ping).-n
опция пропускает обратный поиск DNS, что дает вам немного времени, поскольку вас интересуют не имена, а только IP-адреса.-oG
опция указывает Nmap выводить grepable формат, который легче обрабатывать awk. Аргумент "-
"указывает ему отправить этот вывод на стандартный вывод.Затем команда awk выполняет поиск «Status: Down» и выводит второе поле, содержащее IP-адрес.
Конечно, если у вас есть доступ к рабочим конфигурациям коммутатора или к аренде DHCP-сервера, вы можете получить этот ответ гораздо более авторитетно, не выполняя сканирование, которое могло бы вызвать срабатывание сигнализации.
Не уверен насчет n-map, но можно было бы разумно предположить, что если вы напишете сценарий ping, который отправляет 1 ping на каждый адрес, все узлы, которые возвращаются с "назначением недоступно", не заняты, а все, что возвращается, "запрос истекает" занят, но не отвечает на пинг. Разница между двумя ответами заключается в том, что «пункт назначения недоступен» не получил ответа на свой запрос ARP. «Тайм-аут запроса» означает, что что-то действительно ответило на запрос ARP, но не на пакет ICMP.
То же самое и в PowerShell ....
((nmap -v -sn -n 10.208.2.0/24 -oG - ) -match "Status\:\sDown") | foreach {($_).Split(" ")[1]}
Вот еще один, вдохновленный Андерсом Ларссоном.
для IP в 172.18.5. {129..254}; сделать {ping -c 1 -W 1 $ ip; } &> / dev / null || echo $ ip & готово | Сортировать
Это означает: «Попробуйте выполнить эхо-запрос для всех IP-адресов в диапазоне. Если« эхо-запрос »не прошел, распечатайте этот IP-адрес»
Если вы это сделаете
nmap -v -sn -n 192.168.1.0/24 -oG - | awk '/Status: Down/{print $2}'
Работает быстро, но я заметил, что некоторые хосты, отмеченные как «Вниз», на самом деле «Вверх»