
nmap
SSHとHTTPの両方が有効になっているローカルネットワーク上のすべてのホストを一覧表示できますか?これを行うには、次のコマンドを実行できます。
nmap 192.168.1.1-254 -p22,80 --open
ただし、ここにリストされているポートの1つを開くホストを一覧表示しますが、ホストにすべてのポートを開くようにしたいと思います。また、出力は非常に冗長です。
# 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が実行するようにしたいと思います。
答え1
Nmapにはこれを行う方法はありませんが、「nmapの出力形式に依存」したくないというあなたの意見で、Nmapには機械可読解析のための2つの安定した出力形式があることを指摘しました。年をとる人はクエリ出力(-oG
)、これはPerl、awk、およびgrepを使用した処理に適していますが、いくつかの高度な出力(NSEスクリプト出力、ポート理由、パス追跡など)が不足しています。より完全な形式は次のとおりです。XML出力( -oX
)しかし、これはあなたの目的と比較して過剰かもしれません。
-oG
、または(-oX
両方の形式と「通常の」テキスト出力の両方)を使用してこれらの出力をファイルに保存したり、次のいずれ-oA
かをstdoutに直接送信したりできます。nmap 192.168.1.1-254 -p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'
答え2
次のコマンドを試してください。
nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'
その後、範囲内のポートを取得し、出力をgrepable形式にパイプして開いているポートを見つけ、その基準に一致するIPアドレスを印刷します。
答え3
また、次の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
答え4
これらの回答には、開いているポートがあっても無視されたポートが表示されます。私に役立つのは次のとおりです。
sudo nmap -sS "10.10.10.0/24" --open -oG ./nmap_scan; sudo chown youruser: ./nmap_scan; cat ./nmap_syn | grep -v 'Nmap\|Status:' | sed 's/\t/,/g' | awk '{gsub("Ignored State: .*", "");print}' | column -t -s','
sudo nmap -sS "192.168.1.0/24" --open -oG ./nmap_scan
:開いているポートでのみSynスキャンを実行し、nmap_scanという名前のgrepableファイルに出力します。sudo chown youruser: ./nmap_scan
:sudoを実行した後、ファイルの所有権をユーザーに戻します。これはオプションです。次のコマンドをすべてルートまたはsudoとして実行する必要があります。grep -v '^Nmap\|^Status:'
Status:
:またはで始まるすべての行を削除しますNmap
。これはガベージ削減であり、出力には必要ありません。sed 's/\t/,/g'
:すべてのタブをコンマに変更します。これはデフォルトで出力を解析しやすいcsv形式に変換します。awk '{gsub("Ignored State: .*", "");print}'
:「無視された状態:」の後のすべてのエントリの正規表現である「無視された状態:.*」を削除します。各,
セクション間。column -t -s','
:オプション:読みやすいように出力を列形式で表示します。