コマンド出力抽出のための最高のツール

コマンド出力抽出のための最高のツール

nmap出力結果をプログラムで処理したいのですが、出力を取得し、以下の2つの出力に示されているプロトコルまたはポートテーブルの詳細のみを抽出する方法はわかりません。

私はawkを使ってテーブルデータを処理できると確信しています。しかし、出力からこのデータを抽出することはできません。これにはどのツールの組み合わせを使用できますか?

$ sudo nmap --open -sO 10.100.0.14
Starting Nmap 7.70 ( https://nmap.org ) at 2021-12-27 19:15 AEDT
Warning: 10.100.0.14 giving up on port because retransmission cap hit (10).
Nmap scan report for teichos.mydomain.net (10.100.0.14)
Host is up (0.00030s latency).
Not shown: 250 filtered protocols, 1 closed protocol
PROTOCOL STATE         SERVICE
1        open          icmp
33       open|filtered dccp
80       open|filtered iso-ip
117      open|filtered iatp
136      open|filtered udplite
MAC Address: 6A:3A:ED:33:9E:00 (Unknown)

出力2:

$ sudo nmap -sS 10.100.0.14 -p-
Starting Nmap 7.70 ( https://nmap.org ) at 2021-12-27 19:30 AEDT
Nmap scan report for teichos.mydomain.net (10.100.0.14)
Host is up (0.00024s latency).
Not shown: 65533 filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
9090/tcp open  zeus-admin
MAC Address: 6A:3A:ED:33:9E:00 (Unknown)

私が探している出力は次のとおりです(タイトルは必要ありません)。

PROTOCOL STATE         SERVICE
1        open          icmp
33       open|filtered dccp
80       open|filtered iso-ip
117      open|filtered iatp
136      open|filtered udplite

そして

PORT     STATE SERVICE
22/tcp   open  ssh
9090/tcp open  zeus-admin

ベストアンサー1

オプションが提供されたら、nmapユーティリティを使用して簡単に解析可能なXMLを出力できます-oX。つまり、必要に応じてテーブルを再作成したり、テーブルから目的の情報を抽出したりできます。

次のパイプラインは、xmlstarlet生成されたXML文書から情報を抽出し、通常の出力で見つかったテーブルを再生成し、指定されたnmap「状態」の「理由」を含む追加の列を挿入するために使用されます。

の出力はnmap解析され、列区切り記号として文字(出力の一部になりたくないすべての文字)をxmlstarlet挿入し、最終的なソートテーブルを生成するために使用されます。#column

sudo nmap -oX - --open -sO localhost |
xmlstarlet sel -t -m /nmaprun/host/ports/port \
    -v @portid -o '#' \
    -v state/@state -o '#' \
    -v state/@reason -o '#' \
    -v service/@name -nl |
column -s '#' -t

出力例:

1    open           echo-reply      icmp
4    open|filtered  no-response     ipv4
6    open           proto-response  tcp
17   open           port-unreach    udp
41   open|filtered  no-response     ipv6
50   open|filtered  no-response     esp
51   open|filtered  no-response     ah
97   open|filtered  no-response     etherip
112  open|filtered  no-response     vrrp
137  open|filtered  no-response     mpls-in-ip
240  open|filtered  no-response
255  open|filtered  no-response

今回も「フィルタリングされた」応答だけを抽出します。

sudo nmap -oX - --open -sO localhost |
xmlstarlet sel -t -m '/nmaprun/host/ports/port[contains(state/@state,"filtered")]'  \
    -v @portid -o '#' \
    -v state/@state -o '#' \
    -v state/@reason -o '#' \
    -v service/@name -nl |
column -s '#' -t

出力例:

4    open|filtered  no-response  ipv4
41   open|filtered  no-response  ipv6
50   open|filtered  no-response  esp
51   open|filtered  no-response  ah
97   open|filtered  no-response  etherip
112  open|filtered  no-response  vrrp
137  open|filtered  no-response  mpls-in-ip
240  open|filtered  no-response
255  open|filtered  no-response

おすすめ記事