【问题标题】:How to determine outgoing port in Python through NAT如何通过 NAT 确定 Python 中的传出端口
【发布时间】:2014-04-24 14:34:47
【问题描述】:

我正在研究通过 UDP 将数据从一个程序发送到已知 IP 和端口的另一个程序。已知 IP 和端口的程序接收来自原始 IP 的消息,但由于 NAT,端口被隐藏(类似于 30129)。已知 IP 和端口的程序想要向查询程序发送确认和/或信息。它可以将其发送回原始 IP 和隐藏的端口号。但是查询程序如何知道要监控哪个端口才能重新打开它呢?或者,有没有办法(这是 Python)说“通过端口 3200 将其发送到端口 7000 上的已知 IP(1.2.3.4)?这样已知 IP/端口可以响应端口 30129,但它会得到重定向到查询程序知道要监视的 3200。任何帮助表示赞赏。不,TCP 不是一个选项。

【问题讨论】:

    标签: python sockets udp port nat


    【解决方案1】:

    简单的答案是你不在乎什么是“真正的”(即:pre-natted)端口。只需回复 nat 查询并允许 nat 处理传递结果。如果您绝对必须知道源 UDP 端口,请在您的 UDP 数据包中包含该信息——但我强烈建议您不要这样做。

    【讨论】:

    • 也许我说错了。监视器(具有固定 IP 和已知端口的监视器)实际上响应 nat 生成的端口。我的问题是如何在另一端(原始查询端)获取答案。它向监视器发送了一条消息,监视器响应了 NAT 端口,查询程序正在等待答案,但不知道它将进入哪个端口。或者有没有办法让它控制它在哪个端口上输出?
    【解决方案2】:

    好的,我想通了 - 诀窍是使用相同的 sock 对象来接收您过去发送的。至少在最初的实验中,这似乎起到了作用。感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 1970-01-01
      • 2013-03-20
      • 2016-12-14
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      相关资源
      最近更新 更多