为啥 socket.gethostbyname(socket.gethostname) 只绑定到本地 IP 地址?

Posted

技术标签:

【中文标题】为啥 socket.gethostbyname(socket.gethostname) 只绑定到本地 IP 地址?【英文标题】:Why does socket.gethostbyname(socket.gethostname) binds only to local ip address?为什么 socket.gethostbyname(socket.gethostname) 只绑定到本地 IP 地址? 【发布时间】:2020-06-27 16:13:58 【问题描述】:

我正在编写一个套接字程序来创建一个简单的服务器。 当我写ip = socket.gethostbyname(socket.gethostname()) 然后我打印 ip 它打印127.0.1.1 为什么这种情况不断发生? 我的设备已连接到移动热点连接,但 IP 地址仍然是本地主机。 我正在使用 ubuntu 19.04 操作系统

【问题讨论】:

【参考方案1】:

问题是主机有多个接口。使用真正的 DNS 或仔细手写的 /etc/host 文件不是问题,因为系统会在那里查找翻译。但是根据配置,主机名可以绑定到所有可用的接口,包括环回接口。并且gethostbyname 按自己的顺序返回这些接口中第一个的地址。

为了确保这一点,您应该使用gethostbyname_ex,它返回所有接口的列表,并且除了环回接口之外,您还应该找到已连接的hostspot。

【讨论】:

谢谢,这是为我做的。

以上是关于为啥 socket.gethostbyname(socket.gethostname) 只绑定到本地 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章

pyhon-----获取ip的两种方法

Python_sniffer(网络嗅探器)

saltstack+python批量修改服务器密码

python剑指网络

关于socket模块获取ip失败报错

基于socket的web服务器检测