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

时间:2009-03-18 09:11:48

标签: unix command-line hostname

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

11 个答案:

答案 0 :(得分:160)

使用nslookup

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

答案 1 :(得分:65)

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

$ host 192.168.0.10
server10 has address 192.168.0.10

答案 2 :(得分:40)

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

  

反向查找 - 将地址映射到名称 - 简化了    -x 选项。 addr是点分十进制表示法的IPv4地址,或冒号分隔的IPv6地址。使用此选项时,没有   需要提供名称,类和类型参数。自动挖掘   执行查找名称,如11.12.13.10.in-addr.arpa和sets   查询类型和类分别为PTR和IN。

答案 3 :(得分:26)

对于Windows ping -a 10.10.10.10

答案 4 :(得分:13)

  • 对于Windows,请尝试:

    NBTSTAT -A 10.100.3.104
    

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

    nmblookup -A 10.100.3.104
    

它们几乎相同。

答案 5 :(得分:7)

python -c "import socket;print(socket.gethostbyaddr('127.0.0.1'))"

如果您只需要名称,没有其他信息,请在最后添加[0]:

python -c "import socket;print(socket.gethostbyaddr('8.8.8.8'))[0]"

答案 6 :(得分:7)

这取决于具体情况。我想你指的是操作系统的主机名(当你登录时由hostname返回)。此命令仅适用于内部名称,因此查询计算机名称需要使用不同的命名系统。有多个系统使用名称来标识主机,包括DNS,DHCP,LDAP(DN),hostname等,许多系统使用zeroconf来同步多个命名系统之间的名称。出于这个原因,hostname的结果有时会与dig(见下文)或其他命名系统的结果相匹配,但往往不会匹配。

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

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

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

最后,请注意本地计算机可以通过multiple PTR DNS records覆盖DNS主机记录。如果您没有获得预期的主机名,请务必检查此文件。

根据使用的DHCP服务器软件,

DHCP 主机名的查询方式不同,因为(据我所知)协议没有定义查询方法;但是,大多数服务器都提供了一些方法(通常使用特权帐户)。

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

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

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

答案 7 :(得分:2)

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

答案 8 :(得分:0)

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

nbtstat -a 10.228.42.57

答案 9 :(得分:-1)

您也可以使用traceroute命令。

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

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

答案 10 :(得分:-1)

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