gpt4 book ai didi

Python端口转发

转载 作者:太空狗 更新时间:2023-10-30 00:32:03 31 4
gpt4 key购买 nike

我正在用 python 开发一个客户端-服务器游戏,我想了解更多关于端口转发的信息。

例如,我正在做的是转到我的路由器 (192.168.0.1) 并将其配置为允许将对我的真实 IP 地址的请求重定向到我的本地地址 192.168 .0.X. 效果很好。但我想知道我是否可以通过自动编码来做到这一点?

我认为 Skype 的工作方式类似于一种 p2p,我可以在我的路由器中看到 Skype 会自动将端口转发到我的电脑地址。我也可以用 Python 做吗?

最佳答案

这里有不同的解决方案,但大多数都不是微不足道的,您必须阅读一些内容,并且需要某种后备方案。


UPnP/IGD是最简单的。如果您的路由器支持它,并且配置为允许它,并且您知道如何编写低级网络代码或老式的 SOAP Web 服务代码,您可以要求路由器为您分配一个端口。如果它响应成功,则开始使用该端口,您基本上就完成了。


如果您可以运行一个(非常低带宽的)服务器,并为所有用户提供一个公共(public)地址,Hole punching可能会解决问题。

想一想 NAT 后的客户端如何与公共(public)服务器通信。您向某个 IP 和端口发出请求,但服务器看到的是您路由器的 IP,而不是您的(这是一件好事,因为您的 IP 不可访问)。当它回复时,您的路由器必须知道将它转发给您——它只是通过记住您是刚刚向该服务器发送请求的 NAT 客户端来做到这一点。

如果您不与公共(public)服务器对话,而是与他自己单独的 NAT 后面的其他对等点对话,会怎样?好吧,您的路由器不知道其中的区别;只要你从同一个地方得到回应,它就会通过。但是,当您的消息无法通过他的 NAT 时,您如何获得响应?当然,他也做同样的事情。其中一条消息可能会丢失,但另一条消息会通过,然后你们就可以进行通信了。您需要定期发送 keep-alives,这样路由器就不会忘记您正在通信,但除此之外,真的没有什么棘手的。

唯一的问题是您需要知道对方的公共(public) IP 地址,以及他希望您来自的端口,他也需要知道关于您的信息。这就是为什么您需要一台服务器 — 充当同行之间的介绍人。

打洞将适用于大多数家庭网络的 UDP。它不适用于来自许多家庭网络的 TCP,或者来自许多公司网络的 UDP 或 TCP。 (此外,在企业网络中,您可能有多层 NAT,这意味着您需要在每个接口(interface)上使用引入器,而不是在 Internet 上只需要一个引入器,或者是无法打洞的对称 NAT。)


您可以使用 STUN (或类似的)服务,如 ICE 或 TURN。这仅在有 ICE、TURN 等服务可供使用时才有效——这通常不适用于不同家庭 NAT 上的两个对等点,除非您部署自己的服务器并构建一个介绍者来提供帮助,并且如果您是要做到这一点,你可以只使用打洞。但在企业环境中,这可能是为 P2P 应用程序提供连接的最佳方式。


最后,您可以让用户手动配置端口转发,并将转发的端口号输入到您的问题中。这并不理想,但您应该始终将其作为后备方案提供(可能仅适用于企业部署的应用程序除外),因为没有其他方法适用于您的所有用户。


我相信 Skype 使用了所有这些。如果您启用 UPnP,它会尝试 IGD 您的路由器。或者您可以将其配置为使用 TURN 服务器。或者您可以只输入您手动转发的特定端口。如果您不执行上述任何操作,它会尝试使用 UDP 打洞,并使用 Skype 运行的介绍器。

关于Python端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069005/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com