一种获取NAT上端口映射的方法及系统与流程

文档序号:18267831发布日期:2019-07-27 09:20阅读:865来源:国知局
一种获取NAT上端口映射的方法及系统与流程

本发明涉及网络地址转换领域,尤其涉及一种获取nat上端口映射的方法及系统。



背景技术:

nat(networkaddresstranslation,网络地址转换)是将私网转换为公网的装置,其作为一网关,设置在私网到公网的路由出口位置,双向流量都必须经过nat网关。nat网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换。nat的使用不仅解决了ip地址不足的问题,而且还能有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。但是,nat最大的一个弊端在于破坏了ip协议架构中所有节点在通讯中的对等地位,nat网络环境中网络访问只能先由私网侧发起,公网主机无法主动访问私网主机。但是,在p2p通信中,p2p主机位于网关后面的情况屡见不鲜,而p2p通信又要求通信双方都能够主动发起访问,所以nat的上述弊端阻碍了p2p通信在nat网络环境中的有效进行,为了解决ip问题,其端到端的应用在nat环境下遇到了上述问题,现有技术中出现了各种各样的nat穿越技术,比如stun和turn技术。

对于一对多的nat模型,按照端口转换的工作方式的不同,可以进一步划分成如下四种类型:

全锥形(fullcone)nat:这种nat内部的主机a连接过外网主机c后,nat会打开一个端口,则外网的任何发到这个打开的端口的udp数据都可以到达a,而不管是不是c发过来;

地址限制锥形(restricted)nat:这种nat内部的主机a连接过外网的主机c后,nat打开一个端口,则c可以用任何端口和a进行通信,其他的外网主机则不行;

端口限制锥形(portrestricted)nat:这种nat内部的主机a连接过外网的主机c后,nat打开一个端口(port),则c可以使用这个端口与a通信,其他的外网主机则不行;

对称型(symmetric)nat:这种nat连接不同的外部目标,原来nat打开的端口会变化,即使内部主机使用之前用过的地址端口对去连接不同外部主机时,nat网关也会建立新的映射关系,也就是说,如果任何外网主机想要发送数据给内网主机,则它首先应该收到内网主机发给它的数据,然后才能往回发送,否则,即使它知道内网主机的一个地址端口对,也不能发送数据给内网主机。

针对上述四种不同类型的nat各自的工作机制,前三种nat统称为锥形(cone)nat,这种类型的nat在映射过程中,对于内网主机的同一个地址端口对,访问不同的外网(ip:port)时,锥形(cone)nat为其映射的端口不会变化,所以对于这种nat可以进行udp打洞实现对nat的穿越。但是,对于对称型(symmetric)的nat,连接不同的外部主机,原来nat打开的端口会变化,所以这种类型的nat无法实现udp-p2p通信。现有的nat穿越技术无法保证在各种类型的nat中均能够实现各个主机之间的互联互通,实现顺畅的p2p通信。



技术实现要素:

本发明所要解决的技术问题是:提供一种获取nat上端口映射的方法及系统,能够实现p2p通信在各种类型的nat中的穿越,通用性好。

为了解决上述技术问题,本发明采用的一种技术方案为:

一种获取nat上端口映射的方法,包括步骤:

s1、接收第一主机向第二主机发起连接失败后发送的第一地址信息,所述第一地址信息包括第一主机和第二主机的地址信息,所述第一主机和第二主机分别位于不同的nat之后;

s2、触发或通知第三主机根据所述第一地址信息伪装成所述第二主机,枚举并获取所述第一主机在对应的nat上的映射端口,所述第三主机发送的信息被路由时,其ip头中的源地址ip不变。

为了解决上述技术问题,本发明采用的另一种技术方案为:

一种获取nat上端口映射的系统,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

s1、接收第一主机向第二主机发起连接失败后发送的第一地址信息,所述第一地址信息包括第一主机和第二主机的地址信息,所述第一主机和第二主机分别位于不同的nat之后;

s2、触发或通知第三主机根据所述第一地址信息伪装成所述第二主机,枚举并获取所述第一主机在对应的nat上的映射端口,所述第三主机发送的信息被路由时,其ip头中的源地址ip不变。

