PowerShellでパケットキャプチャを行う
概要
Windowsでパケットキャプチャを行う場合、Wiresharkを使用することが多いと思います。ただ、企業ポリシーや稼働環境によっては、インストールが制限される場合があると思います。
Powershellには、NetEventPacketCaptureとよばれるコマンドレットが用意されており、これらを用いてパケットキャプチャを行うことが可能です。
本稿では、Powershellにネイティブに用意されているコマンドレットを使用した、パケットキャプチャの方法を紹介します。
ネットワークイベントセッションの作成
最初に、New-NetEventSession コマンドレットでネットワークイベントセッションを作成します。
主なオプションは、以下になります。
オプション | 説明 |
---|---|
Name | セッション名の指定 |
LocalFilePath | パケットキャプチャを保存するファイル名を指定 |
MaxFileSize | パケットキャプチャを保存するファイルサイズを指定(単位:MB) |
1PS C:\> New-NetEventSession -Name "Session01" -LocalFilePath D:\Capture\Session01.etl
2
3Name : Session01
4CaptureMode : SaveToFile
5LocalFilePath : D:\Capture\Session01.etl
6MaxFileSize : 250 MB
7TraceBufferSize : 0 KB
8MaxNumberOfBuffers : 0
9SessionStatus : NotRunning
ネットワークイベントプロバイダーの追加
次に、Add-NetEventPacketCaptureProvider コマンドレットでネットワークイベントプロバイダーをセッションに追加します。
ネットワークイベントプロバイダーは、イベントとネットワークトラフィックをEvent Tracing for Windows (ETW) イベントとしてログに記録します。
主なオプションは、以下になります。
オプション | 説明 |
---|---|
SessionName | セッション名の指定 |
IpAddresses | パケットキャプチャを行うIPアドレスを指定 |
IpProtocols | パケットキャプチャを行うIPプロトコルを指定。TCPは6。UDPは17 |
1PS C:\> Add-NetEventPacketCaptureProvider -SessionName "Session01"
2
3Name : Microsoft-Windows-NDIS-PacketCapture
4SessionName : Session01
5Level : 4
6MatchAnyKeyword : 0xFFFFFFFFFFFFFFFF
7MatchAllKeyword : 0x0
8CaptureType : BothPhysicalAndSwitch
9VmCaptureDirection : IngressAndEgress
10MultiLayer : False
11LinkLayerAddress : {}
12EtherType : {}
13IpAddresses : {}
14IpProtocols : {}
15TruncationLength : 128
ネットワークインターフェースの指定(オプション)
パケットキャプチャを行うネットワークインターフェースを特定したい場合は、Add-NetEventPacketCaptureProvider コマンドレットを実行します。
主なオプションは、以下になります。
オプション | 説明 |
---|---|
Name | ネットワークインターフェースの指定。Get-NetAdapter コマンドレットで確認可能 |
1PS C:\> Add-NetEventNetworkAdapter -Name "Ethernet"
2
3Name : Ethernet
4InterfaceDescription : Intel(R) Ethernet Connection (2) I219-V
5ProviderName : Microsoft-Windows-NDIS-PacketCapture
6CaptureStatus :
パケットキャプチャ開始
準備が整ったので、Start-NetEventSession コマンドレットでパケットキャプチャを開始します。
主なオプションは、以下になります。
オプション | 説明 |
---|---|
Name | セッション名の指定 |
1PS C:\> Start-NetEventSession -Name "Session01"
パケットキャプチャ停止
パケットキャプチャを停止するには、Stop-NetEventSession コマンドレットを実行します。
New-NetEventSession コマンドレットで指定したファイルに、ログが保存されます。
主なオプションは、以下になります。
オプション | 説明 |
---|---|
Name | セッション名の指定 |
1PS C:\> Stop-NetEventSession -Name "Session01"
ネットワークイベントセッションの削除
パケットキャプチャを実行後、Remove-NetEventSession コマンドレットでネットワークイベントセッションを削除します。コマンドレットで削除しないと、セッションは残り続けます(端末を再起動しても残ります)。 また、セッションは複数作成することはできません。
1PS C:\> Remove-NetEventSession
etlからpcapngへの変換
パケットキャプチャのログであるetlファイルは、Network Monitorなどで参照することが可能です。 Wiresharkで参照したい場合は、Network Monitorでpcap形式で保存するか、githubで公開されているコマンドでpcapngに変換することが可能です。
1PS C:\> D:\Capture\etl2pcapng.exe D:\Capture\Session01.etl D:\Capture\Session01.pcapng
2IF: medium=eth ID=0 IfIndex=13 VlanID=0
3Converted 8875 frames