我在 Windows 上运行,并尝试让 Wireshark 接收我的网络流量。它能正常接收所有出站和入站流量,除了我在本地系统上运行的客户端/服务器。事实上,即使我通过 LAN IP 发送数据包,它仍然无法接收流量。Windows 是否有一些聪明/愚蠢的方法可以路由它,使其不通过网络?我可以做些什么来强制数据包沿着预定的路径蜿蜒而行(即,传出到我的路由器并返回,以便 Wireshark 可以看到它)?
我想要的是确保发送到 192.168.xx 的数据包不会被“重定向”到 127.0.01 - Wireshark 无法嗅探到。我怀疑 Windows 检测到我正在连接到同一台机器,并且很“聪明”地跳过了网络 - 我需要阻止它这样做。
答案1
这就是 Windows 网络的工作方式 - 没有环回适配器,并且具有相同源和目标地址的流量永远不会下降到驱动程序堆栈,因此它永远不会到达 Winpcap 驱动程序。
Wireshark wiki 上有一些更多信息请点击此处包括一些可能有帮助的 Microsoft Loopback 适配器的解决方法。
答案2
你可以尝试一种叫做“发夹型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 的相应流量。
答案3
如果您的盒子中有第二个 NIC,您可以设置加权指标,让您的应用程序监听较高权重的指标。机器应该会去寻找较低权重接口上的应用程序,这可能会让您捕获该流量。
我还没有验证这是否可行,但这是一个值得尝试的想法(如果你的机器上有两个 NICS)