NAT检测实现方法
来源:互联网 发布:js获取随机数123 编辑:程序博客网 时间:2024/04/28 07:29
1. 准备工作
1) 服务器设置
服务器需要2个公网IP(主地址,从地址),绑定3个端口(直接回复、换IP回复、换Port回复)。
2) 客户端设置
客户端要主动接收数据,也需要绑定一个端口。
3) 通信数据包
// 请求数据
struct sReqData
{
sReqData()
{
memset(this, 0, sizeof(sReqData));
}
unsigned short usType;
unsigned long ulStamp;
};
// 回复数据
struct sRspData
{
sRspData()
{
memset(this, 0, sizeof(sRspData));
}
unsigned short usType;
unsigned long ulStamp;
unsigned long ulCIp;
unsigned short usCPort;
};
说明:
usType: 标识请求类型。包括:主地址直接回复、主地址换IP回复、主地址换端口回复、从地址直接回复。ulStamp: 标识请求和回复是否匹配。
ulCIp: 服务器看到的客户端的公网IP。
usCPort: 服务器看到的客户端的公网Port。
2. 通信流程
参照上一篇中“NAT的检测步骤”,简化通信流程如下:
第一步、请求主地址直接回复客户端的IP1和Port1。
如未收到回复,表明本地不能进行UDP通信。可能是防火墙阻止了(测试停止)。
如能收到回复,表明本地能够进行UDP通信。记下公网地址(IP1,Port1),并将公网地址与本地地址进行比较。如果一致,为公网(测试停止);否则,进行后续测试。
第二步、请求主地址换IP回复。
如能收到回复,表明本地为全锥形NAT(测试停止)。
如未收到回复,进行后续测试。
第三步、请求从地址直接回复客户端的IP2和Port2。
如(IP2、Port2)与(IP1、Port1)不同,表明本地为对称NAT(测试停止)。
如(IP2、Port2)与(IP1、Port1)相同,进行后续测试。
第四步、请求主地址换Port回复。
如未收到回复,表明本地为端口限制NAT。
如能收到回复,表明本地为限制NAT。
具体代码可以参考:http://download.csdn.net/detail/zwz1984/5249692
- NAT检测实现方法
- NAT类型检测方法
- NAT类型检测方法
- NAT类型检测方法
- NAT类型检测方法
- NAT类型及检测方法
- NAT类型及检测方法
- NAT 类型及检测方法
- NAT 类型及检测方法
- NAT类型及检测方法
- NAT类型和检测方法
- Nat 检测代码,udp实现
- P2P之NAT类型检测方法
- P2P之NAT类型检测方法
- P2P之NAT类型检测方法
- P2P之NAT类型检测方法
- P2P之NAT类型检测方法
- P2P之NAT类型检测方法
- 一些实用的 jQuery 技巧
- MSP430F249 IIC write and Uart send
- uestc oj 1151 The simple problem
- Linux C 语言 获取系统时间信息
- Jetty 的工作原理以及与 Tomcat 的比较
- NAT检测实现方法
- phpcms v9 模板标签技巧,标签常用方法
- Java Socket 网络编程常见异常
- Linux makefile 教程 非常详细,且易懂
- struts2的好处
- ETL架构师面试题
- 用pl/sql developer 将文本文件txt导入Oracle数据库
- SQLite3 C/C++ 开发接口简介
- 如何用网站源码建立网站?