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にそれを実行させたいと思います。
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}'
この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
次のコマンドを試してください。
nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'
これにより、範囲内のポートがスキャンされ、出力をgreppable形式でパイプして開いているポートを探し、その基準のいずれかに一致するIPアドレスを出力します。