LoginSignup
33
33

More than 5 years have passed since last update.

netsh の port proxy で お手軽パケットキャプチャ

Last updated at Posted at 2014-04-17

任意のホスト間のパケットをネットワーク構成などを変更せず、お手軽にキャプチャする方法の紹介です。
(パケットキャプチャソフトの使い方については、記載していません。)

想定するシーンは?

例えば、HOST-A から HOST-B の 12345番ポートへ接続するような通信のキャプチャを想定してみましょう。

[HOST-A]--------------------------------[HOST-B]
        (この間の通信をキャプチャしたい!!)

通常であれば、なんとかしてキャプチャするパケットを横取りしてやる必要があります。

  • 経路内にリピーターハブを挟んで、パケットを横取りする。
  • ポートミラーリング機能をもつスイッチングハブを使って、パケットを横取りする。
[HOST-A]----------[リピータHUB]----------[HOST-B]
                       | 
                       |(横取り!!)
                    [HOST-C]

HOST-C で HOST-A = HOST-B 間の通信をキャプチャしようとしていますが、
追加の機器や LAN ケーブルを用意したり、配線しなおしたりするのは面倒です。

どうする?

キャプチャしようとするホスト HOST-C に HOST-A = HOST-B 間のパケットを中継させて、ついでにキャプチャもするようにしてしまいましょう。

[HOST-A]-----------[既存のHUB]-----------[HOST-B]
                       | 
                       |
                    [HOST-C]

HOST-C は特別な接続は必要とせず、HOST-A と HOST-B と通信できるネットワーク上のどこかに存在すれば OK です。
なんと、同一のブロードキャストセグメントにいる必要すらありません!(ここがお手軽)

どうやって?

最近の Windows では、標準で port proxy が使えるようになっています。(ここがお手軽)
HOST-C で次の netsh コマンドを実行してみましょう。

> netsh interface portproxy add v4tov4 listenport=12345 connectaddress=HOST-B

これだけで HOST-C は、自身の 12345番ポートへの接続を、HOST-B の 12345番ポートへフォワードしてくれるようになります。
(注意:フォワードさせるには、IP Helper サービスが開始されている必要があります。)

設定が正常に反映されているか確認してみましょう。

> netsh interface portproxy show v4tov4
ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               12345       HOST-B          12345

HOST-C 上で 12345番ポートが LISTEN されていることも確認してみましょう。

> netstat -na | findstr :12345
  TCP    0.0.0.0:12345     0.0.0.0:0         LISTENING

あとは、HOST-A の接続先を HOST-B から HOST-C に変更してやるだけ。
HOST-C 上でキャプチャソフト(WireShark など)を起動させて、どんどんキャプチャしましょう。

お手軽ポイントのまとめ

  1. 追加の機器や LAN ケーブルは必要ありません。
  2. 既存の LAN 環境を変更する必要がありません。
  3. サードパーティ製のポートフォワード用のソフトの準備は不要です。

参考

portproxy 設定を削除するには

> netsh interface portproxy delete v4tov4 listenport=12345 connectaddress=HOST-B

全ての設定を削除するには

> netsh interface portproxy reset

設定を確認するには

> netsh interface portproxy show v4tov4

その他、listenport と connectport を別々に指定することもできたりします。
詳細は、ヘルプで確認できますね。

> netsh interface portproxy add v4tov4 help

使用法: add v4tov4 [listenport=]<integer>|<servicename>
              [connectaddress=]<IPv4 address>|<hostname>
             [[connectport=]<integer>|<servicename>]
             [[listenaddress=]<IPv4 address>|<hostname>]
             [[protocol=]tcp]

パラメーター:

       タグ             値
       listenport     - リッスンする IPv4 ポートです。
       connectaddress - 接続する IPv4 アドレスです。
       connectport    - 接続する IPv4 ポートです。
       listenaddress  - リッスンする IPv4 アドレスです。
       protocol       - 使用するプロトコルです。現在、TCP だけがサポート
                        されています。

注釈: IPv4 をリッスンし、IPv4 経由でプロキシ接続するためにエントリを追加
      します。
33
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
33