socket.getfqdn()不返回任何域,但是socket.gethostname()可以吗?

时间:2019-06-04 11:22:17

标签: python fqdn

我不明白:

Python 2.7.3 (default, Apr 14 2012, 08:58:41) [GCC] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.getfqdn()
'SR-MW001'
>>> socket.gethostname()
'sr-mw001.foo-domain.de'

这是怎么了?

根据socket.getfqdn()的文档,应返回“完全合格的域名”。

更新

更多信息:

/ etc / hosts

sr-mw001:~ # grep -iP 'SR-MW001|localhost|foo-domain' /etc/hosts
127.0.0.1       localhost
::1             localhost ipv6-localhost ipv6-loopback
10.189.217.11   SR-MW001 foo-work

IP

sr-mw001:~ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:50:56:a8:6e:eb brd ff:ff:ff:ff:ff:ff
    inet 10.189.217.11/24 brd 10.189.217.255 scope global eth0
       valid_lft forever preferred_lft forever

socket.gethostbyaddr()

>>> socket.gethostbyaddr('sr-mw001.stadtwerke-gt.de')
('SR-MW001', ['foo-work'], ['10.189.217.11'])

更多详细信息:

> uname -n
sr-mw001.foo-domain.de

> hostname
sr-mw001.foo-domain.de

> domainname
(none)

> nisdomainname
-bash: nisdomainname: command not found

> dnsdomainname
foo-domain.de

> ypdomainname
-bash: ypdomainname: command not found

相关问题:/etc/HOSTNAME on SuSE: short name or FQDN?

2 个答案:

答案 0 :(得分:2)

检查socket.gethostbyaddr('sr-mw001.foo-domain.de')在您的计算机上返回什么。

getfqdn()的实现依赖于此:
https://github.com/python/cpython/blob/2.7/Lib/socket.py#L128-L151

如果gethostbyaddr()返回的主机名没有域,也没有别名,那么该主机名将由getfqdn()返回。


问题中的更新信息表明我的猜测已经接近。导致此行为的是您的/etc/hosts中没有域的条目。我相信以下问答可以解决此问题: https://unix.stackexchange.com/a/77924


还考虑升级您的Python安装。版本2.7.3是2012年的版本,最新的2.7的修订级别是2.7.16。 getfqdn()没有任何变化,但是我没有检查gethostbyaddr()或可能调用了哪些其他函数。

答案 1 :(得分:2)

/etc/hostname的简称(不合格)应为sr-mw00。来自文件的名称在启动时被推送到内核中,并且应该在uname中看到。

然后/etc/hosts应该有一个这样的条目:

127.0.1.1    sr-mw001.foo-domain.de sr-mw001

这会将sr-mw001.foo-domain.de设置为规范名称,其中sr-mw001是别名。

hostname应该输出简称。 hostname --fqdn应该输出完整的规范名称。

当系统具有DHCP分配的IP地址时,Debian安装程序将使用127.0.1.1

如果系统具有静态IP地址,则应改用该地址。这样可以确保系统还可以从其IP地址(反向查找)确定其FQDN。

在从python检查之前,请确保这些命令正常工作。