我有一个脚本,它在本地网络中提供了一组本地IPv4地址。我可以通过以下方式在Python2.7中获取这些I的主机名:
socket.gethostbyaddr(IP)但是,这些主机名(如果已解析)将以以下形式返回:
hostname.local.companyname.com对于这个值,我唯一感兴趣的信息是hostname。我想从完全限定的主机名中删除local.companyname.com域名。我可以找到所有解析的主机名的共同方面,然后以这种方式删除它们,但我想知道是否有任何方法可以直接查询本地域本身?
(编辑:这是在Ubuntu上运行)
发布于 2019-01-23 20:27:07
对于默认计算机域名,请尝试:
import socket
def get_dns_domain():
return socket.getfqdn().split('.', 1)[1]
print get_dns_domain()发布于 2019-01-23 21:12:29
Ubuntu喜欢将您的本地非限定主机名放在/etc/hosts中,其回送IP地址如下所示:
127.0.1.1 ubuntu-pc这使得获取您的真实IP和域名变得非常困难。
一种解决方案是使用this answer获取您的真实(而不是环回) IP地址,然后查找此IP并使用其域:
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它输出的内容类似于:
myip: 192.168.1.33
fqdn: fred-pc.my.domain
domain: my.domain发布于 2019-01-31 22:11:28
>>> hostname = socket.gethostbyaddr(IP)[0].partition('.')[0]
>>> hostname
'myhost'
>>> hostname, domain = socket.gethostbyaddr(IP)[0].partition('.')[::2]
>>> hostname, domain
('myhost', 'here.example.com')https://stackoverflow.com/questions/54325608
复制相似问题