【问题标题】:Python socket connect to server with port forwardingPython套接字通过端口转发连接到服务器
【发布时间】: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

标签: python sockets networking ip portforwarding


【解决方案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 都是准确的,以及客户端需要连接的内容。如果它不适合你,那么你没有正确设置你的环境,很可能是你在路由器上的端口转发
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 2023-04-05
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 2016-02-23
相关资源
最近更新 更多