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套接字通过端口转发连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章