本发明的有益效果在于:在第一主机向第二主机发起连接失败时,通过第三主机伪装成第二主机,枚举所述第一主机在对应的nat上的映射端口,从而获取所述第一主机在对应的nat上的映射端口,通过伪装接收方并用枚举的方式获取发送方在其对应的nat上的映射端口,由于所述第三主机发送的信息被路由时,其ip头中的源地址ip不变,所以其伪装成第二主机通过第一主机对应的nat后,所述信息的源地址ip仍然为第二主机的,所以其能够被第一主机正确识别到,从而顺利获取所述第一主机在对应的nat上的映射端口,不仅保证了所获取的nat上的映射端口的准确性,而且能够适用各种类型的nat,包括对称型(symmetric)nat,能够屏蔽对称型(symmetric)nat前后两次的端口不同引起的连接问题,提高了不同nat类型组合的连接成功率,通用性好,能够实现p2p通信在各种类型的nat中的穿越,从而保证p2p通信在nat网络中的顺畅的进行。

附图说明

图1为本发明实施例的一种获取nat上端口映射的方法的步骤流程图;

图2为本发明实施例的一种获取nat上端口映射的系统的结构示意图;

图3为本发明实施例的信息的ip头的结构示意图;

图4为本发明实施例的一种获取nat上端口映射的方法的实现流程图;

标号说明:

1、一种获取nat上端口映射的系统;2、存储器;3、处理器。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。

请参照图1,一种获取nat上端口映射的方法,包括步骤:

s1、接收第一主机向第二主机发起连接失败后发送的第一地址信息,所述第一地址信息包括第一主机和第二主机的地址信息,所述第一主机和第二主机分别位于不同的nat之后;

s2、触发或通知第三主机根据所述第一地址信息伪装成所述第二主机,枚举并获取所述第一主机在对应的nat上的映射端口,所述第三主机发送的信息被路由时,其ip头中的源地址ip不变。

从上述描述可知,本发明的有益效果在于:在第一主机向第二主机发起连接失败时,通过第三主机伪装成第二主机,枚举所述第一主机在对应的nat上的映射端口,从而获取所述第一主机在对应的nat上的映射端口,通过伪装接收方并用枚举的方式获取发送方在其对应的nat上的映射端口,由于所述第三主机发送的信息被路由时,其ip头中的源地址ip不变,所以其伪装成第二主机通过第一主机对应的nat后,所述信息的源地址ip仍然为第二主机的,所以其能够被第一主机正确识别到,从而顺利获取所述第一主机在对应的nat上的映射端口,不仅保证了所获取的nat上的映射端口的准确性,而且能够适用各种类型的nat,包括对称型nat,能够屏蔽对称型nat前后两次的端口不同引起的连接问题,提高了不同nat类型组合的连接成功率,通用性好,能够实现p2p通信在各种类型的nat中的穿越,从而保证p2p通信在nat网络中的顺畅进行。

进一步的,所述步骤s2包括:

触发或通知第三主机向第一主机发送信息,所述信息的ip头的源地址根据所述第一地址信息伪装为第二主机的ip地址和端口,对所述信息的目标端口的所有可能端口进行枚举,获取所述第一主机在对应的nat上的映射端口。

由上述描述可知,通过伪装成第二主机,并向发起连接的第一主机发送信息,其中,对信息中的目标端口的所有可能端口进行一一枚举,能够100%获取到正确的映射端口信息,保证了获取所述第一主机在对应的nat上的映射端口的准确性。

进一步的,对所述信息的目标端口的所有可能端口进行枚举,获取所述第一主机在对应的nat上的映射端口包括:

对所述信息的目标端口的所有可能端口号进行枚举,判断所述信息是否到达所述第一主机的应用程序,若是,则所述信息对应的目标端口为所述第一主机向第二主机发起连接时在其对应的nat上的映射端口。

由上述描述可知,第三主机对第一主机在其对应的nat上的所有可能端口进行枚举,当枚举的端口符合第一主机在其对应的nat上的映射规则时,则对应的信息能够到达第一主机的应用程序,基于此,能够准确快速地判断出枚举的端口是否为第一主机向第二主机发起连接时在其对应的nat上的映射端口。

