首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中获取本地网络域名?

问如何在Python中获取本地网络域名?
EN

Stack Overflow用户
提问于 2019-01-23 18:55:07
回答 3查看 2.5K关注 0票数 0

我有一个脚本,它在本地网络中提供了一组本地IPv4地址。我可以通过以下方式在Python2.7中获取这些I的主机名:

代码语言:javascript
复制
socket.gethostbyaddr(IP)

但是,这些主机名(如果已解析)将以以下形式返回:

代码语言:javascript
复制
hostname.local.companyname.com

对于这个值,我唯一感兴趣的信息是hostname。我想从完全限定的主机名中删除local.companyname.com域名。我可以找到所有解析的主机名的共同方面,然后以这种方式删除它们,但我想知道是否有任何方法可以直接查询本地域本身?

(编辑:这是在Ubuntu上运行)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-23 20:27:07

对于默认计算机域名,请尝试:

代码语言:javascript
复制
import socket

def get_dns_domain():
    return socket.getfqdn().split('.', 1)[1]

print get_dns_domain()
票数 1
EN

Stack Overflow用户

发布于 2019-01-23 21:12:29

Ubuntu喜欢将您的本地非限定主机名放在/etc/hosts中,其回送IP地址如下所示:

代码语言:javascript
复制
127.0.1.1   ubuntu-pc

这使得获取您的真实IP和域名变得非常困难。

一种解决方案是使用this answer获取您的真实(而不是环回) IP地址,然后查找此IP并使用其域:

代码语言:javascript
复制
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
myip = s.getsockname()[0]
s.close()
fqdn = socket.gethostbyaddr(myip)[0]
domain = fqdn.split('.', 1)[1]
print 'myip:', myip
print 'fqdn:', fqdn
print 'domain:', domain

它输出的内容类似于:

代码语言:javascript
复制
myip: 192.168.1.33
fqdn: fred-pc.my.domain
domain: my.domain
票数 1
EN

Stack Overflow用户

发布于 2019-01-31 22:11:28

代码语言:javascript
复制
>>> hostname = socket.gethostbyaddr(IP)[0].partition('.')[0]
>>> hostname
'myhost'

>>> hostname, domain = socket.gethostbyaddr(IP)[0].partition('.')[::2]
>>> hostname, domain
('myhost', 'here.example.com')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54325608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档