それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WinDumpでTCPDumpをWindowsでも行う事ができる。

WinDumpというコンパイル向けパッケージを使うと簡単に扱えることが分った。

WinDumpはTCPDumpと同じだが若干使い方が異なるので注意

LinuxなどUNIXTCPDumpとの違い

ネットワークデバイスの管理方法が違うので,NICの指定方法が異なる。

導入

  1. WinPcap を入れる
  2. WinDumpをダウンロード
  3. WinDumpをコマンドから実行

wincap のインストール

wget http://www.winpcap.org/install/bin/WinPcap_4_1_2.exe

WinDumpの実行

C:/Users/takuya>windump.exe -D

起動し、デバイス一覧が表示されたらインストール成功していると思う

windump でデバイスを指定する。

まずデバイス一覧を確認し・・・
takuya@letsnote:~$ windump  -D
1.\Device\NPF_{1C0XX538-XXXX-405B-BFXX-DXXXX55FXXX} (Marvell Yukon Ethernet Controller.)
2.\Device\NPF_{FXX93042-0AXX-42XB-AXCC-16XXXXFXXXX} (Microsoft)

上記の場合, 1=Marvel Yukon Ethernet 2=Microsoft(Wifi)になっていました。

デバイス2番(Wifi)のHTTPパケットを覗く

-i デバイス番号

HTTPパケットを覗くには次のようにする

takuya@letsnote:~$ windump  -i 2 -n -X -s 5120 port http

デバイスさえ分れば,あとはTCPDumpと同じように使えます→TCPDumpのオプション

Windowsの場合は ネットワークカードを -D で調べてから指定します。ここ試験に出るよ!

HTTPのパケットを覗く例

C:\Users\takuya>windump -i 2 -n -X -s 5120 port http
       0x01b0:  a8ce fcfd fe4a a9ce 49a8 cd74 bdd9 8ac8  .....J..I..t....
       0x01c0:  dfd5 e9f3 e5f0 f786 bfdb e2f0 f7e6 f1f7  ................
       0x01d0:  ecf5 fae9 f5f9 93cc e249 a9ce cae0 ee81  .........I......
       0x01e0:  bdd9 c2e2 efed f5fa cfe6 f19e d1e5 8bc0  ................
       0x01f0:  dce4 f0f7 52ad d0c9 e5f0 71b5 d5fe ffff  ....R.....q.....
       0x0200:  e3f2 f7e5 f3f8 dcef f677 b9d7 f2f8 fc96  .........w......
       0x0210:  c6df 51ab cfd0 e6f1 f9fc fd6f b5d5 6ab8  ..Q........o..j.
       0x0220:  d6f9 fcfe 91cb e1b3 dbea b3d4 e7cb e6f1  ................
       0x0230:  e7f3 f8d6 ecf4 daee f5bc dbeb a8d6 e7be  ................
       0x0240:  e0ed 81c4 ddd2 e7f1 98c7 df8b c8df 79c0  ..............y.
       0x0250:  dbe7 f4f9 5db2 d347 a8cd ffff ffff ffff  ....]..G........
       0x0260:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x0270:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x0280:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x0290:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x02a0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x02b0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x02c0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x02d0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x02e0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x02f0:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x0300:  0000 0000 0000 0000 0000 0000 0000 0000  ................
       0x0310:  0000 0000 0000 0021 f904 0100 0042 002c  .......!.....B.,
       0x0320:  0000 0000 0b00 0e00 0007 7980 4206 3004  ..........y.B.0.
       0x0330:  023f 0d05 428a 2b0c 408e 8e00 198a 1540  .?..B.+.@......@
       0x0340:  2117 091a 0740 0023 4202 081e 41a2 419a  !....@.#B...A.A.

このように、簡単にWindowsでもTCPDumpを扱えることが分った。やってみなくちゃ分らない。

エントリの例はWindumpじゃなくてUnixじゃないの?

いいえCygwinです。CygwinでWindowsのコマンドをUNIXっぽく見せているだけです。

windump のCygwin用ラッパー

#!/usr/bin/env ruby
require "kconv"
require "stringio"
#$stderr = StringIO.new
IO.foreach("|/usr/local/bin/WinDump.exe  #{$*.join(' ')}"){|line|puts line.kconv(Kconv::UTF8,Kconv::SJIS)}

便利なWinDumpテンプレ

IPv6をみたい
windump -i 2  -n ip6
パケットの中身をASCII表示
windump -i 2 -X -s 512
-X
でパケット中身表示
-s
で中身で表示制限(指定数値より大きいと切り捨て)
HTTPをみたい
windump -i 2 -X -s 512 in and port 80 

条件を絞り込むときは and を使います