我想测试 stun 客户端/服务器以及从服务器端到客户端发送 udp 流量。
我在本地计算机上运行 stun 客户端,得到以下结果。1。
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
- 在服务器端,我执行以下命令, echo "hello"|数控-w1-u 41.224.250.29 22944。
但是,在客户端我没有收到数据包。 有什么建议吗?
最佳答案
获取公网IP和端口后,需要匹配两边的端口并进行打洞步骤。
您运行了一个 stun 客户端,在本地端口 22948 上监听服务器(在端口 3478 上监听)。您从该端口向您的服务器发送了一个 stun 绑定(bind)请求。
服务器返回一个响应,表明您的公共(public) ip:port 是
41.224.250.29 22948。
现在您知道您的本地 IP(例如 192.168.1.2)映射到 41.224.250.29,本地端口 22948 映射到公共(public)端口 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
关于udp - 使用 STUN 将 UDP 发送到 nat 后面的客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40286563/