Как определить, какие IP-адреса в заданном диапазоне имеют порт 80, используя nmap?
Я новичок в bash сценариях, и я пытаюсь заставить это работать:
Сканирование диапазона IP для поиска устройств с открытым портом 80...
Я думаю, что это должно выглядеть так:
#!/bin/bash
echo -----------------------------------
for ip in 192.168.0.{1,.255}; do
nmap -p80 192.168.0.1
if #open; then
echo "{ip} has the port 80 open"
else
#do nothing
fi
done
echo -----------------------------------
exit 0
Я также хочу увидеть результаты следующим образом:
-----------------------------------
192.168.0.1 has the port 80 open
192.168.0.10 has the port 80 open
192.168.0.13 has the port 80 open
192.168.0.15 has the port 80 open
-----------------------------------
(Итак, без ошибок или nmap
нормальных выходов..)
Может кто-нибудь мне помочь?
Ответы
Ответ 1
nmap
поставляется с хорошим выходным параметром -oG
(grepable output), что упрощает разбор парсинга. Также нет необходимости перебирать все IP-адреса, которые вы хотите отсканировать. nmap - это сетевая маска.
Ваш пример может быть записан как:
nmap -p80 192.168.0.0/24 -oG - | grep 80/open
-oG
позволяет выводить grepable, а -
указывает файл для вывода (в данном случае stdout
). Символ трубы перенаправляет вывод nmap (stdout) в grep, который в этом случае возвращает строки, содержащие 80/open
.
Ответ 2
Попробуйте это
nmap --open -p80 192.168.0.*
--open
будет отображаться только список с открытым портом 80. Таким образом, вы сохраняете необходимость проверять свою оболочку script, поскольку фильтрация уже выполняется самой nmap.
https://nmap.org/book/man-briefoptions.html