Python套接字通过端口转发连接到服务器

Posted

技术标签:

【中文标题】Python套接字通过端口转发连接到服务器【英文标题】:Python socket connect to server with port forwarding 【发布时间】:2021-10-13 12:56:43 【问题描述】:

我在路由器上打开了端口 4545 并将其转发到我的台式计算机的 IP 地址(例如 "101.102.103.104"),我希望另一个网络中的机器连接到我在 python 上创建的套接字服务器我的台式电脑。

我在笔记本电脑上编写了一个客户端脚本并将其连接到不同的网络。 现在,我怎样才能连接到我的 python 服务器?

台式机上的 Python 服务器:

import socket

server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
server.bind((socket.gethostname(), 4545))

server.listen(5)

client, address = server.accept()

client.send(b"Hello from server")

另一个网络上的 Mt 笔记本电脑上的 Python 客户端:

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client.connect(("101.102.103.104", 4545)) # "101.102.103.104" is the desktop computer public ipv4 IP address

print(client.recv(24).decode())

服务器工作正常,但是如何将客户端连接到我的服务器?

【问题讨论】:

你必须连接到路由器的公共地址,而不是计算机的地址。 感谢您的帮助,我已尝试这样做。如何找到我的路由器 IP? ipconfig 没有显示路由器的公共 IP 您从路由器本身获取它。您也可以使用类似 whatismyip.com 的网站 网站只显示我机器的IP。我找不到路由器。无论如何,我现在会尝试从路由器中找到IP 【参考方案1】:

您可以使用http://whatsmyrouterip.com/#routerPublicIP 之类的网站来查找路由器的公共路由。转到上面的网站将显示您的路由器公共 ip 以及它的私有 ip 以及一些路由器信息。

【讨论】:

我遇到了一个错误。我需要写 ipv4 IP,而不是 ipv6。如何获取路由器的公共 ipv4 IP? @איתמרשיאון 您真的应该在路由器的配置中查找其 IP。但是像上面提到的那些网站也应该能够很好地展示它。但是,如果您的路由器没有 IPv4 WAN IP,只有 IPv6 WAN IP,那么客户端将不得不使用 IPv6 (AF_INET6) 而不是 IPv4 (AF_INET) 连接到您的路由器。 它不适用于 ipv6。但是,我想我必须打电话给我的互联网服务并要求他们提供我的 IP 大多数用户的动态 IP 会随时间变化,因此询问互联网提供商当前的 IP 可能没有帮助。此外,如果您涉及提供商,他们可能会决定向您收取额外费用以在他们的系统上运行服务器。您可以相信 whatismyip.com 等网站报告的任何公共 IP 都是准确的,以及客户端需要连接的内容。如果它不适合你,那么你没有正确设置你的环境,很可能是你在路由器上的端口转发

以上是关于Python套接字通过端口转发连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

端口已转发,但仍无法连接到 XAMPP

RMongo:使用端口转发连接到 mongoDB

使用 SSH 隧道实现端口转发SOCKS 代理

无法连接到 WebSocket 服务器。不知道为啥

连接到公共 IP 地址的 Java 套接字

如何从不同网络上的android连接到本地apache服务器?(端口转发)