【问题标题】: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 操作系统
【问题讨论】:
标签:
python
sockets
ubuntu
localhost
ip-address
【解决方案1】:
问题是主机有多个接口。使用真正的 DNS 或仔细手写的 /etc/host 文件不是问题,因为系统会在那里查找翻译。但是根据配置,主机名可以绑定到所有可用的接口,包括环回接口。并且gethostbyname 按自己的顺序返回这些接口中第一个的地址。
为了确保这一点,您应该使用gethostbyname_ex,它返回所有接口的列表,并且除了环回接口之外,您还应该找到已连接的hostspot。