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

标签 udp stun

我想测试 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/

    相关文章:

    java - 如何使用 java 创建我自己的 STUN 或 TURN 服务器

    C++ UDP 服务器在获取客户端地址配置时发送消息

    c++ - VSOMEIP - 2 个设备之间的通信 (TCP/UDP) 不工作

    c++ - 在 netfilter 模块中重新注入(inject)修改后的数据包

    webrtc - STUN 服务器地址不兼容 |错误代码=701 :

    android - 为 Android 编译 libnice

    webrtc - 为 WebRTC 应用程序实现我们自己的 STUN/TURN 服务器

    python - 在python中断开UDP套接字?

    sockets - 用于进程间通信的 UDP

    c# - 用于 TCP 流的 STUN 服务器