129

我需要找到一个 UNIX 主机的主机名,该主机的 IP 已知,无需登录该 UNIX 主机

4

11 回答 11

168

使用nslookup

nslookup 208.77.188.166 
...
Non-authoritative answer:
166.188.77.208.in-addr.arpa     name = www.example.com.
于 2009-03-18T09:15:27.687 回答
76

您也可以使用 进行反向 DNS 查找host。只需给它 IP 地址作为参数:

$ host 192.168.0.10
server10 has address 192.168.0.10
于 2009-03-18T09:43:53.000 回答
44

另一个可用于反向查找的 NS 查找实用程序dig带有以下-x选项:

$ dig -x 72.51.34.34

; <<>> DiG 9.9.2-P1 <<>> -x 72.51.34.34
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12770
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1460
;; QUESTION SECTION:
;34.34.51.72.in-addr.arpa.      IN      PTR

;; ANSWER SECTION:
34.34.51.72.in-addr.arpa. 42652 IN      PTR     sb.lwn.net.

;; Query time: 4 msec
;; SERVER: 192.168.178.1#53(192.168.178.1)
;; WHEN: Fri Jan 25 21:23:40 2013
;; MSG SIZE  rcvd: 77

或者

$ dig -x 127.0.0.1

; <<>> DiG 9.9.2-P1 <<>> -x 127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11689
;; flags: qr aa ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 10      IN      PTR     localhost.

;; Query time: 2 msec
;; SERVER: 192.168.178.1#53(192.168.178.1)
;; WHEN: Fri Jan 25 21:23:49 2013
;; MSG SIZE  rcvd: 63

引用dig 联机帮助页

反向查找(将地址映射到名称)通过 -x选项进行了简化。addr 是点分十进制表示法的 IPv4 地址,或冒号分隔的 IPv6 地址。使用此选项时,无需提供名称、类和类型参数。dig 会自动查找类似 11.12.13.10.in-addr.arpa 的名称,并将查询类型和类分别设置为 PTR 和 IN。

于 2013-01-25T20:26:38.683 回答
27

对于 Windows ping -a 10.10.10.10

于 2014-02-13T11:59:04.293 回答
18
  • 对于 Windows,请尝试:

    NBTSTAT -A 10.100.3.104
    

    或者

    ping -a 10.100.3.104
    
  • 对于 Linux,请尝试:

    nmblookup -A 10.100.3.104
    

它们几乎相同。

于 2014-11-21T06:12:36.843 回答
10
python -c "import socket;print(socket.gethostbyaddr('127.0.0.1'))"

如果您只需要名称,不需要其他信息,请在末尾添加 [0]:

python -c "import socket;print(socket.gethostbyaddr('8.8.8.8'))[0]"
于 2015-10-21T10:28:23.813 回答
9

这取决于上下文。我认为您指的是操作系统的主机名(hostname在您登录时返回)。该命令仅用于内部名称,因此查询机器名称需要不同的命名系统。有多个系统使用名称来识别主机,包括 DNS、DHCP、LDAP (DN)hostname等,并且许多系统使用zeroconf在多个命名系统之间同步名称。出于这个原因,结果hostname有时会匹配来自dig(见下文)或其他命名系统的结果,但通常它们不会匹配。

DNS是迄今为止最常见的,在互联网(如google.com. A 216.58.218.142)和家庭(mDNS/LLMNR)中都使用,所以这里是执行反向 DNS 查找dig -x <address>的方法:(nslookup并且host更简单,提供的细节更少,甚至可能返回不同的结果;但是,dig不包含在 Windows 中)。

请注意,CDN中的主机名不会解析为规范域名(例如“google.com”),而是您查询的主机 IP 的主机名(例如“dfw25s08-in-f142.1e100.net”;有趣的花絮: 1e100 是 1 古戈尔)。

另请注意,DNS 主机可以有多个名称。这对于具有多个网络服务器(虚拟主机)的主机来说很常见,尽管由于虚拟化技术的普及,这种情况变得越来越少。这些主机有多个 PTR DNS 记录

最后,请注意,本地计算机可以通过/etc/hosts覆盖 DNS 主机记录。如果您没有得到您期望的主机名,请务必检查此文件。

DHCP主机名的查询方式因使用的 DHCP 服务器软件而异,因为(据我所知)该协议没有定义查询方法;但是,大多数服务器都提供了某种方式来执行此操作(通常使用特权帐户)。

注意 DHCP 名称通常与 DNS 服务器同步,因此通常会在 DHCP 客户端最小表和 DNS 服务器的 A(或 IPv6 的 AAAA)记录中看到相同的主机名。同样,这通常作为 zeroconf 的一部分完成。

另请注意,仅仅因为客户端存在 DHCP 租约,并不意味着它仍在使用中。

用于 TCP/IP (NBT)的 NetBIOS 几十年来一直用于执行名称解析,但后来被 LLMNR 取代用于名称解析(Windows 上 zeroconf 的一部分)。仍然可以使用nbtstat(Windows) 或nmblookup(Linux) 查询此遗留系统。

于 2016-01-19T20:49:45.513 回答
2

这里的其他答案是正确的 - 使用反向 DNS 查找。如果您想通过脚本语言(Python、Perl)来实现,您可以使用 gethostbyaddr API。

于 2009-03-18T09:46:31.183 回答
0

如果您正在寻找 Windows 机器,请尝试以下命令:

nbtstat -a 10.228.42.57
于 2015-10-30T04:25:46.673 回答
-1

您也可以使用 traceroute 命令。

http://linux.die.net/man/8/traceroute

只需使用 traceroute 它会向您显示带有主机名的路由路径(IP 已解析)

于 2009-03-18T09:35:22.287 回答
-2

在大多数情况下,traceroute 命令可以正常工作。nslookup 和 host 命令可能会失败。

于 2012-01-30T04:51:10.817 回答