我用 WireGuard 和 c++ 的 wintun 创建了一个适配器。一般来说是这样的(我删除了一些不相关的代码)
// ...
int main() {
HMODULE Wintun = InitializeWintun();
GUID ExampleGuid;
WINTUN_ADAPTER_HANDLE Adapter;
WINTUN_SESSION_HANDLE Session;
DWORD Version;
QuitEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
ExampleGuid = { 0xdeadbabe, 0xcafe, 0xbeef, { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef } };
Adapter = WintunCreateAdapter(L"Example", L"Demo", &ExampleGuid, NULL);
MIB_UNICASTIPADDRESS_ROW AddressRow;
InitializeUnicastIpAddressEntry(&AddressRow);
WintunGetAdapterLUID(Adapter, &AddressRow.InterfaceLuid);
AddressRow.Address.Ipv4.sin_family = AF_INET;
AddressRow.Address.Ipv4.sin_addr.S_un.S_addr = htonl((192 << 24) | (168 << 16) | (21 << 8) | (1 << 0));
AddressRow.OnLinkPrefixLength = 24;
Session = WintunStartSession(Adapter, 0x400000);
Log(WINTUN_LOG_INFO, L"Success to setup tun device, start mangling packets...");
// ... read and print information of received packet by wintun
}
我没有自己更改路由表,但是系统添加了一些规则。路由表如下所示: 路由打印命令的结果
然后我使用 python 脚本通过发送 udp 数据包对其进行测试:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto("HELLO".encode('utf-8'), ('192.168.21.2', 1080))
s.close()
但是,我的 wintun 适配器刚刚收到一些奇怪的 IP 数据包,其目标 IP 地址为 192.168.21.255,并且从未收到预期的 IP 数据包。其中一个看起来像这样:
45 0 0 4e
6a 15 0 0
80 11 24 39
c0 a8 15 1
c0 a8 15 ff
0 89 0 89
0 3a 2e 9b
a2 f6 1 10
0 1 0 0
0 0 0 0
20 46 43 46
41 45 4b 45
44 45 4a 46
48 45 48 46
43 45 4e 45
4c 46 44 46
42 46 48 43
41 43 41 41
41 0 0 20
0
此外,我的wintun适配器也收到了一些目的IP地址为224.0.0.252或157.216.24.127的数据包,它们都与上面类似。只要我运行我的python脚本发送一个udp数据包,我的wintun适配器就收到了这样一个数据包。
我已经尝试了很多,但仍然不知道出了什么问题,所以请给我一些帮助。非常感谢。