java - 如何通过NAT通过公网IP发送UDP数据包?

标签 java c udp nat

我有一个在我的专用网络上运行的 UDP 服务器。我有一个超出 NAT 的设备,它通过公共(public) IP 将 UDP 数据包发送到我的服务器。我能够接收 UDP 数据包,解析它们,并且可以查看有效负载、源端口和目标端口。现在我需要向该设备发送 ACK 消息,以便捕获 IP 和端口号并向其发送 UDP 数据包。但我无法查看该设备中的任何 UDP 数据包。

我的问题是,由于我的设备超出了 NAT,我获得的 IP 地址和端口号是 NAT 的还是实际设备的?

如何通过 NAT 将 UDP 数据包发送到该设备?

最佳答案

My question is as my Device is beyond NAT the IP address and port number I am getting is NAT's or the actual device's ?

您从数据包中识别出的 IP 和端口是 NAT 为客户端创建的映射。简单来说就是设备所连接的NAT的IP和端口。

How to send the UDP packet to that device through NAT ?

您需要回复服务器从客户端收到的数据包中检测到的 IP 和端口。 更清楚地说,您需要实现UDP Holepunching

我想您应该首先了解有关连接到在 NAT 下工作的设备的网络问题。各种RFC可用于NAT穿越UDP打洞

以下是一些来源:

http://en.wikipedia.org/wiki/Network_address_translation

http://en.wikipedia.org/wiki/UDP_hole_punching

https://www.rfc-editor.org/rfc/rfc4787

https://www.rfc-editor.org/rfc/rfc5128

关于java - 如何通过NAT通过公网IP发送UDP数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840514/

相关文章:

java - 如何只从文件中读取相关信息而忽略其他所有信息?

java - Spring 批处理 : Specifying chunk size for processing List of Lists

c - 如何静态初始化结构数组?

c - 在灰度像素图像中绘制矩形

c - Windows套接字程序未收到udp数据

java - 如何为 Java 套接字指定端口范围?

java - 是否可以修改一个非 volatile 变量,使另一个线程能够 "see"更新?

c - c中 `putw`和 `getw`函数有什么用?

c - 拦截到自定义 UDP 服务器的系统日志日志流量

java - Android InflateException FloatingActionButton