gpt4 book ai didi

Python 套接字 : binding to '' vs socket. gethostname()

转载 作者:行者123 更新时间:2023-12-01 04:15:54 27 4
gpt4 key购买 nike

像这样绑定(bind)套接字有什么区别:

sock.bind((socket.gethostname(), 9999))

与此相比:

sock.bind(('', 9999))

根据 HOWTO,绑定(bind)到 socket.gethostname() 使套接字对外界可见。然而,它还表示绑定(bind)到 '' 使得机器碰巧拥有的任何地址都可以访问套接字。这是否意味着它也可以被外界访问?我的猜测是,绑定(bind)到 '' 允许从同一台机器内(通过环回)以及其他机器访问套接字,同时绑定(bind)到 socket.gethostname() 只允许来自其他机器的连接(包括同一台机器,但不通过环回接口(interface))。如果这是错误的,请告诉我。另外,如果我位于路由器后面,我是否仍然需要设置某种端口转发才能使用这两种绑定(bind)方法监听来自互联网的连接?或者绑定(bind)到 '' 允许我直接监听与我的公共(public) IP 的连接吗?谢谢。

最佳答案

绑定(bind)到 0.0.0.0''(又名“通配符地址”或 INADDR_ANY)将绑定(bind)到所有接口(interface),包括公共(public)的。

绑定(bind)到127.0.0.1('localhost')只会绑定(bind)到环回接口(interface)。

绑定(bind)到特定 IP 地址(根据 gethostname 结果解析)将仅接受与关联接口(interface)的连接。 (必须从同一台机器建立连接到已解析的 IP,而不是环回。)

路由/防火墙/转发是一个单独的问题,因为监听套接字位于计算机本地,必须通过网络向外界公开:一旦连接获取来处理套接字绑定(bind)规则变得相关。

关于Python 套接字 : binding to '' vs socket. gethostname(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34304206/

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