【问题标题】:Python socket bind to any IP?Python套接字绑定到任何IP?
【发布时间】:2011-12-23 10:18:43
【问题描述】:

我有一个小的单向消息发送器,当我在代码中指定要连接的 IP 时,它可以工作,但是,我无法让套接字接受来自任何 IP 的连接。这是问题所在。

mySocket = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
mySocket.bind ( ( '', 2727 ) )

'' 用于本地主机,如果我手动输入 IP,它可以工作,例如'192.168.1.106',但是,我怎样才能让它对所有人开放?还是我为此使用了错误的连接类型?

【问题讨论】:

    标签: python sockets


    【解决方案1】:

    如果您想绑定到所有可用的 IPv4 地址,请将0.0.0.0 指定为您的 IP 地址。如果您在路由器后面并且希望您的套接字可以访问互联网,而不仅仅是在您的 LAN 上可用,您需要设置端口转发规则,以便 LAN 外部的用户可以访问该服务。

    有关0.0.0.0 的更多信息,请参阅以下ServerFault 问题:https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1

    【讨论】:

    • 是否可以绑定到完全自定义的 ip,例如 152.64.87.9?
    • @CMCDragonkai 仅当您的系统具有与该地址的接口时。
    • 所以我需要在绑定到它们之前创建这些接口。创建虚拟接口会是环回,对吗?
    • 只有 IPv4 吗?绑定所有可用的 IPv6 地址怎么样?
    【解决方案2】:

    绑定到'''0.0.0.0' 具有相同的效果,可以更轻松地过渡到 IPv6。

    根据操作系统,打开socket.AF_INET6 套接字会侦听 IPv4 和 IPv6。

    【讨论】:

    • Python 错误报告,使文档更明确地说明这一点:bugs.python.org/issue33921
    • 根据docs'' 与 IPv6 兼容:此行为与 IPv6 不兼容,因此,您可能希望避免这些如果您打算在 Python 程序中支持 IPv6。
    【解决方案3】:

    绑定到 0.0.0.0 将允许它接受来自任何可以路由到它的 IPv4 地址的连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2023-02-12
      • 2012-06-15
      • 2016-07-05
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多