ネットワークをスキャンしたい。そして、次のような出力を返します。
192.168.0のネットワークスキャン*
192.168.0.1コンピューター1
192.168.0.2コンピューター2
192.168.0.3コンピューター5
echo Network Scan
nmap -sP -n <network> | awk '{print $5}NF == 6{print $6}'
IPとホスト名だけを含める必要があるコードを変更するにはどうすればよいですか?
Nmapの通常の出力は、バージョンごとに異なり、一貫した区切り文字やフィールド幅を使用しないため、解析には適していません。より良いアプローチは、 [〜#〜] xml [〜#〜] または Grepable 出力を使用することです。必要なものに対して最も速くて簡単なのは、-oG
でGrepable出力を選択し、出力をSTDOUTに送信してawk
で処理することです。
nmap -sn 192.168.0.0/24 -oG - | awk '$4=="Status:" && $5=="Up" {print $2, $3}'
このコマンドは、古い(ただしまだサポートされている)-sn
の代わりに新しい(Nmap 5.10BETA1、2009年11月))-sP
オプションを使用して「また、ホスト名に関心があるため、-n
オプションを削除しました。名前の逆解決を行わないと、必要な出力を取得できません。
名前解決の仕組み(および複数のソースNmapは名前情報に使用できます))のため、特定のIPアドレスに複数のホスト名が存在する可能性があります。Grepable出力は使用できないため非推奨です。 Nmapが生成するすべての情報(複数のホスト名、NSEスクリプト出力、traceroute情報など)を伝達します。より完全なソリューションが必要な場合は、XML出力を使用する必要があります。例を次に示します。 xmlstarlet
を使用してXML出力を解析します。
nmap -sn 192.168.0.0/24 -oX - | xmlstarlet sel -t -m "//Host/status[@state='up']/.." -v "address[@addrtype='ipv4']/@addr" -o " " -v "hostnames/hostname/@name" -n
または、各ホスト名(複数のホスト名を持つIPアドレスを含む)の行を印刷するには:
xmlstarlet sel -t -m "//Host/status[@state='up']/../hostnames/hostname" -v "../../address[@addrtype='ipv4']/@addr" -o " " -v "@name" -n