Python套接字:绑定到''vs socket.gethostname()

时间:2015-12-16 04:56:31

标签: python sockets networking port

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

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

与此相对:

sock.bind(('', 9999))

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

1 个答案:

答案 0 :(得分:2)

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

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

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

路由/防火墙/转发是一个单独的问题,因为侦听套接字是机器本地的,必须通过网络向外界公开:一旦连接获取来加工套接字绑定规则变得相关。