出力形式とスキャン結果の分析
Nmap は複数の出力形式を提供しており、様々な目的に非常に役立ちます。たとえば、スキャン結果を記録するためのドキュメント作成、さらなる詳細分析、または他のセキュリティツールとの統合に使用できます。このステップでは、これらの出力形式を詳しく見て、スキャン結果を効果的に分析する方法を学びます。
Nmap は以下の主な出力形式をサポートしています。
- 通常出力(デフォルト): これは人間が読みやすいテキスト形式です。スキャン結果をレポートのように一目で理解しやすい形で表示します。
- XML 出力 (
-oX
): XML は構造化された形式です。データを階層的かつ整理された方法で配置するため、プログラムが解析および処理するのに非常に便利です。
- Greppable 出力 (
-oG
): この形式は、grep
や他のテキスト処理ユーティリティを使用して簡単に解析できるように設計されています。関連情報を抽出するのが簡単な特定の構造を持っています。
- 全形式 (
-oA
): このオプションを使用すると、Nmap はスキャン結果を通常、XML、および Greppable 形式で同時に保存します。異なるニーズに対応するためにすべてのタイプの出力を持ちたい場合に便利です。
これらの形式を順番に試してみましょう。
まず、通常形式でスキャン結果を保存します。次のコマンドは、localhost
のポート 8888 をスキャンし、結果をテキストファイルに保存します。
nmap -p 8888 localhost -oN /home/labex/project/normal_output.txt
次に、XML 形式でスキャン結果を保存します。このコマンドは、localhost
のポート 8888 で同じスキャンを実行し、結果を XML ファイルに保存します。
nmap -p 8888 localhost -oX /home/labex/project/xml_output.xml
次に、Greppable 形式でスキャン結果を保存します。以下のコマンドは、localhost
のポート 8888 をスキャンし、結果を grep
で簡単に解析できるファイルに保存します。
nmap -p 8888 localhost -oG /home/labex/project/grep_output.txt
最後に、全形式でスキャン結果を保存します。次のコマンドは、localhost
のポート 8888 で同じスキャンを行い、3 つの異なる形式のファイルを作成します。
nmap -p 8888 localhost -oA /home/labex/project/all_formats
これにより、all_formats.nmap
、all_formats.xml
、および all_formats.gnmap
の 3 つのファイルが作成されます。
では、これらのファイルをそれぞれ調べて、形式の違いを理解しましょう。
通常出力を表示するには、cat
コマンドを使用します。
cat /home/labex/project/normal_output.txt
人間が読みやすい標準的な Nmap 出力が表示されるはずです。以下はその例です。
## Nmap 7.80 scan initiated Mon Oct 30 16:45:00 2023 as: nmap -p 8888 -oN /home/labex/project/normal_output.txt localhost
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
PORT STATE SERVICE
8888/tcp open sun-answerbook
## Nmap done at Mon Oct 30 16:45:00 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds
XML 出力を表示するにも、cat
コマンドを使用します。
cat /home/labex/project/xml_output.xml
この形式は、プログラムが解析しやすいように構造化されています。以下は XML 出力の例です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nmaprun>
<nmaprun scanner="nmap" args="nmap -p 8888 -oX /home/labex/project/xml_output.xml localhost" start="1698684307" startstr="Mon Oct 30 16:45:07 2023" version="7.80" xmloutputversion="1.04">
<scaninfo type="connect" protocol="tcp" numservices="1" services="8888"/>
<verbose level="0"/>
<debugging level="0"/>
<host starttime="1698684307" endtime="1698684307"><status state="up" reason="conn-refused" reason_ttl="0"/>
<address addr="127.0.0.1" addrtype="ipv4"/>
<hostnames>
<hostname name="localhost" type="user"/>
<hostname name="localhost" type="PTR"/>
</hostnames>
<ports><port protocol="tcp" portid="8888"><state state="open" reason="syn-ack" reason_ttl="0"/><service name="sun-answerbook" method="table" conf="3"/></port>
</ports>
<times srtt="100" rttvar="5000" to="100000"/>
</host>
<runstats><finished time="1698684307" timestr="Mon Oct 30 16:45:07 2023" elapsed="0.04" summary="Nmap done at Mon Oct 30 16:45:07 2023; 1 IP address (1 host up) scanned in 0.04 seconds" exit="success"/><hosts up="1" down="0" total="1"/>
</runstats>
</nmaprun>
Greppable 出力を表示するには、再び cat
コマンドを使用します。
cat /home/labex/project/grep_output.txt
この形式は、grep
のようなツールで簡単に解析できるように設計されています。以下は Greppable 出力の例です。
## Nmap 7.80 scan initiated Mon Oct 30 16:45:15 2023 as: nmap -p 8888 -oG /home/labex/project/grep_output.txt localhost
Host: 127.0.0.1 (localhost) Status: Up
Host: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///
## Nmap done at Mon Oct 30 16:45:15 2023 -- 1 IP address (1 host up) scanned in 0.04 seconds
Greppable 出力から特定の情報を抽出するために grep
を使用する練習をしましょう。次のコマンドは、開いているポートが記載されたすべての行を表示します。
grep "open" /home/labex/project/grep_output.txt
出力は次のようになるはずです。
Host: 127.0.0.1 (localhost) Ports: 8888/open/tcp//sun-answerbook///
より複雑なフィルタも使用できます。次のコマンドは、開いているポートのポート番号のみを抽出します。
grep -E "Ports:.*open" /home/labex/project/grep_output.txt | cut -d':' -f3 | cut -d'/' -f1
出力は次のようになります。
8888
これらの異なる出力形式により、Nmap のスキャン結果を他のツールやワークフローと統合できるため、セキュリティツールキットに非常に便利な追加要素となります。