nmap
出力をテーブルまたは少なくとも1つの列として取得しようとしています。私は次のコマンドを使用しています:
$ sudo nmap -sn 192.168.103.0/24 \
| awk '/Nmap scan report for/{printf $5;}/MAC Address:/{print ","substr($0, index($0,$3)) }' \
| sort -t . -k 4,4n
しかし、私はそれを私に見せたいと思います:
ip mac address hostname
()
IPまたはホスト名がないと、これはできません。
答え1
技術があれば、xmlstarlet
XML出力を解析し、nmap
必要なほとんどすべてのテーブルを生成できます。
nmap -sn -oX - 192.168.1.0/24 |
xmlstarlet sel -t \
-m '/nmaprun/host[status/@state="up"]' \
-v 'address[@addrtype="ipv4"]/@addr' -o $'\t' \
-v 'address[@addrtype="mac"]/@addr' -o $'\t' \
-v 'hostnames/hostname[1]/@name' -n
サンプルXML出力は次のとおりです。
<nmaprun scanner="nmap" args="nmap -sn -oX - 192.168.1.0/24" start="1589146436" startstr="Sun May 10 21:33:56 2020" version="7.70" xmloutputversion="1.04">
<verbose level="0"/>
<debugging level="0"/>
<host>
<status state="up" reason="arp-response" reason_ttl="0"/>
<address addr="192.168.130.6" addrtype="ipv4"/>
<address addr="01:55:1E:C3:68:A3" addrtype="mac" vendor="SomeManufacturer"/>
<hostnames>
<hostname name="host6.roaima.co.uk" type="PTR"/>
</hostnames>
<times srtt="119229" rttvar="119229" to="596145"/>
</host>
<host>...</host>
<host>...</host>
<runstats>
<finished time="1589146444" timestr="Sun May 10 21:34:04 2020" elapsed="8.09" summary="Nmap done at Sun May 10 21:34:04 2020; 256 IP addresses (4 hosts up) scanned in 8.09 seconds" exit="success"/>
<hosts up="4" down="252" total="256"/>
</runstats>
</nmaprun>
nmap
ping要求に応答する4つのデバイスのみを示すサンプル処理出力
192.168.1.6 01:55:1E:C3:68:A3 host6.roaima.co.uk
192.168.1.8 92:66:9B:20:F1:17
192.168.1.15 53:77:5E:EA:FD:03 client15.roaima.co.uk
192.168.1.31 C4:88:FB:6C:64:AE
このxmlstarlet
ツールはXPathを使用してXML要素と属性を選択して一致させるか(-m
)値を抽出します(-v
)。
答え2
本当に使用したい場合は、awk
このスクリプトが役に立ちます。
nmap -sn 192.168.1.0/24 |
awk '
function out() { if (state=="up") { printf "%s\t%s\t%s\n",ip,mac,name; ip=""; mac=""; name=""; state="" } }
/Nmap scan report/ { out(); name=$5; ip = substr($6,2,length($6)-2); if (ip=="") { ip=name; name="" } }
/Host is/ { state=$3 }
/MAC Address/ { mac=$3 }
END { out() }
'
必要に応じて連続して転がします。
nmap
ping要求に応答する4つのデバイスのみを示すサンプル出力
192.168.1.6 01:55:1E:C3:68:A3 host6.roaima.co.uk
192.168.1.8 92:66:9B:20:F1:17
192.168.1.15 53:77:5E:EA:FD:03 client15.roaima.co.uk
192.168.1.31 C4:88:FB:6C:64:AE