stun探测过程
来源:互联网 发布:綦美合 知乎 编辑:程序博客网 时间:2024/05/12 19:35
本文在之前的一片博文的基础上继续研究nat穿越
一、NAT种类细分
(1)Open Internet(公网开放):直接是Internet上一台主机,且free of UDP
(2)UDP Block(UDP阻隔):位于UDP防火墙之后
(3)Internet FireWall(公网防火墙):拥有公网IP,在防火墙之后,防火墙阻断外部的主动UDP访问
(4)Full Cone NAT(完全锥形):NAT内IP:Port映射同一外部IP:Port,且外部可以先主动访问
(5)Restricted Cone NAT(受限锥形):NAT内IP:Port映射同一外部IP:Port,外部不可先主动访问,需要内部先访问外部的IP:Port,外部访问内部只检查IP,不检查Port(即只有内部先访问的IP才能访问内部)
(6)Port Restricted Cone NAT(端口受限访问):NAT内IP:Port映射同一外部IP:Port,外部不可先主动访问,需要内部先访问外部IP:Port,外部访问内部需检查IP和Port(即只有内部先访问的IP:Port才能访问内部)
(7)Symmetric NAT(对称NAT):NAT内部IP:Port与要访问的外部IP:Port一一对应,外部不可先主动访问,需要内部先访问外部IP:Port,外部访问内部需检查IP和Port
注:同一映射和一一对应的区别:同一映射即内部的IP:Port不论访问什么样的外部IP:Port,都映射到同一外部IP:Port,而一一映射,则会根据内、外部的IP和Port的不同,映射的外部IP:Port也会不同
二、探测行为
探测行为
NAT(IP:PORT)
映射(IP:PORT)
访问方向
Stun Server(IP:PORT)
Test1
c1:c1
C To S
s1:s1
m1:m1
S To C
s1:s1
Test1#2
c1:c1
C To S
s2:s2
m2:m2
S To C
s2:s2
Test2
changeIP and changePort
c1:c1
C To S
s1:s1
m1:m1
S To C
s2:s2
Test3
changePort
c1:c1
C To S
s1:s1
m1:m1
S To C
s1:s2
三、探测策略
Step1:进行Test1探测行为,
若收不到响应,判别NAT为UDP Block类型;
若收到响应,比较(m1,m1)以及(c1,c1),仅比较IP即可,如果相同,本机连在公网,若不同,则位于NAT之后,需进一步探测
Step2.1:若本机连在公网,进行Test2。
若能收到响应,则为Open Internet类型;
若不能收到响应,则为Symmetric FireWall类型
Step2.2:若本机位于NAT之后,进行Test2,
若能收到响应,则为Full Cone NAT;
若不能收到响应,需进一步探测
Step3:进行Test1#2,比较(m1,m1)和(m2,m2)是否相同,
若不相同,则为Symmetric NAT类型;
若相同,需进一步探测
Step4:进行Test3,
若能收到响应,则为Restricted Cone NAT类型,
若不能收到响应,则为Port Restricted Cone NAT类型
- stun探测过程
- STUN协议,探测NAT类型(实现过程一)
- STUN协议,探测NAT类型
- STUN协议,探测NAT类型(个人理解)
- STUN解决的过程
- STUN解决的过程
- STUN
- stun
- stun
- stun
- linux内核启动设备探测过程
- 深入探测Linux cluster RPM 安装过程
- STUN在SIP中的工作原理及过程
- STUN在SIP中的工作原理及过程(转)
- STUN在SIP中的工作原理及过程
- STUN在SIP中的工作原理及过程
- STUN在SIP中的工作原理及过程(转载)
- STUN在SIP中的工作原理及过程
- Jenkins+Gradle+Android+多渠道包 (一)
- cocos2dx-js学习笔记、官方tests示例
- C语言中动态分配数组
- 使用MFC的CArray自定义数据类型,编译报错的解决方法
- SQL游标详解
- stun探测过程
- 微软收购R语言开发公司 强化云计算业务
- URL 和 URI 区别
- 设置PopWindow显示在某控件之上和无法获取PopWindow高度问题解决方法
- 解决 Android SDK无法下载和更新失败的问题
- 近场 远场 概念
- android studio1.01中导入library
- javascript中apply、call和bind的区别
- jquery事件的切换