我有一个脚本,该脚本在本地网络中提供了一堆本地IPv4地址。我可以通过以下方式在Python2.7中获得这些IP的主机名:
socket.gethostbyaddr(IP)
但是,这些主机名(如果已解析)以某种形式返回:
hostname.local.companyname.com
与此值有关的我唯一感兴趣的信息是hostname
。我想从完全限定的主机名中删除local.companyname.com
域名。我可以找到所有解析的主机名的共同点,然后以这种方式删除它们,但是我想知道是否有任何方法可以直接查询本地域本身?
(编辑:这在Ubuntu上运行)
答案 0 :(得分:1)
对于默认计算机域名,请尝试:
import socket
def get_dns_domain():
return socket.getfqdn().split('.', 1)[1]
print get_dns_domain()
答案 1 :(得分:0)
Ubuntu喜欢将本地不合格的主机名放在具有这样的环回IP地址的/ etc / hosts中:
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
答案 2 :(得分:0)
>>> hostname = socket.gethostbyaddr(IP)[0].partition('.')[0]
>>> hostname
'myhost'
>>> hostname, domain = socket.gethostbyaddr(IP)[0].partition('.')[::2]
>>> hostname, domain
('myhost', 'here.example.com')