至少在我 Windows 7 下是这样的,用 pcap_sendpacket() 时别开系统的 IP forwarding 功能。
否则的话.. 包不会直接被送出去,而是会被系统路由一次再发。发生这种情况时,发送一个包,在本机会抓到两个包:前者没问题;后者 TTL 减一,源 MAC 和 目的 MAC 可能会被修改。但只有后一个包会被送出本机。
IP forwarding 默认是关闭的,修改注册表项HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\IPEnableRouter
开启或关闭。启用后系统就成了个路由器,会根据路由表转发目标IP不是自己的包。我也忘了当时为什么开启来了。
不知道这是个例还是 WinPcap 的 bug ,别告诉我这是个 feature 就行…
写C++…………不累么。
不会 C++ 只好用 winpcapy 我会到处乱说吗(
所以 IP Forwarding 到底要不要打开呢……