进一步的,所述触发或通知第三主机向第一主机发送信息,对所述信息的目标端口的所有可能端口进行枚举包括:

将所述信息的目标端口的所有可能端口分成预设段,触发或通知与所述预设段数目相同的第三主机分别向第一主机发送信息,每一第三主机分别对应枚举目标端口的一段端口,不同第三主机枚举的端口段不同。

由上述描述可知,通过对目标端口进行分段,每一段分别通过不同的第三主机进行枚举,能够快速地获知第一主机向第二主机发起连接时在其对应的nat上的映射端口,实现p2p通信在nat网络中的快速进行。

进一步的,还包括步骤:

s3、触发或通知所述第一主机将所述映射端口通过信令发送给所述第二主机,以使得所述第二主机根据所述映射端口向第一主机发起连接。

由上述描述可知,获取到第一主机向第二主机发起连接时在其对应的nat上的映射端口后,将其通过信令发送给第二主机,第二主机根据所述映射端口对第一主机发起连接,根据nat的工作机制,此时第二主机发送的信息能够达到第一主机的应该程序中,从而能够实现第一主机与第二主机之间的互通互联。

请参照图2,一种获取nat上端口映射的系统,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

s1、接收第一主机向第二主机发起连接失败后发送的第一地址信息,所述第一地址信息包括第一主机和第二主机的地址信息,所述第一主机和第二主机分别位于不同的nat之后;

s2、触发或通知第三主机根据所述第一地址信息伪装成所述第二主机,枚举并获取所述第一主机在对应的nat上的映射端口,所述第三主机发送的信息被路由时,其ip头中的源地址ip不变。

从上述描述可知,本发明的有益效果在于:在第一主机向第二主机发起连接失败时,通过第三主机伪装成第二主机,枚举所述第一主机在对应的nat上的映射端口,从而获取所述第一主机在对应的nat上的映射端口,通过伪装接收方并用枚举的方式获取发送方在其对应的nat上的映射端口,由于所述第三主机发送的信息被路由时,其ip头中的源地址ip不变,所以其伪装成第二主机通过第一主机对应的nat后,所述信息的源地址ip仍然为第二主机的,所以其能够被第一主机正确识别到,从而顺利获取所述第一主机在对应的nat上的映射端口,不仅保证了所获取的nat上的映射端口的准确性,而且能够适用各种类型的nat,包括对称型nat,能够屏蔽对称型nat前后两次的端口不同引起的连接问题,提高了不同nat类型组合的连接成功率,通用性好,能够实现p2p通信在各种类型的nat中的穿越,从而保证p2p通信在nat网络中的顺畅进行。

进一步的,所述步骤s2包括:

触发或通知第三主机向第一主机发送信息,所述信息的ip头的源地址根据所述第一地址信息伪装为第二主机的ip地址和端口,对所述信息的目标端口的所有可能端口进行枚举,获取所述第一主机在对应的nat上的映射端口。

由上述描述可知,通过伪装成第二主机,并向发起连接的第一主机发送信息,其中,对信息中的目标端口的所有可能端口进行一一枚举,能够100%获取到正确的映射端口信息,保证了获取所述第一主机在对应的nat上的映射端口的准确性。

进一步的,对所述信息的目标端口的所有可能端口进行枚举,获取所述第一主机在对应的nat上的映射端口包括:

对所述信息的目标端口的所有可能端口进行枚举,判断所述信息是否到达所述第一主机的应用程序,若是,则所述信息对应的目标端口为所述第一主机向第二主机发起连接时在其对应的nat上的映射端口。

由上述描述可知,第三主机对第一主机在其对应的nat上的所有可能端口进行枚举,当枚举的端口符合第一主机在其对应的nat上的映射规则时,则对应的信息能够到达第一主机的应用程序,基于此,能够准确快速地判断出枚举的端口是否为第一主机向第二主机发起连接时在其对应的nat上的映射端口。

进一步的,所述触发或通知第三主机向第一主机发送信息,对所述信息的目标端口的所有可能端口进行枚举包括:

将所述信息的目标端口的所有可能端口分成预设段,触发或通知与所述预设段数目相同的第三主机分别向第一主机发送信息,每一第三主机分别对应枚举目标端口的一段端口,不同第三主机枚举的端口段不同。

