非スイッチングネットワークでは、ネットワーク機器の設定をプロミスキャスモードにすることで、
パケットの宛先に関係なく、すべてのパケットを読むことが出来ます。
以下、ubuntuでの試行
ホストのipアドレスを、192.168.11.7とします。
監視したい機器のipアドレスを192.168.11.5とします。
ターミナルで
$ ifconfig eth0
eth0 Link encap:イーサネット ハードウェアアドレス 44:87:fc:91:7c:c4
inetアドレス:192.168.11.7 ブロードキャスト:192.168.11.255 マスク:255.255.255.0
inet6アドレス: fe80::4687:fcff:fe91:7cc4/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:47030 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:43639 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:5675517 (5.6 MB) TXバイト:41999220 (41.9 MB)
割り込み:41
この時点で、プロミスキャストは有効になっていません。
$ sudo ifconfig eth0 promisc
とした後、ネットワークカードの状態を確認すると
$ ifconfig eth0
eth0 Link encap:イーサネット ハードウェアアドレス 44:87:fc:91:7c:c4
inetアドレス:192.168.11.7 ブロードキャスト:192.168.11.255 マスク:255.255.255.0
inet6アドレス: fe80::4687:fcff:fe91:7cc4/64 範囲:リンク
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 メトリック:1
RXパケット:47220 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:43723 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:5700336 (5.7 MB) TXバイト:42011026 (42.0 MB)
割り込み:41
となっており、プロミスキャストモードになっていることが確認出来ます。
ついで、
パケットを監視したいホストのアドレスを指定してtcpdumpを起動します。
$ sudo tcpdump -i eth0 -X 'ip host 192.168.11.5'
これで、192.168.11.5(自分以外の)のipアドレスを持つ機器に送られるパケットを監視出来ます。