Я хочу получить список всех хостов в моей сети, которые имеют открытые порты 22, 80 и 443 (все три из них). В настоящее время я использую два метода, оба имеют недостатки, и мне интересно, есть ли лучший способ, который я пропускаю.

1-й метод:

nmap -PS22 -p22,80,443 192.168.2.\* -oG - | grep "open.*open.*open"
Host: 192.168.2.250 (192.168.2.250) Ports: 22/open/tcp//ssh///, 80/open/tcp//http///, 443/open/tcp//https///

Мне нужно сопоставить количество портов с количеством появлений "открытого" слова. Это уродливо, это долго, и его выход еще длиннее и уродливее

2-й метод:

nmap -PS22 -p22,80,443 192.168.2.*
Nmap scan report for 192.168.2.250 (192.168.2.250)
Host is up (0.051s latency).
22/tcp open  ssh
80/tcp open  http
443/tcp open  https

Это более простая команда, но она требует, чтобы я визуально обнаружил узлы, которые имеют 3 линии открытых портов, как в примере выше. В сети с большим количеством хостов, у которых открыт только один или два из трех портов, это сложно.

Есть ли лучший способ?

1 ответ1

2

Оба довольно легко разобрать. Второй вот так:

nmap -PS22 -p22,80,443 192.168.2.* | awk '/^Nmap scan/ { host = $NF; gsub( /[()]/, "", host) }; /^(22|80|443)/ && $2=="open" { open=open " " $3;  ++cnt}; host && /^$/ { printf "%2s %-20s %s\n", (cnt!=3 ? "!" : "OK"), host, open; host=open=""; cnt=0}'

Это напечатает индикатор (ОК или!) в 1-м столбце, затем IP и, наконец, имена открытых сервисов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .