制作一个自己的对战平台

缘起

因为在浙大,物理网卡的地址被分配为222.205.XX.XX,但是子网掩码是255.255.255.0,这样的话虽然大家都在一个局域网里面,但是却不一定在同一个子网。
局域网联机游戏为了发现局域网中的主机,会发送广播包,有些局域网联机游戏,会发送到255.255.255.255这个广播地址(典型代表War3),但是这个广播地址
是只能广播到子网的,路由器默认不转发,这样就造成了我们同在校园网却无法联机的问题。

虚拟局域网

想了想解决方案,可能使用虚拟网卡做一个虚拟局域网是一个解决方案,于是我安装了OpenVPN,然后使用其tap0901网卡驱动,可以读取注册表
获取tap0901设备的实例UUID以及显示在网络和共享中心的那个网络名称:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}
这个里面有很多项,代表了多个网卡接口,其中会有一个是tuntap设备,通过类似这样的地址HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0002下的ComponentIdtap0901来确定tap网卡,然后读取该项下面的netCfgInstanceId,就是tap网卡的UUID,得到这个UUID之后,
可以使用CreateFile函数来打开一个tuntap设备:

HANDLE f = CreateFile(L"\\\\.\\Global\\{...}", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_OVERLAPPED, NULL);

打开这个设备后,就可以对其发送指令了,参照tuntap的驱动源代码tap-windows6,可以获得一些宏,以及一些指令的参数信息,然后使用
DeviceIoControl发送到设备:

DeviceIoControl(f, TAP_IOCTL_SET_MEDIA_STATUS, config, 4, config, 4, &returnLen, NULL);

启动tuntap设备之前,要考虑到单机游戏发送广播包,所以应该修改路由表,让255.255.255.255路由经过我们的tuntap设备,以及作为虚拟局域网,每个tuntap设备应该有一个虚拟ip,这里
假设为192.168.1.10。设置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值