Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
33
Help us understand the problem. What is going on with this article?
@noc06140728

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

More than 5 years have passed since last update.

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

想定するシーンは?

例えば、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
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
33
Help us understand the problem. What is going on with this article?