由上述描述可知,通过对目标端口进行分段,每一段分别通过不同的第三主机进行枚举,能够快速地获知第一主机向第二主机发起连接时在其对应的nat上的映射端口,实现p2p通信在nat网络中的快速进行。

进一步的,还包括步骤:

s3、触发或通知所述第一主机将所述映射端口通过信令发送给所述第二主机,以使得所述第二主机根据所述映射端口向第一主机发起连接。

由上述描述可知,获取到第一主机向第二主机发起连接时在其对应的nat上的映射端口后,将其通过信令发送给第二主机,第二主机根据所述映射端口对第一主机发起连接,根据nat的工作机制,此时第二主机发送的信息能够达到第一主机的应该程序中,从而能够实现第一主机与第二主机之间的互通互联。

实施例一

上述获取nat上端口映射的方法能够适用于任何类型的nat,不管是锥形(cone)nat还是对称型(symmetric)nat,其中,第三主机统一由一个公网主机服务器进行管理,所述第三主机发送的信息被路由时,其ip头中的源地址ip不变,具体到本实施例中,当所述第三主机发送的信息经过nat时,其ip头中的源地址ip不变,第一主机peer1与第二主机peer2之间进行p2p通信,peer1连接nat1,peer2连接nat2,具体实现时,如图1所示,一种获取nat上端口映射的方法,包括步骤:

第一主机peer1向第二主机peer2发起连接后,由于peer2在其对应的nat2之后,peer1对于peer2相当于外部主机,其发起的连接为外部连接,根据nat的工作机制,其发起的连接在peer2对应的nat2处被丢弃,因此peer1与peer2并未成功连接;

在连接未成功后,peer1将peer1的地址信息和peer2的地址信息发送给公网主机服务器,所述peer1的地址信息包括peer1的公网ip地址,peer2的地址信息包括peer2的公网ip地址和端口号;

公网主机服务器接收到包括上述peer1的地址信息和peer2的地址信息的第一地址信息后,向其管理的第三主机分配任务和执行命令,触发或通知第三主机根据上述第一地址信息伪装成peer2,枚举并获取peer1在其对应的nat1上的映射端口。

实施例二

本实施例进一步限定了第三主机如何伪装并对peer1在其对应的nat1上的映射端口进行枚举:

具体的,第三主机接收到公网主机服务器发送的分配任务和执行命令后,伪装成peer2向peer1发送信息,通过raw套接字,伪装成peer2的公网ip信息,通过改变信息中的ip头的地址信息来实现伪装,ip头的具体结构如图3所示,从图3可以看到ip头包括源地址和目标地址,具体的,根据第一地址信息,将发送的信息的ip头的源地址伪装成peer2的ip地址和端口,所述信息的目标地址的ip地址为peer1的公网ip地址,对所述信息的目标端口的所有可能端口进行一一枚举,从而获取peer1在nat1的映射端口,比如:nat1的端口范围为1~65535,其中,1~1023的端口范围为系统预留使用的,则nat1的所有可能映射端口范围为1024~65535,则第三主机需要对1024~65535进行一一枚举,获取peer1在nat1的映射端口。

实施例三

本实施例进一步限定了如何判断第三主机枚举到的端口是peer1在nat1的映射端口,具体的:

对所述信息的目标端口的所有可能端口进行一一枚举,判断所述信息是否到达所述peer1的应用程序,若是,则所述信息对应的目标端口为peer1向peer2发起连接时在其对应的nat1上的映射端口;

如果枚举到的端口与peer1向peer2发起连接时在其对应的nat1上的映射端口相同,则所发送的信息能够到达peer1的应用程序里,当伪装的信息到达peer1的应用程序化,通过所述信息中的目标端口即可获知peer1向peer2发起连接时在nat1上的映射端口。

实施例四

本实施例进一步优化了对所述信息的目标端口的所有可能端口的枚举方法,具体的:

将所述信息的目标端口的所有可能端口分成预设段,触发或通知与所述预设段数目相同的第三主机分别向第一主机发送信息,每一第三主机分别对应枚举目标端口的一段端口,不同第三主机枚举的端口段不同;

