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

时间:2019-01-23 10:55:07

标签: python python-2.7 networking

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

socket.gethostbyaddr(IP)

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

hostname.local.companyname.com

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

(编辑:这在Ubuntu上运行)

3 个答案:

答案 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')