Windows

Wireshark 不會接收通過網路從 localhost 發送到 localhost 的數據包

  • November 18, 2010

我在 Windows 上執行並試圖讓 Wireshark 接收我的網路流量。它可以很好地接收所有出站和入站流量,除了我在本地系統上執行的客戶端/伺服器。事實上,即使我通過我的 LAN IP 發送數據包,它仍然沒有接收流量。關於 Windows 的一些聰明/愚蠢的事情可能會路由它,因此它不會通過網路傳播嗎?我能做些什麼來強制數據包沿著預期的路徑蜿蜒而行(即,出去到我的路由器然後再回來,以便 Wireshark 可以看到它)?

我想要的是確保發送到 192.168.xx 的數據包不會被“重定向”到 127.0.01 - Wireshark 無法嗅探。我懷疑 Windows 正在檢測我正在連接到同一台機器,並且通過跳過網路變得“聰明”——我需要阻止它這樣做。

這就是 Windows 網路的工作方式 - 沒有環回適配器,具有相同源地址和目標地址的流量永遠不會下降驅動程序堆棧,因此它永遠不會到達 Winpcap 驅動程序。

Wireshark wiki在此處提供了更多關於此的資訊,包括一些可能有幫助的 Microsoft Loopback 適配器的變通方法。

您可以嘗試一種稱為“髮夾 NAT ”的技術,通過外部路由器/PC 來迴路由您的數據包。這將強制 Windows 通過 NIC 實際發送和接收數據。

方法如下:您設置具有兩個網路介面的路由器:網路上的一個介面(例如:192.168.66.0/24)和“假”網路(例如:10.10.66.0/24)上的一個介面,該介面僅用於你的測試。(我假設您的 PC 的地址是 192.168.66.100,並且路由器的 NIC 的地址分別為 192.168.66.254 和 10.10.66.254。)在路由器上,您設置了兩個 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。第二條規則是“髮夾式 NAT”的關鍵。它使來自 192.168.66.0/24 網路並前往 192.168.66.100:80 的所有流量看起來都來自路由器的本地介面 (192.168.66.254)。第二條規則是強制客戶端和伺服器(位於同一網路,192.168.66.0/24)通過外部路由器路由它們的數據包而不是嘗試直接傳遞給彼此所必需的。

通過此設置,您現在可以使用 Wireshark 擷取 Windows NIC 上的客戶端/伺服器流量。客戶端通過連接到“假”地址 10.10.66.254:80 來啟動,伺服器應該會看到來自 192.168.66.254 的相應流量。

引用自:https://serverfault.com/questions/203596