如何在不登录主机的情况下从IP查找主机名


Answers:


163

使用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已弃用。你可以使用“挖”或“主机”,而不是
P. Barbadew

74

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

$ host 192.168.0.10
server10 has address 192.168.0.10

43

可以用于反向查找的另一个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。



17
  • 对于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

9
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 '18年

7

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

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

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

另请注意,DNS主机可以具有多个名称。对于具有多个Web服务器的主机(虚拟主机),这是很常见的,尽管由于虚拟化技术的普及,这种情况已变得越来越少。这些主机具有多个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)查询该旧系统。


@John Syrinek您能详细说明DHCP主机名查询吗?我想通过IP查询另一台计算机(在同一局域网中)的主机名,这可能吗?
jfly

2

此处的其他答案是正确的-使用反向DNS查找。如果要通过脚本语言(Python,Perl)进行操作,则可以使用gethostbyaddr API。




-1

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


4
这是错误的:给定IP,唯一要做的就是对DNS的反向查询。因此,traceroute不是建议的正确工具。
奥塔维奥·坎帕纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.