Как получить имя домена локальной сети в Python? - PullRequest
0 голосов
/ 23 января 2019

У меня есть скрипт, которому дается куча локальных IPv4-адресов в локальной сети.Я могу получить имена хостов этих IP-адресов в Python2.7 через:

socket.gethostbyaddr(IP)

Однако эти имена хостов (если разрешены) возвращаются в виде:

hostname.local.companyname.com

Единственная частьинтересующей меня информации с этим значением является hostname.Я хотел бы удалить доменное имя local.companyname.com из полного имени хоста.Я мог бы найти общие аспекты всех разрешенных имен хостов и затем удалить их таким образом, но мне интересно, есть ли какой-либо способ напрямую запросить сам локальный домен?

(правка: это выполняется наUbuntu)

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Ubuntu любит помещать ваше локальное неквалифицированное имя хоста в / etc / hosts с IP-адресом обратной петли, например:

127.0.1.1   ubuntu-pc

, что затрудняет получение вашего реального IP и домена.

Одним из решений является использование этого ответа для получения вашего реального (не петлевого) 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
0 голосов
/ 31 января 2019
>>> hostname = socket.gethostbyaddr(IP)[0].partition('.')[0]
>>> hostname
'myhost'

>>> hostname, domain = socket.gethostbyaddr(IP)[0].partition('.')[::2]
>>> hostname, domain
('myhost', 'here.example.com')
0 голосов
/ 23 января 2019

Для доменного имени компьютера по умолчанию Попробуйте:

import socket

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

print get_dns_domain()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...