bool InitUpToaFetcher(char *ncard_ip_str, char *svr_ip_str, u_short svr_port[], u_short svr_port_num, u_short cache_secs=TIMER_CACHE_SECS)
bool FetchToaValue(u_long fake_client_ip_addr, u_short fake_client_port, u_long &real_client_ip_addr, u_short &real_client_port)
void StopToaFetcher()
int GetFetcherStatus()
HANDLE FetchThreadHandler()
bool FetchErrorInfo(int* err_code_ptr, char* err_msg_ptr)
错误码 | 错误信息 | 说明 |
---|---|---|
0 | Ok | 正常 |
-1001 | Exceed max server port number | 超过最大的端口数,请检查 InitUpToaFetcher:svr_port_num。 |
-1002 | Invalid IP address | 非法的 IPv4 地址。 |
-1003 | No suitable network interface | 未找到合适的网络接口。 |
-1004 | System Error: find dev error | 系统错误:未找到 dev,请联系 lib 开发者。 |
-1005 | System Error: start timer error | 系统错误:定时器启动错误,请联系 lib 开发者。 |
-1006 | System Error: compile filter error | 系统错误:过滤规则编译错误,请联系lib开发者。 |
-1007 | System Error: set filter error | 系统错误:过滤规则设置错误,请联系 lib 开发者。 |
-1008 | System Error: open pcap error | 系统错误:打开 dev 错误,请联系 lib 开发者。 |
-1009 | System Error: start pcap error | 系统错误:启动监听错误,请联系 lib 开发者。 |
-1010 | System Error: begin thread error | 系统错误:启动线程错误,请联系 lib 开发者。 |
-1999 | Unknown error | 未知错误,请联系 lib 开发者。 |
char ncard_ip_str[] = "1.1.1.1";
char svr_ip_str[] = "1.1.1.1";
char port_range[3][100] = {"10001-10005", "20001-20005", "30001-30005"};
char* port_range_ptr[3] = {port_range[0], port_range[1], port_range[2]};
u_short svr_port_list[3] = {1111, 2222, 3333};
ToaFetcher inst = ToaFetcher();
inst.InitUpToaFetcher((char*)ncard_ip_str, (char*)svr_ip_str, svr_port_list, 3);
void GetToa(SOCKADDR_IN client_addr, ToaFetcher * toa_fetcher_ptr)
{
u_long fake_client_ip_addr = 0;
u_short fake_client_port = 0;
u_long real_client_ip_addr = 0;
u_short real_client_port = 0;
memcpy(&fake_client_ip_addr, &client_addr.sin_addr, 4);
memcpy(&fake_client_port, &client_addr.sin_port, 2);
bool ret = toa_fetcher_ptr->FetchToaValue(fake_client_ip_addr, fake_client_port, real_client_ip_addr, real_client_port);
if(ret == FALSE){
printf("No toa found\n");
}else{
//fpp: 自定义的打印函数
fpp("real_client_ip_addr", &real_client_ip_addr, 4);
fpp("real_client_port", &real_client_port, 2);
}
}
TOA 获取端通过本机 UDP 通信的方式向 toa_win.exe 获取真实 IP 地址。
请求:| ID(4Bytes)| FakeIPAddress(4Bytes)| FakePort(2Bytes)|
字段说明如下:
响应:| ID(4Bytes)| Code(1Byte)| RealIPAddress(4Bytes)| RealPort(2Bytes)|
字段说明如下:
详情请参见 demo.go,可以自行开发 TOA 获取客户端程序,也可以使用 demo.go 中的 queryToa 函数进行获取。
func queryToa(serverAddr string, fakeIp string, fakePort uint16)(int32, string, uint16)
企业边缘应用面临的挑战 CDN是通过在全球范围内分布式地部署边缘服务器将各类互...
常用的 ping,tracert,nslookup 一般用来判断主机的网络连通性,其实 Linux 下...
云空间能 虚拟主机 吗?可以的。云空间也就是我们说的 云服务器 ,它的功能其实非...
调用LockVirtualMFADevice锁定处于正常(NORMAL)状态的虚拟MFA设备。 接口说明 ...
我在2016年的时候,写过一篇文章,介绍@property装饰器。4年过去了,本来以为这...
虚拟主机 太小了可以换吗?可以升级,如果购买的虚拟主机配置或流量等不够用,可...
介绍 目前,数据科学家正在受到很多关注,因此,有关数据科学的书籍正在激增。我...
集群生命周期状态说明 状态 说明 创建中 集群正在创建,正在申请云资源。 规模调...
因为我是处于IT行业的,所以身边有很多经常做报表分析的人,每当老板一有问题,...
支持 20 多种主流格式的文件在线浏览,这个项目值得学习。 编程导航开源仓库: h...