为啥 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 地址?的主要内容,如果未能解决你的问题,请参考以下文章