本文介绍了在Windows服务器环境下获取客户端真实IP的操作方法。
安装方法
- 使用Visual Studio 2013以上版本打开toaservice.sln并编译。
- 运行编译打包成的toaservice.exe。此为绑定网卡监听并提供UDP 48888端口访问API服务的后台进程。
集成应用层Hook-TOA模块
说明 适用C++,不适用C#等其它语言。
接入方法如下。
集成代码层TOA
与Linux相同,通过代码的方式集成。游戏盾TOA模块在本机安装一个进程,监听UDP:48888端口,业务进程将获取到的非真实IP和Port按照固定格式传入此端口进行查询,查询后会返回客户的真实IP和端口。
注意事项
- 该源码仅支持Windows Server 2008。
- 测试时确保本机防火墙关闭,否则WSASocket SOCK_RAW无法sniffer到接收的数据包,导致无法获取真实IP。
- 由于是旁路获取,所以理论上有极小概率获取失败,主服务本身需要考虑获取失败时的对应方案。
- LoadLibrary加载GetSourceName.dll后,不能FreeLibrary释放GetSourceName.dll,否则有崩溃风险。
说明 自行购买微软的Detours替换mhook可解决该问题。
- GetSourceName.dll 、 toaservice.exe和加载GetSourceName.dll的EXE程序必须在同一目录。
- 加载GetSourceName.dll的EXE程序必须使用管理员权限启动。
- 出于性能优化sniffer时需要绑定网卡,若服务器有多个网卡,请修改源码(toa_service/win/toaservice/toaservice/Sniffer.cpp131-139行)绑定正确网卡。
具体请参见TOA压缩包内的指导文档进行操作。详细情况可以咨询游戏盾服务团队。