wiresharkを使わずWindows標準ツール pktmon でキャプチャし、pcap形式にする
Windows10 や Windows Server 2019 には pktmon というネットワークスニファ (パケットキャプチャ) ツールが標準インストールされています。
『Windows Server の切り分けのためにパケットキャプチャを取りたいけど Wireshark をインストールするのはちょっと怖い...』『本番端末だから Wireshark をインストールしたくない』『ポータブルさえだるい』なーんてこと、よくありますよね?!
そんなときは pktmon を使いましょう。
pktmon は .etl という独自形式で出力されますが、wireshark の .pcapng への変換も可能になっています。
pktmon の最短の使い方
pktmon を使うためには管理者権限が必要です。コマンドプロンプトを管理者権限で起動します。
Windowsキー+Rで「ファイル名を指定して実行」を表示させ、"cmd"と打ち込み、Ctrl+Shift+Enter ボタンを押下します。
UAC の画面が表示されるので、「はい」をクリックします。
以下を実行すればまずはすぐパケットキャプチャができます。
c:\> pktmon start --etw
ログ ファイル名: c:\PktMon.etl
ログ モード: 循環
最大ファイル サイズ: 512 MB
アクティブな測定を開始しました。
上記によりカレントディレクトリ (上記の例では c:\) の直下にデフォルト名 PktMon.etl が生成されます。
パケットキャプチャが開始されましたので、観測したい通信を発生させます。(トラブルシュートなら事象を再現など)
観測が終わったら以下のように stop でキャプチャを止めます。
c:\> pktmon stop
アクティブな測定を停止しました。
ログをフラッシュしています...
ログ ファイル: c:\PktMon.etl (イベントは失われていません)
pcapng 形式に変換します。※ただし、サーバ OS や古いクライアント OS では対応していないようですので、必要に応じて新しい Windows 10 (version 20h2) までファイルを持ち込んでお試し下さい。
c:\> pktmon pcapng PktMon.etl
処理しています...
パケットの合計: 302
パケットのドロップ カウント: 0
書式設定されたパケット: 302
書式設定されたファイル: PktMon.pcapng
以上が最短でキャプチャを行い、pcapng に変換する方法です。ただし、デフォルトだと以下の状態になります。
- 全てのインタフェース (論理インタフェース含む) での情報が入るため、非常に見づらい
- 全ての通信が含まれるため非常に見づらい
- ファイル名がデフォルトの PktMon.etl になる
- PktMon.etl は 512MB 以上に保存しないため、過去のキャプチャ情報が消える (循環する)
上記の問題を解消するためには以下のオプション指定が必要です。
インタフェースの指定
上述の通り、デフォルトでは全てのインタフェースのパケットが取得されます。サーバ内の通信も見れたりするので便利なときはありますが、非常に見づらくなります。
特定のインタフェースのみを取得したい場合は、まずインタフェースの ID を調べます。
c:\> pktmon comp list ~~~~~~~~ Intel(R) Wi-Fi 6 AX201 160MHz ID: 13 ドライバー: Netwtw08.sys MAC アドレス: XX-XX-XX-XX-XX-XX ifIndex: 18 フィルター ドライバー: ID ドライバー 名前 -- ----- -- 42 wfplwfs.sys WFP Native Filter 41 vwififlt.sys Virtual WiFi Filter Driver 40 nwifi.sys Native WiFi Filter Driver 39 npcap.sys Npcap Packet Driver (NPCAP) 38 VBoxNetLwf.sys VirtualBox NDIS Light-Weight Filter 37 pacer.sys QoS Packet Scheduler 36 wfplwfs.sys WFP 802.3 Filter プロトコル: ID ドライバー 名前 EtherType -- ----- -- --------- 110 tcpip.sys TCPIP6 IPv6 104 tcpip.sys TCPIP ARP, IPv4 82 rspndr.sys RSPNDR VLAN, LLTD 81 ndisuio.sys NDISUIO 88c7, VLAN, 802.1X 80 lltdio.sys LLTDIO * (すべて) アプリケーション プロトコル: ID ドライバー 名前 IP アドレス -- ----- -- ------- 122 http.sys HTTP fe80::b574:4795:265:14b1 115 http.sys HTTP 192.168.0.19
上記のケースでは WiFi の ID が 13 になっていますが、-c 13 ではうまく動作しませんでした。ドライバの ID を指定する必要があるようです。
ipv4 と ipv6 を取得したいときは 104 と 110 を指定します。
c:\> pktmon start --etw -c 104 110
ログ ファイル名: c:\nwwatch.etl
ログ モード: 循環
最大ファイル サイズ: 512 MB
アクティブな測定を開始しました。
フィルターの追加
プロトコル (ICMP, TCP, UDP 等) や IP アドレス、TCP ポート (Src か Dst のどちらかにマッチすれば OK) 等でフィルタリング可能です。
例えばクライアントセグメント [IP=192.168.0.0/24] の https (tcp/udp 443) の通信をキャプチャしたい場合は以下のようにします。
c:\> pktmon filter add MyFilter1 -i 192.168.0.0/24 -t TCP -p 443 フィルターが追加されました。 c:\> pktmon filter add MyFilter2 -i 192.168.0.0/24 -t UDP -p 443 フィルターが追加されました。
確認は以下のように可能です。
c:\> pktmon filter list
# 名前 プロトコル IP アドレス ポート
- -- ----- ------- ---
1 MyFilter1 TCP 192.168.0.0/24 443
2 MyFilter2 UDP 192.168.0.0/24 443
この状態でパケットキャプチャを開始すれば、フィルタが効き、192.168.0.0/24、tcp,udp 443 が含まれる通信のみがキャプチャされます。
ファイル名を付け、循環させず過去のキャプチャを保存したまま残す
-f でファイル名を指定し、-l で multi-file を指定することで、過去のログが ~1.etl ~2.etl と順番に番号付けられます。
c:\> pktmon start --etw -c 104 110 -f c:\nwwatch.etl -l multi-file
ログ ファイル名: c:\nwwatch%d.etl
ログ モード: マルチ
最大ファイル サイズ: 512 MB
アクティブな測定を開始しました。
ファイルサイズを変更する
ファイルサイズはデフォルトで 512 MB 毎に生成されますが、このサイズを変えたいときは -s (MB 単位) を使います。
例えば -s 100 とすれば 100 MB 単位で生成されます。
pktmon の ヘルプの見方
pktmon だけ打つと以下のように表示されます。
c:\> pktmon
pktmon { filter | comp | reset | start | stop } [OPTIONS | help]
内部パケット伝達レポートとパケット ドロップ レポートを監視します。
コマンド
filter パケット フィルターを管理します。
comp 登録されたコンポーネントを管理します。
reset カウンターをゼロにリセットします。
start パケットの監視を開始します。
stop 監視を停止します。
format ログ ファイルをテキストに変換します。
pcapng ログ ファイルを pcapng 形式に変換します。
unload PktMon ドライバーをアンロードします。
help
コマンドのヘルプ テキストを表示します。
次に、例えば pktmon の filter のヘルプを見たいときは、pktmon filter help と打ちます。
c:\> pktmon filter help
pktmon filter { list | add | remove } [OPTIONS | help]
コマンド
list アクティブなパケット フィルターを表示します。
add 報告対象のパケットを制御するフィルターを追加します。
remove すべてのフィルターを削除します。
help
コマンドのヘルプ テキストを表示します。
このように、下の階層のヘルプも見ていくことができます。
ちなみに、ヘルプに限らず表示において more を使うとなぜか文字化けしてしまうのですが、chcp 65001 と打った後であれば文字化けしません。
c:\> chcp 65001 Active code page: 65001 c:\> pktmon comp list | more Microsoft Wi-Fi Direct Virtual Adapter ID: 10 ドライバー: vwifimp.sys MAC アドレス: DC-1B-A1-0A-D9-A4 ifIndex: 3 ID ドライバー 名前 -- ----- -- 35 wfplwfs.sys WFP Native Filter 34 nwifi.sys Native WiFi Filter Driver 24 npcap.sys Npcap Packet Driver (NPCAP) 23 VBoxNetLwf.sys VirtualBox NDIS Light-Weight Filter 22 pacer.sys QoS Packet Scheduler 21 wfplwfs.sys WFP 802.3 Filter プロトコル: ID ドライバー 名前 EtherType -- ----- -- --------- 109 tcpip.sys TCPIP6 IPv6
IT/インフラエンジニアの地位とスキル向上のために


コメント