从Linux中的IP地址获取主机名
1. 概述
有时我们需要从 Linux 中的 IP 地址获取主机名。这可能是一个简单的操作,但需要考虑不同的场景。在本教程中,我们将看看这些情况以及如何使用一些有用的命令来处理它们。
2. 从公共 IP 地址获取主机名
如果**主机具有公共 IP 地址和有效的反向 DNS 条目,*我们可以使用命令host *或dig 。
2.1.使用命令host
host命令执行 DNS 查找以将名称转换为 IP 地址,反之亦然。
让我们尝试一个例子:
$ host 8.8.8.8
8.8.8.8.in-addr.arpa domain name pointer dns.google.
在此示例中,我们使用命令host来获取 IP 地址8.8.8.8(Google DNS)的主机名。
2.2. 使用命令dig
dig命令是一种用于执行 DNS 查找并显示从被查询的名称服务器返回的答案的工具。
现在,要查询 IP 地址,我们需要使用选项*-x*:
$ dig -x 8.8.8.8
; <<>> DiG 9.16.15-Ubuntu <<>> -x 8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2113
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;8.8.8.8.in-addr.arpa. IN PTR
;; ANSWER SECTION:
8.8.8.8.in-addr.arpa. 68312 IN PTR dns.google.
;; Query time: 35 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Wed Apr 13 22:53:53 CEST 2022
;; MSG SIZE rcvd: 73
dig命令的默认输出包含比host命令更多的信息。但是,dig提供了自定义选项。例如:
$ dig -x 8.8.8.8 +noall +answer
8.8.8.8.in-addr.arpa. 68159 IN PTR dns.google.
第一个选项*+noall删除输出中的所有行,然后我们将答案部分包含在选项+answer*中。
3. 从 LAN 上的 IP 地址获取主机名
当我们需要**在同一 LAN 上获取机器的主机名并且没有反向 DNS 时,*我们可以使用类似nmblookup 、nbtscan 或avahi-resolve 的命令。前两个命令用于查找NetBIOS 名称。最后一个用于使用Avahi *守护程序进行查找:
- Windows 和 Linux(带有Samba )设备使用NetBIOS来发布它们的地址。
- macOS、Windows 10+ 和 Linux(运行avahi-daemon )设备使用Avahi通过多播 DNS 发布其地址。
3.1. 使用命令nmblookup
nmblookup命令查询NetBIOS名称并将它们映射到网络中的 IP 地址。
与其他命令类似,我们需要使用一个选项来使用 IP 地址作为参数:
$ nmblookup -A 192.168.1.142
Looking up status of 192.168.1.142
WORKGROUP <00> - <GROUP> B <ACTIVE>
LAPTOP-PQCDJ0QF <00> - B <ACTIVE>
MAC Address = E8-48-B8-8E-CA-4A
正如您在前面的示例中看到的,nmblookup命令可以显示给定 IP 地址的主机名、工作组和 MAC 地址。
3.2. 使用命令nbtscan
与nmblookup 不同,nbtscan命令以人类可读的形式显示接收到的NetBIOS信息。
让我们尝试相同的 IP 地址:
$ nbtscan 192.168.1.142
Doing NBT name scan for addresses from 192.168.1.142
## IP address NetBIOS Name Server User MAC address
192.168.1.142 LAPTOP-PQCDJ0QF <unknown> e8:48:b8:8e:ca:4a
nbtscan命令以“表格”格式返回输出,因为这样更易于阅读,而且我们也可以查询 IP 地址范围。
3.3. 使用命令avahi-resolve
avahi-resolve命令使用Avahi 守护程序解析一个或多个 mDNS/DNS 主机名。
用法与其他命令类似:
$ avahi-resolve -a 192.168.1.142
192.168.1.142 LAPTOP-PQCDJ0QF.local
在这种情况下,返回的输出仅显示 IP 地址及其主机名。