Bisakah nmap menampilkan hanya host dengan port tertentu yang terbuka?

18

Bisakah nmapdaftar semua host di jaringan lokal yang memiliki SSH dan HTTP terbuka? Untuk melakukannya, saya dapat menjalankan sesuatu seperti:

nmap 192.168.1.1-254 -p22,80 --open

Namun, ini mencantumkan host yang memiliki SEMUA port daftar terbuka, sedangkan saya ingin host yang memiliki SEMUA port terbuka. Selain itu, outputnya cukup bertele-tele:

# 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

Apa yang saya cari adalah output seperti:

192.168.1.16

karena host di atas adalah satu-satunya dengan SEMUA port terbuka.

Saya tentu saja dapat memposting proses, tetapi saya tidak ingin bergantung pada format keluaran nmap, saya lebih suka nmap melakukannya, jika ada cara.

Brian
sumber
Jika Anda ingin menguji hanya satu port, 'nmap -p 22 | grep -B3 open 'adalah cara yang mudah.
Luciano Andress Martini

Jawaban:

10

Tidak ada cara untuk melakukan itu dalam Nmap, tetapi komentar Anda tentang tidak ingin "bergantung pada format output dari nmap" memungkinkan saya menunjukkan bahwa Nmap memiliki dua format output yang stabil untuk penguraian yang dapat dibaca oleh mesin. Yang lebih tua adalah keluaran Grepable ( -oG) , yang bekerja dengan baik untuk diproses dengan perl, awk, dan grep, tetapi kehilangan beberapa output yang lebih maju (seperti output skrip NSE, alasan port, traceroute, dll.). Format yang lebih lengkap adalah output XML ( -oX) , tetapi mungkin berlebihan untuk tujuan Anda.

Anda dapat menyimpan output ini ke file dengan -oG,, -oXatau -oA(kedua format plus output teks "normal"), atau Anda dapat mengirim salah satu langsung ke stdout:nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'

bonsaiviking
sumber
1
Yang sempurna, hanya apa yang saya cari (yang -oG -)
Brian
2

Pertimbangkan juga awksatu kalimat ini:

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}'

Ini akan mencetak semua host dengan semua port terbuka yang ditentukan seperti ini:

 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
Suncatcher
sumber
Anda harus menambahkan -p setelah menguji ini. Tanda '-' pada baris perintah berada tepat setelah -oG
Wayne
1

Coba perintah berikut:

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

Ini akan memindai port Anda dalam jangkauan Anda dan menyalurkan output dalam format greppable mencari port terbuka, lalu mencetak alamat IP yang sesuai dengan salah satu kriteria itu.

Marshall Hallenbeck
sumber
Selamat datang di U&L! Perhatikan bahwa jawaban yang diterima dari ~ 3 tahun yang lalu memiliki versi yang lebih sederhana di mana ini menggunakan awk untuk menangkap dan mencetak.
Jeff Schaller
1
Saya berpendapat bahwa milik saya lebih baik karena Anda tidak perlu menambahkan data tambahan untuk lebih banyak port di luar opsi port. Dia mengharuskan Anda untuk memperbarui awk Anda dengan setiap port juga, yang tidak perlu bertele-tele.
Marshall Hallenbeck