らくがきちょう

なんとなく

WinPcap / Win10Pcap で VLAN フレームをキャプチャしてみる

Win10PcapWinPcap をベースに開発された Windows 用のパケットキャプチャライブラリ(NPF ドライバ)です。公式ページに詳しいですが、従来の WinPcap が NDIS 5.x 系ベースだったのに対して Win10Pcap は NDIS 6.x ベースに変更されつつ、幾つかの機能改善も図られているそうです。改善箇所のひとつに「IEEE 802.1Q タグ(いわゆる、VLAN タグ)をキャプチャ出来るようになった」とありますが、逆に「従来の WinPcap では IEEE 802.1Q タグをキャプチャ出来なかったのか?」という疑問が湧きましたので検証してみました。更に、おまけで OS X でも試してみました。

ルータ側の設定

今回は「ルータと PC を直結する」という単純な構成で、ルータから送信する IEEE 802.1Q タグ付きフレームを PC 側でキャプチャすると IEEE 802.1Q タグは見えるか?という検証を行いました。ルータには Cisco 社の「Cisco 1812J」を利用しました。検証と関連する設定は以下の通りです。テスト用に dot1Q(IEEE 802.1Q)でカプセル化するサブインターフェイスを作成しているだけの、シンプルな設定です。VLAN ID は「10」としました。

interface FastEthernet0
 mac-address 0011.1111.1111
 no ip address
 duplex auto
 speed auto
 no shutdown
!
interface FastEthernet0.10
 encapsulation dot1Q 10
 ip address 10.10.10.111 255.255.255.0
end

後でルーテッドポートでは無く、スイッチポートを Trunk 設定にして同じ検証をしてみましたが、後述と同じ結果になりました。

WinPcap 4.13 の場合

以下の構成でテストしました。

ThinkPadNICIntel 82579LM ですが、Lenovo の標準構成(の、ドライバ)では VLAN 機能が利用出来なかった為、Intel のサイトから最新のドライバ をダウンロード&インストールし、PC 上に VLAN インターフェスを作成しました。また、後でキャプチャしたパケットを確認する際に分かりやすくなるよう、予め PC の MAC アドレスを「0022:2222:2222」に変更してあります(後で WireEdit 等を使ってパケットを加工しても良かったのですが、面倒なので…)

f:id:sig9:20150701181922p:plain

ルータ側から PC へ Ping を実行した際に PC 上でパケットキャプチャした結果が以下です(OS X 上で表示していますが、キャプチャしたのは上記の Windows 7 です)。Type が 0x0800、すなわち IP になっており、IEEE 802.1Q フレームとしては認識されていません。

f:id:sig9:20150701182130p:plain

Win10Pcap の場合

先程と全く同じハードウェア・同じネットワーク構成ですが、PC 上から WinPcap 4.13 をアンインストールし、Win10Pcap 10.1.5001 をインストールしました。

f:id:sig9:20150701181928p:plain

すると、受信したパケットの Type が 0x8100、すなわち IEEE 802.1Q フレームとして認識され、タグが見えるようになりました!(送信パケットにも IEEE 802.1Q タグが付与されているはずですが、これは表示されませんでした)。受信パケットは IEEE 802.1Q タグの 4 バイト分、パケット長が長く見える為、以下では「118 bytes」と表示されています。対して、送信パケットは先程と同様、「114 bytes」に見えました。

f:id:sig9:20150701182141p:plain

OS X に VLAN を設定した場合

次は Windows PC では無く、OS X に置き換えてみました。

f:id:sig9:20150701181940p:plain

予想では「IEEE 802.1Q タグが見えるのでは…?」と思って検証してみたのですが、「見えない」という結果に終わりました。

f:id:sig9:20150701184948p:plain

OS X に VLAN を設定しなかった場合

先程と全く同じハードウェア・同じネットワーク構成なのですが、OS X から VLAN インターフェイスを削除して試してみました。

f:id:sig9:20150701181949p:plain

VLAN を削除しましたので、ルータから ICMP Request を送信はするものの、OS X が ICMP Reply を返しません。しかし、通信は出来ていないにも関わらず、IEEE 802.1Q タグは見えました!

f:id:sig9:20150701185000p:plain