如何在不登录主机的情况下通过IP找到主机名

130

我需要在不登录UNIX主机的情况下找到已知IP的UNIX主机的主机名。


20
"NBTSTAT -A 10.10.10.10" 是 Windows 操作系统中的命令,用于查看 IP 地址为 10.10.10.10 的主机的 NetBIOS 名称表。 - Kanagavelu Sugumar
2
你会接受一个答案吗? - Paolo Stefan
2
@PaoloStefan 如果用户最后一次出现在2009年,那么这是一个高度不可能的事件。 - Boris Treukhov
这个回答解决了你的问题吗?如何从IP地址获取主机名(Linux)? - Ilya Kharlamov
12个回答

170

使用 nslookup

nslookup 208.77.188.166 
...
Non-authoritative answer:
166.188.77.208.in-addr.arpa     name = www.example.com.

2
在CentOS安装中,您需要首先运行sudo yum install bind-utils。这将为您安装nslookup查找工具。 - lfender6445
nslookup已经被弃用。您可以使用“dig”或“host”代替。 - P. Barbadew

76

你也可以使用 host 进行反向 DNS 查找。只需将 IP 地址作为参数传递即可:

$ host 192.168.0.10
server10 has address 192.168.0.10

44

另一个可用于反向查询的NS查找工具是带有-x选项的dig

$ 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 manpage

通过-x选项,反向查找——将地址映射为名称——变得更加简单。addr是一个使用点分十进制表示法的IPv4地址,或者是使用冒号分隔符的IPv6地址。当使用此选项时,无需提供名称、类和类型参数。dig会自动查询像11.12.13.10.in-addr.arpa这样的名称,并将查询类型和类设置为PTR和IN。


27

在Windows上使用ping -a 10.10.10.10


19
  • 对于Windows,请尝试:

NBTSTAT -A 10.100.3.104
或者
ping -a 10.100.3.104
  • 对于Linux,尝试:

    nmblookup -A 10.100.3.104
    
  • 它们几乎相同。


    2
    nmblookup 运行得非常好,我并不是在寻找 Web 服务器的主机名,而是那些正在做它们不应该做的事情的计算机。这不仅暴露了 Windows 主机名,还有接下来我要查找的 Mac 地址! - FreeSoftwareServers
    在Ubuntu中没有nmblookup包。你指的是哪个Linux版本?你是不是想说“nslookup”? - Dipu

    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]"
    

    它说,无效的语法突出显示套接字。 - Sandeep Roy
    1
    对于Python3,将print更改为带括号的函数:python -c "import socket;print(socket.gethostbyaddr('10.16.7.10'))" - Corey Goldberg

    10
    这取决于上下文。我想你指的是操作系统的主机名(当您登录时由hostname返回)。这个命令仅用于内部名称,因此要查询机器的名称需要不同的命名系统。有多个系统使用名称来标识主机,包括DNS、DHCP、LDAP(DN)、hostname等,许多系统使用zeroconf在多个命名系统之间同步名称。因此,hostname的结果有时会与dig(请参见下文)或其他命名系统的结果匹配,但通常不匹配。

    DNS是目前最常见的解析方式,既用于互联网(例如google.com. A 216.58.218.142),也用于家庭网络中的mDNS/LLMNR。以下是如何执行反向DNS查询的方法:dig -x <address>nslookuphost更简单,提供的信息更少,甚至可能返回不同的结果;但是,在Windows中不包括dig)。

    请注意,CDN中的主机名将无法解析为规范的域名(例如“google.com”),而是查询的主机IP的主机名(例如“dfw25s08-in-f142.1e100.net”;有趣的小知识:1e100是1个谷歌)。

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

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

    DHCP主机名的查询方式取决于使用的DHCP服务器软件,因为(据我所知)该协议没有定义一种用于查询的方法;然而,大多数服务器都提供了一些方法来完成这个任务(通常需要特权帐户)。

    请注意,DHCP名称通常与DNS服务器同步,因此在DHCP客户端列表和DNS服务器的A(或AAAA用于IPv6)记录中看到相同的主机名是很常见的。同样,这通常是作为零配置的一部分完成的。

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

    NetBIOS for TCP/IP (NBT)被用了几十年来执行名称解析,但现在已经被LLMNR 用于名称解析(Windows上的zeroconf的一部分)所取代。这个传统系统仍然可以通过nbtstat(Windows)或nmblookup(Linux)进行查询。


    @John Syrinek,您能详细说明一下DHCP主机名查询吗?我想通过IP查询另一台机器(在同一个WLAN中)的主机名,这可能吗? - jfly

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

    0
    如果您特别需要Windows机器,请尝试以下命令:
    nbtstat -a 10.228.42.57
    

    0

    对于仅安装有 curl 用于网络工具的最小发行版/映像:

    curl --write-out '%{remote_ip}' localstack:4566
    

    生成,例如:

    172.18.0.3

    注意:

    在Windows中,百分号(%)符号是用于扩展环境变量的特殊符号。在批处理文件中,使用此选项时,所有出现的%必须加倍以正确转义。如果在命令提示符下使用此选项,则无法转义%,可能会发生意外扩展。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接