web-dev-qa-db-ja.com

nmapは、特定のポートが開いているホストのみを表示できますか?

SSHとHTTPの両方が開いているローカルネットワーク上のすべてのホストをnmapで一覧表示できますか?そうするために、私は次のようなものを実行できます:

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にそれを実行させたいと思います。

20
Brian

Nmap内でこれを行う方法はありませんが、「nmapの出力形式に依存しない」ことを望まないというコメントで、Nmapにはマシン用の2つの安定した出力形式があります。古いものは Grepable output(-oG で、Perl、awk、およびgrepでの処理に適していますが、より高度な出力(NSEスクリプトなど)の一部が欠落しています出力、ポートの理由、tracerouteなど)。より完全な形式は XML output(-oX ですが、目的によってはやりすぎかもしれません。

これらの出力を-oG-oX、または-oA(両方の形式と「通常の」テキスト出力)を使用してファイルに保存するか、いずれかを直接stdoutに送信できます:nmap 192.168.1.1-254-p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'

11
bonsaiviking

この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
2
Suncatcher

次のコマンドを試してください。

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

これにより、範囲内のポートがスキャンされ、出力をgreppable形式でパイプして開いているポートを探し、その基準のいずれかに一致するIPアドレスを出力します。

2