使用STUN将UDP发送到nat后面的客户端

时间:2016-10-27 13:57:34

标签: udp stun

我想测试stun客户端/服务器以及从服务器端向客户端发送udp流量。

我在本地机器上运行stun客户端,得到以下结果。

Lenovo-Z50-70:~/iop-bb$ stun -v my_stun_server
STUN client version 0.96
Opened port 22948 with fd 3
Opened port 22949 with fd 4
Encoding stun message: 
Encoding ChangeRequest: 0

About to send msg of len 28 to 212.227.107.179:3478
Encoding stun message: 
Encoding ChangeRequest: 4

About to send msg of len 28 to 212.227.107.179:3478
Encoding stun message: 
Encoding ChangeRequest: 2

About to send msg of len 28 to 212.227.107.179:3478
Received stun message: 88 bytes
MappedAddress = 41.224.250.29:22948
SourceAddress = 212.227.107.179:3478
ChangedAddress = 127.0.0.1:3479
XorMappedAddress = 41.224.250.29:22948
ServerName = Vovida.org 0.96
Received message of type 257  id=1
  1. 在服务器端,执行以下命令,echo" hello" | nc -w1 -u 41.224.250.29 22944。
  2. 但是,在客户端,我没有收到数据包。 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您需要匹配两侧的端口,并在获得公共IP和端口后执行打孔步骤。

您运行了一个stun客户端,侦听本地端口22948到服务器(侦听端口3478)。您从该端口向服务器发送了一个眩晕绑定请求请求。

服务器回复了一个响应,表明你的公共IP:端口是
41.224.250.29 22948。

所以现在您知道您的本地IP(例如192.168.1.2)映射到41.224.250.29而您的本地端口22948映射到公共端口22948.

理论上,您可以开始在客户端端口22948和服务器3478之间进行通信,但服务器已在使用3478。您需要使用从STUN响应中获得的相同端口进行打孔步骤。

与您的其他服务的打孔步骤是这样的。客户端从端口22948发送到服务器(例如端口9876)。

echo "hello there" | nc -p 22948 server 9876 

服务器可以回复:

echo "I see you" | nc -p 9876 41.224.250.29 22948

答案 1 :(得分:0)

  

在服务器端,我执行以下命令,echo" hello" | nc -w1 -u 41.224.250.29 22944

这是否先从该客户端收到任何数据包或使用地址" 41.224.250.29 22944"?如果不是,客户端NAT将不允许此传入流量,除非它是全锥NAT。客户端正在使用准备接收来自该外部源的任何数据包的套接字也很重要。基本上,您必须确保该外部源的绑定。