背景技术
网络地址转换(Net Address Translation,简称NAT)技术是一种地址映射技术,通常用于子域内具有私网IP地址的主机访问外部主机时将该主机的私网IP地址映射为一个外部唯一可识别的公网IP地址;同时,将外部主机返回给内部主机的公网IP地址映射回内部标志该主机的私网IP地址,使得返回的数据包正确到达内部目的主机。该技术使得不同私有网络可以使用相同的私网IP地址段而不会导致外部网络的地址信息出现混乱,从而扩展了IP地址的应用范围,在一定程度上缓解了当前Ipv4地址空间不足的问题。
NAT一般可分为三种类型:静态NAT、动态不可重用NAT、动态可重用NAT(端口地址翻译/网络端口地址翻译),端口地址翻译英文全称为Port Address Translation,简称PAT,网络端口地址翻译英文全称为Net Port Address Translation,简称NAPT。
(1)静态NAT:内部私网IP地址和外部公网IP地址的映射是静态一一对应的。如果结合端口来实现静态映射关系,就是端口重定向或静态PAT/NAPT。
(2)动态不可重用NAT:使用外部公网IP地址池技术,将一些公网IP地址存放到一个地址池中。在进行NAT转换时,从这个公网IP地址池中获取一个可用的公网IP地址进行转换。通信完毕之后,该公网IP地址也被释放回地址池中。在使用过程中,一个公网IP地址只能有一个映射关系。
(3)动态可重用NAT(PAT/NAPT)。与动态不可重用模式相比,通信的映射是通过IP地址和端口号的组合来完成的。
一般而言,在中国由于IPv4地址的严重缺乏,我们在接入Internet时会把网络划分为公网和内网,内网和公网之间通过NAT进行转化。所以当我们在内网布置AP时,会碰到这么一个问题,AP无法知道自己的公网地址,只知道自己的内网地址。而某些应用要求AP必须知道自己的公网地址。
发明内容
本发明提供一种私网终端获取公网IP的方法及系统,用以解决现有技术中存在私网终端只知道自己私网地址,而不知道自己的公网IP地址的问题。
本发明方法包括:
S100私网终端向公网终端发送ICMP请求报文,所述ICMP请求报文含有定义为请求自身公网IP的特征码;
S200所述公网终端在接收到所述ICMP请求报文后,检测所述ICMP请求报文中是否含有所述特征码,若是,则进入步骤S300,否则进入步骤S400;
S300所述公网终端提取所述ICMP请求报文的所述私网终端所在的源IP地址,构造ICMP应答报文,并将含有所述特征码及所述私网终端所在的源IP地址的ICMP应答报文发送给所述私网终端;
S400所述公网终端复制所述ICMP请求报文的有效载荷字段至ICMP应答报文中,并将所述ICMP应答报文发送给所述私网终端;
S500所述私网终端在接收到所述ICMP应答报文后,检测所述ICMP应答报文中是否含有所述特征码,若是,则提取所述ICMP应答报文中的所述私网终端所在的源IP地址,所述私网终端所在的源IP地址即为所述私网终端的公网IP地址。
ICMP是(Internet Control Message Protocol)Internet控制报文协议,属于网络层协议,它是TCP/IP协议族的一个子协议,主要用于在主机与路由器之间传递控制信息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。本发明则是在ICMP的ping功能基础上,双方定义好代表“获取公网IP”的特征码,利用公网终端接收ICMP请求报文时,知晓作为发送方的私网终端所在的公网的源IP地址,因此如果检测到该请求报文中含有所述特征码时,则提取私网终端所在的源IP地址,并构建含有提取的源IP地址及特征码的ICMP回应报文给到私网终端,从而使得私网终端能从接收到的ICMP回应报文中获悉自己的公网IP。
进一步地,所述步骤S100包括步骤:
S110私网终端将目的地址为公网终端的ICMP请求报文发送给路由器,所述ICMP请求报文含有定义为请求自身公网IP的特征码;
S120所述路由器在接收到所述ICMP请求报文后,根据路由表项将所述ICMP请求报文发送给所述公网终端。
进一步地,还包括步骤:
S010在所述私网终端中定义请求自身公网IP的特征码,设置用于获取公网IP的ICMP请求报文的有效载荷字段的格式;
S020在所述公网终端中定义请求公网IP的特征码,设置用于获取公网IP的ICMP应答报文的有效载荷字段的格式。
进一步地,所述特征码位于所述ICMP请求报文的有效载荷字段的首部。
进一步地,所述特征码长度小于或等于10字节。
本发明还提供一种私网终端获取公网IP的系统,包括私网终端、路由器、公网终端,所述私网终端通过所述路由器与所述公网终端通信连接,所述私网终端包括第一报文构建模块、第一报文收发模块、第一检测模块,所述第一报文收发模块分别与所述第一报文构建模块、第一检测模块相连;所述公网终端包括第二报文构建模块、第二报文收发模块、第二检测模块、IP提取模块,所述第二检测模块分别与所述第二报文构建模块、所述第二检测模块及所述IP提取模块,所述IP提取模块与所述第二报文构建模块相连;其中:所述私网终端的第一报文构建模块构建用于获取自身公网IP的ICMP请求报文,所述第一报文收发模块通过所述路由器向所述公网终端的第二报文收发模块发送所述ICMP请求报文,所述ICMP请求报文含有定义为请求自身公网IP的特征码;所述公网终端的第二报文收发模块在接收到所述ICMP请求报文后,所述公网终端的第二检测模块检测所述ICMP请求报文中是否含有所述特征码,若是,则通过所述IP提取模块提取所述ICMP请求报文的所述私网终端所在的源IP地址,所述第二报文构建模块构建ICMP应答报文,并将含有所述特征码及所述私网终端所在的源IP地址的ICMP应答报文通过所述路由器发送给所述私网终端的第一报文收发模块;若所述公网终端的第二检测模块未检测到所述ICMP请求报文中含有所述特征码,则所述第二报文构建模块复制所述ICMP请求报文的有效载荷字段至ICMP应答报文中,并通过所述第二报文收发模块将所述ICMP应答报文通过所述路由器发送给所述私网终端的第一报文收发模块;所述私网终端的第一报文收发模块在接收到所述ICMP应答报文后,所述私网终端的第一检测模块检测所述ICMP应答报文中是否含有所述特征码,若是,则提取所述ICMP应答报文中的所述私网终端所在的源IP地址,所述私网终端所在的源IP地址即为所述私网终端的公网IP地址。
进一步地,所述路由器包括中转模块、存储模块、及分别与所述中转模块、存储模块相连的查找模块,其中:所述私网终端的第一报文收发模块将目的地址为公网终端的ICMP请求报文发送给所述路由器的中转模块,所述ICMP请求报文含有定义为请求自身公网IP的特征码;所述路由器的中转模块在接收到所述ICMP请求报文后,通过所述查找模块在所述存储模块中存储的路由表项查找公网终端的IP地址;所述路由器的中转模块根据所述查找到的公网终端IP地址,将所述ICMP请求报文发送给所述公网终端的第二报文收发模块。
进一步地,所述私网终端还包括与所述第一报文构建模块相连的第一设置模块,所述公网终端还包括与所述第二报文构建模块相连的第二设置模块,其中:所述私网终端的第一设置模块在所述私网终端中定义请求自身公网IP的特征码,设置用于获取公网IP的ICMP请求报文的有效载荷字段的格式;所述公网终端的第二设置模块在所述公网终端中定义请求公网IP的特征码,设置用于获取公网IP的ICMP应答报文的有效载荷字段的格式。
进一步地,所述特征码位于所述ICMP请求报文的有效载荷字段的首部。
进一步地,所述特征码长度小于或等于10字节。
本发明通过改进的ICMP ping功能,使得处于内网位置的AP可以方便的获取其在公网上的IP。本发明提出的上述方案,对现有系统的改动很小,不会影响系统的兼容性,而且实现简单、高效。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明公开了一种本发明方法,实施例一如图1所示,包括:
S100私网终端向公网终端发送ICMP请求报文,所述ICMP请求报文含有定义为请求自身公网IP的特征码;
S200所述公网终端在接收到所述ICMP请求报文后,检测所述ICMP请求报文中是否含有所述特征码,若是,则进入步骤S300,否则进入步骤S400;
S300所述公网终端提取所述ICMP请求报文的所述私网终端所在的源IP地址,构造ICMP应答报文,并将含有所述特征码及所述私网终端所在的源IP地址的ICMP应答报文发送给所述私网终端;
S400所述公网终端复制所述ICMP请求报文的有效载荷字段至ICMP应答报文中,并将所述ICMP应答报文发送给所述私网终端;
S500所述私网终端在接收到所述ICMP应答报文后,检测所述ICMP应答报文中是否含有所述特征码,若是,则提取所述ICMP应答报文中的所述私网终端所在的源IP地址,所述私网终端所在的源IP地址即为所述私网终端的公网IP地址。
具体的,假如在私网上的主机A想要知道自己的公网IP地址,通过本发明实现方式如下:首先,私网上的主机A来ping公网上终端B的IP地址后,Ping命令会构建一个固定格式的ICMP请求数据包,该请求数据包会包含特征码X,然后由ICMP协议将这个数据包连同终端B的IP地址一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议通过终端B的IP地址和自己的子网掩码,发现它跟自己不属于同一网段内,就直接交给路由处理,路由得到这个数据帧后再跟公网终端B进行联系,将ICMP请求报文发送给公网终端B,终端B在收到ICMP请求报文后检测看该报文中是否含有特征码X,如果是的话,则说明是私网终端A想要获取自身的公网IP地址,于是,公网终端B便提取ICMP请求报文的源IP地址,也就是路由的IP地址,然后构建ICMP应答报文,该报文中包含了特征码X和提取的源IP地址,然后将该应答报文发送给路由,路由在接收到该ICMP应答报文后再转发给主机A,主机A在收到应答报文后,先要查看是否有特征码X,有的话则说明公网终端B对获取公网IP的请求报文做了回应,主机A可从应答的报文中看到其所在网络的公网IP地址。
在上述实施例中,我们还需要对私网终端的ping、公网终端的ping功能进行相应的设置,具体的,包括步骤:
S010在所述私网终端中定义请求自身公网IP的特征码,设置用于获取公网IP的ICMP请求报文的有效载荷字段的格式;
S020在所述公网终端中定义请求公网IP的特征码,设置用于获取公网IP的ICMP应答报文的有效载荷字段的格式。
比如我们定义“321532”为请求自身公网IP的特征码,设置报文的payload(有效载荷)格式为一6byte的特征码,其后为一字符串:“Reply with my IP”,ICMP一般要求最小payload为64字节,我们对不满64字节的部分可以用0来填充,所以整个payload格式如下:
特征码 |
“Reply with my IP” |
Pad 0 |
当然,由于我们已经定义了特征码,因此,特征码后的字符串我们也可以不设定,或者干脆全用0填充亦可。只是如果定义了特征码和字符串的话,可以进行双重的校验,以便公网终端更加确定该报文是为了获取公网IP而来。避免请求报文由于偶然也出现了特征码数据,但并不是为了获取公网IP。
同样的,公网终端也需要进行相应的设置,同样需要定义请求公网IP的特征码,以便收到请求报文后,若发现该请求报文中含有特征码,便知道这个报文是发送方想要获取自身的公网IP,从而进行相应的提取动作,应答的报文的payload同样需要设置格式,相应的,应答报文的payload同样均为64字节,分成三部分:特征码、XX.XX.XX.XX(提取的公网IP地址)、若干0(不64字节部分用0填充)。
较佳的,上述特征码位于所述ICMP请求报文的有效载荷字段的首部。只要双方约定好位置即可,一般位于首部的话便于检测。
较佳的,所述特征码长度小于或等于10字节。值得注意的是,特征码的长度太小则容易与普通的报文混淆,特征码长度太长也较为繁冗,因此一般设定10字节左右较为合适。
本发明方法的另一实施例,首先假设有某台服务器处于公网位置。我们现在改进ICMP,即ping。正常按照ICMP协议,当某个IP终端A ping另外一个终端B,即发送ICMPrequest报文时,我们会在ICMP request报文的payload中加一段数据。当B收到ICMPresponse时,会构建一个ICMP response报文,对于response报文的payload,B会原封不动的复制A的payload。
现在我们进行改进:我们把payload定义格式如下:
Payload最前面为一10byte特征码,例如1234512345,可自定义。其后为一字符串:“Vendor:Please reply with my public IPv4address”,因为ICMP一般要求最小payload为64byte,我们对字符串后门不满64byte的部分填充0。
所以整个payload(64bypte长)如下所示:
特征码 |
“Vendor:Please reply with my public IPv4ddress” |
Pad 0 |
现在AP为了获得自己的公网地址,发送这个改进的ICMP request给B。当B收到后,开始检测payload的前10byte,如果不是所定义的特征码,则B回送正常的ICMP response给A,即复制ICMP request的payload到ICMP response中。如果是特征码。则ICMP response按以下格式:
其中ICMP response的特征码和ICMP request的特征码一致,字符串“xx.xx.xx.xx”是公网地址。注:B由于在公网上,可以提取ICMP request的源IP地址,而这个地址一定就A的公网地址。
基于相同的技术构思,本发明实施例还提供一种私网终端100获取公网IP的系统,该系统可执行上述方法实施例。本发明实施例提供的系统如图3所示,包括私网终端100、路由器200、公网终端300,所述私网终端100通过所述路由器200与所述公网终端300通信连接,所述私网终端100包括第一报文构建模块110、第一报文收发模块120、第一检测模块130,所述第一报文收发模块120分别与所述第一报文构建模块110、第一检测模块130相连;所述公网终端300包括第二报文构建模块310、第二报文收发模块330、第二检测模块320、IP提取模块340,所述第二检测模块320分别与所述第二报文构建模块310、所述第二检测模块320及所述IP提取模块340,所述IP提取模块340与所述第二报文构建模块310相连;其中:所述私网终端100的第一报文构建模块110构建用于获取自身公网IP的ICMP请求报文,所述第一报文收发模块120通过所述路由器200向所述公网终端300的第二报文收发模块330发送所述ICMP请求报文,所述ICMP请求报文含有定义为请求自身公网IP的特征码;所述公网终端300的第二报文收发模块330在接收到所述ICMP请求报文后,所述公网终端300的第二检测模块320检测所述ICMP请求报文中是否含有所述特征码,若是,则通过所述IP提取模块340提取所述ICMP请求报文的所述私网终端100所在的源IP地址,所述第二报文构建模块310构建ICMP应答报文,并将含有所述特征码及所述私网终端100所在的源IP地址的ICMP应答报文通过所述路由器200发送给所述私网终端100的第一报文收发模块120;若所述公网终端300的第二检测模块320未检测到所述ICMP请求报文中含有所述特征码,则所述第二报文构建模块310复制所述ICMP请求报文的有效载荷字段至ICMP应答报文中,并通过所述第二报文收发模块330将所述ICMP应答报文通过所述路由器200发送给所述私网终端100的第一报文收发模块120;所述私网终端100的第一报文收发模块120在接收到所述ICMP应答报文后,所述私网终端100的第一检测模块130检测所述ICMP应答报文中是否含有所述特征码,若是,则提取所述ICMP应答报文中的所述私网终端100所在的源IP地址,所述私网终端100所在的源IP地址即为所述私网终端100的公网IP地址。
在上述系统实施例一的基础上,所述路由器200包括中转模块210、存储模块230、及分别与所述中转模块210、存储模块230相连的查找模块220,其中:所述私网终端100的第一报文收发模块120将目的地址为公网终端300的ICMP请求报文发送给所述路由器200的中转模块210,所述ICMP请求报文含有定义为请求自身公网IP的特征码;所述路由器200的中转模块210在接收到所述ICMP请求报文后,通过所述查找模块220在所述存储模块230中存储的路由表项查找公网终端300的IP地址;所述路由器200的中转模块210根据所述查找到的公网终端300IP地址,将所述ICMP请求报文发送给所述公网终端300的第二报文收发模块330。
由于私网终端100与公网终端300不在同一网段(即不在同一网络),因此需要路由器200来进行中转。
在上述任一实施例的基础上,所述私网终端100还包括与所述第一报文构建模块110相连的第一设置模块140,所述公网终端300还包括与所述第二报文构建模块310相连的第二设置模块350,其中:所述私网终端100的第一设置模块140在所述私网终端100中定义请求自身公网IP的特征码,设置用于获取公网IP的ICMP请求报文的有效载荷字段的格式;所述公网终端300的第二设置模块350在所述公网终端300中定义请求公网IP的特征码,设置用于获取公网IP的ICMP应答报文的有效载荷字段的格式。
本发明系统在用于获取公网IP之前,需要对各自终端上的ICMP的ping功能进行相应的设置。
上述任一实施例中,所述特征码位于所述ICMP请求报文的有效载荷字段的首部。
上述任一实施例中,所述特征码长度小于或等于10字节。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。