web-dev-qa-db-ja.com

Wiresharkは、ローカルホストからネットワーク経由でローカルホストに送信されたパケットを取得しません

Windowsで実行していて、Wiresharkにネットワークトラフィックを取得させようとしています。ローカルシステムで実行しているクライアント/サーバーを除いて、すべてのアウトバウンドトラフィックとインバウンドトラフィックを正常に取得します。現状では、LAN IPを介してパケットを送信している場合でも、トラフィックを取得していません。 Windowsがネットワークを通過しないようにルーティングしている可能性が高いので、何か賢い/愚かなことはありますか?パケットを意図したパスに沿って蛇行させるためにできることはありますか(つまり、ルーターに出て戻って、Wiresharkがそれを認識できるようにします)。

私が欲しいのは、192.168.x.xに送信されているパケットが127.0.01に「リダイレクト」されないようにすることです。これはWiresharkがスニッフィングできません。 Windowsが同じマシンに接続していることを検出していて、ネットワークをスキップすることで「賢い」と思っているのではないかと思います。そうすることをやめる必要があります。

2
Rushyo

これがWindowsネットワークの仕組みです。ループバックアダプターはなく、同じ送信元アドレスと宛先アドレスを持つトラフィックがドライバースタックを下ることはないため、Winpcapドライバーに到達することはありません。

Wireshark wikiにはいくつかの これについての詳細はここにあります 役立つかもしれないMicrosoftループバックアダプターのいくつかの回避策を含みます。

5
Helvick

hairpin NAT 」という手法を試して、外部ルーター/ PCを介してパケットを送受信することができます。これにより、WindowsはNICを介して実際にデータを送受信します。

方法は次のとおりです。2つのネットワークインターフェースを備えたルーターを設定します。1つはネットワーク上のインターフェース(例:192.168.66.0/24)で、もう1つは「偽の」ネットワーク上のインターフェース(例:10.10.66.0/24)です。あなたのテスト。 (PCのアドレスは192.168.66.100であり、ルーターのNICのアドレスはそれぞれ192.168.66.254と10.10.66.254であると想定しています。)ルーターでは、2つのNATルール(記述)を設定します。 iptables-save フォーマット):

-t nat -A PREROUTING -p tcp -d 10.10.66.254 --dport 80 -j DNAT --to-destination 192.168.66.100
-t nat -A POSTROUTING -p tcp -s 192.168.66.0/24 -d 192.168.66.100 --dport 80 -j SNAT --to-source 192.168.66.254

最初のルールは、10.10.66.254:80に向かうすべてのトラフィックを192.168.66.100に送信する標準の「ポート転送」ルールです。 2番目のルールは「ヘアピンNAT」の鍵です。これにより、192.168.66.0/24ネットワークからの、192.168.66.100:80宛てのすべてのトラフィックが、ルーターのローカルインターフェイス(192.168.66.254)から送信されたように見えます。 2番目のルールは、クライアントとサーバー(同じネットワーク上にある192.168.66.0/24)が相互に直接配信を試みるのではなく、外部ルーターを介してパケットをルーティングするように強制するために必要です。

この設定により、Wiresharkを使用してWindowsNIC上のクライアント/サーバートラフィックをキャプチャできるようになりました。クライアントは「偽の」アドレス10.10.66.254:80に接続することで開始し、サーバーは192.168.66.254からの対応するトラフィックを確認する必要があります。

1
Steven Monday

ボックスに2番目のNICがある場合は、アプリケーションがより高い重みのメトリックをリッスンするように重みのあるメトリックを設定できます。マシンは、より低い重みのインターフェイスでアプリケーションを探しに出かける必要があります。あなたはそのトラフィックをキャッチします。

これが機能することを確認していませんが、試してみることをお勧めします(マシンに2つのNICがある場合)

0
Nick Zepp