举个例子,nat的所有可能端口范围为1024~65535,公网主机服务器一共管理了6个第三主机,则在进行具体任务分配时,可以将1024~65535范围的端口进行均分,分成6段,每一段分别分配一个第三主机进行相应段的端口号的递增枚举,比如1号第三主机负责枚举1024~11774范围的端口,其它第三主机以此类推,从而将1024~65535范围的端口平均地分配给6个第三主机进行分别枚举,可选的,也可以不用将公网主机服务器管理的所有第三主机均进行分配,可以根据实际情况需要进行目标端口范围的灵活分段并分配第三主机,被分配到的各个第三主机并行进行端口的枚举,并且若有某个第三主机率先枚举到正确的端口,则会通知其它第三主机停止枚举,通过多个第三主机伪装成peer2发送信息,而不是由peer2自己来进行枚举,一方面缩短了获取到nat上端口映射的时间,另一方面由于nat上的记录表大小是固定的,而要枚举的端口数量大,则会存在前面的端口映射信息会被覆盖,而达不到“打洞”的目的,其具体的流程如图4所示;

从图4可以看到,在第1步中peer1无法与peer2建立连接,其在第2步中向处于公网中的公网主机服务器发送自身的地址和peer2的地址,公网主机服务器对多个第三主机进行管理,构成第三主机群;

在第3步中公网主机服务器对其管理的各个第三主机分配任务,每个第三主机负责枚举一段端口号,实现对nat1上的所有可能的端口号的一一枚举;

若枚举到的端口号对应的信息能够到达peer1的应用程序,则表示该端口号为peer1向peer2发起连接时在nat1上的映射端口,则在第4步中将该端口号通过信令发送给peer2,即通过一信令服务器进行发送,信令服务器相当于一交换站,在发送端口号的同时还一并发送peer1的公网ip地址给peer2;

当枚举到的端口号对应的信息通过nat1到达peer1的应用程序后,也就是枚举的在nat上映射的端口正确时,peer1即收到了对应的具有主机伪装的信息,所述信息中包含了peer1的nat1为peer2映射的端口号,并且由于第三主机发送的信息被路由时,其ip头中的源地址ip不变,所以所述信息的ip头的源地址ip并不发生改变,仍然是peer2的ip地址,所以当peer1接收到该信息时,peer1即能够获知该信息是来自peer2的信息,所以可以据此将包含所述枚举正确的端口号及peer1的公网ip地址的信息发送给信令服务器,由信令服务器转发给peer2;

在获取到peer1向peer2发起连接时在nat1上的映射端口后,peer2基于该映射端口在第5步向peer1发送连接信息,该信息能够到达peer1的应用程序,从而实现了peer1与peer2之间的互联互通。

实施例五

请参照图2,一种获取nat上端口映射的系统1,包括存储器2、处理器3以及存储在所述存储器2上并可在所述处理器3上运行的计算机程序,所述处理器2执行所述计算机程序时实现上述实施例一至四任一个中的各个步骤,其中,所述系统可以是任意在公网上的能够管理第三主机的设备,比如公网主机服务器等。

综上所述,本发明提供的一种获取nat上端口映射的方法及系统,处于不同nat后的源主机和目标主机之间无法建立连接时,由源主机向处于公网的主机服务器发送源主机和目标主机相关的地址信息,由主机服务器触发或通知其管理的多个第三主机伪装成目标主机向源主机发送信息,所述第三主机发送的信息被路由时,其ip头中的源地址ip不变,每一个第三主机分别负责枚举一段源主机对应的nat的端口号,实现对源主机对应的nat的端口号的一一枚举,各个第三主机进行并行枚举,当发送的信息到达源主机的应用程序时,则信息中对应的端口号即为源主机向目标主机发起连接时在其对应的nat上的映射端口,信息中的源ip地址为目标主机的地址,据此可以触发或通知源主机将所述映射端口通过信令发送给目标主机,目标主机即可根据所述映射端口向源主机发起连接,并连接成功,从而在多个第三主机的作用下,可以达到并行加速连接的效果,保证了p2p通信在各种类型的nat网络中快速顺畅的进行,实现p2p通信在各种类型的nat中的穿越,通用性好。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1