Как определить, какие 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