Чи може відображати nmap лише хости з відкритими конкретними портами?


18

Чи можна nmapперерахувати всі хости в локальній мережі, у яких відкриті і SSH, і HTTP? Для цього я можу запустити щось на кшталт:

nmap 192.168.1.1-254 -p22,80 --open

Однак у цьому списку перелічені хости, у яких відкриті БУДЬ-які з портів списку, тоді як я хотів би хостів, у яких відкриті ВСІ порти. Крім того, результат є досить багатослівним:

# nmap 192.168.1.1-254 -p22,80 --open

Starting Nmap 6.47 ( http://nmap.org ) at 2015-12-31 10:14 EST
Nmap scan report for Wireless_Broadband_Router.home (192.168.1.1)
Host is up (0.0016s latency).
Not shown: 1 closed port
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for new-host-2.home (192.168.1.16)
Host is up (0.013s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 254 IP addresses (7 hosts up) scanned in 3.78 seconds

Те, що я шукаю - це вихід просто:

192.168.1.16

оскільки вищевказаний хост єдиний із ВСІМИ відкритими портами.

Я, безумовно, можу переробити вихідний результат, але я не хочу покладатися на вихідний формат nmap, я б скоріше за все мав nmap зробити це, якщо є спосіб.


Якщо ви хочете протестувати лише один порт, 'nmap -p 22 | grep -B3 open '- простий спосіб.
Luciano Andress Martini

Відповіді:


10

Немає способів це зробити в межах Nmap, але ваш коментар про не хочу "покладатися на вихідний формат nmap" дозволяє мені зазначити, що Nmap має два стабільні вихідні формати для машиночитаного розбору. Старший - Grepable output ( -oG) , який добре працює для обробки perl, awk та grep, але не вистачає деяких більш досконалих результатів (наприклад, вихід NSE-скрипту, причини порту, traceroute тощо). Більш повним форматом є вихід XML ( -oX) , але він може бути надмірним для ваших цілей.

Ви можете або зберегти ці виходи у файли з -oG, -oXабо -oA( або в обох форматах плюс "звичайний" текст), або ви можете надіслати один прямий в stdout:nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'


1
Це відмінно, тільки те , що я шукав (в -oG -)
Brian

2

Розглянемо також цей awkоднопластовий:

nmap -Pn -oG -p22,80,443,445 - 100.100.100.100 | awk '/open/{ s = ""; for (i = 5; i <= NF-4; i++) s = s substr($i,1,length($i)-4) "\n"; print $2 " " $3 "\n" s}'

Він надрукує всі хости з усіма вказаними відкритими портами, як це:

 100.100.100.100 (some-domain.com)
 22/open/tcp//ssh
 80/open/tcp//http
 443/open/tcp//microsoft-ds
 445/open/tcp//https-alt

Ви, мабуть, додали -p після тестування цього. Командний рядок '-' належить одразу після -oG
Wayne

1

Спробуйте виконати таку команду:

nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'

Це дозволить сканувати ваші порти у вашому діапазоні та передавати висновок у форматі, що можна отримати, щоб шукати відкриті порти, а потім надрукувати IP-адреси, які відповідають будь-якому з цих критеріїв.


Ласкаво просимо до U&L! Зауважте, що прийнята відповідь від ~ 3 років тому має більш просту версію, де вона використовує awk для розгортання та друку.
Джефф Шаллер

1
Я б зауважив, що моє краще, оскільки вам не доведеться додавати додаткові дані для більшої кількості портів за межами параметра порту. Він вимагає, щоб ви також оновлювали свій awk з кожним портом, що зайве багатослівно.
Маршалл Халленбек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.