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

Unix 如何在不登录主机的情况下从IP查找主机名,unix,command-line,hostname,Unix,Command Line,Hostname,我需要找到一个UNIX主机的主机名,该主机的IP在未登录到该UNIX主机的情况下是已知的 也可以使用traceroute命令 只需使用traceroute,它将显示带有主机名(IP解析)的路由路径。您也可以使用主机进行反向DNS查找。只需将IP地址作为参数: $ host 192.168.0.10 server10 has address 192.168.0.10 这里的其他答案是正确的-使用反向DNS查找。 如果您想通过脚本语言(Python、Perl)执行此操作,可以使用gethostb

我需要找到一个UNIX主机的主机名,该主机的IP在未登录到该UNIX主机的情况下是已知的


也可以使用traceroute命令


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

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

$ host 192.168.0.10
server10 has address 192.168.0.10

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

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

另一个可用于反向查找的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-x72.51.34.34
;  挖掘9.9.2-P1-x 72.51.34.34
;; 全局选项:+cmd
;; 得到答案:

;; ->>适用于Windows ping-a 10.10.10的HEADERHEADER

  • 对于Windows,请尝试:

    NBTSTAT -A 10.100.3.104
    

  • 对于Linux,请尝试:

    nmblookup -A 10.100.3.104
    
它们几乎是一样的

python -c "import socket;print(socket.gethostbyaddr('127.0.0.1'))"
如果您只需要名称,不需要其他信息,请在末尾添加[0]:

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

如果您正在专门查找Windows计算机,请尝试以下命令:

nbtstat -a 10.228.42.57

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

DNS是目前最常见的,在互联网(如
google.com.A 216.58.218.142
)和家庭(mDNS/LLMNR)上都使用,因此下面介绍如何执行:
dig-x不会解析为规范域名(如“google.com”),而是解析为您查询的主机IP的主机名(如。“dfw25s08-in-f142.1e100.net”;有趣的花絮:1e100是一个googol)

还请注意,DNS主机可以有多个名称。这对于具有多个Web服务器(虚拟主机)的主机来说很常见,但由于虚拟化技术的普及,这种情况变得越来越不常见。这些主机都有

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

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

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

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


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

这是错误的:给定IP,唯一要做的就是反向查询DNS。因此,traceroute这不是正确的建议工具。NBTSTAT-a 10.10.10.10适用于Windows你会接受答案吗?@PaoloStefan如果用户最后一次出现是在2009年,这是一个极不可能的事件这回答了你的问题吗?请参阅Ottavio Camp的评论下面的分析:在centos安装上,您需要首先运行
sudo-yum-install-bind-utils
。这将为younslookup安装nslookup。不推荐使用nslookup。您可以使用'dig'或'host'代替标题,突出显示socket的语法无效。对于python3,将print更改为带括号的函数:
python-c”导入socket;打印(socket.gethostbyaddr('10.16.7.10'))“
nmblookup工作得很好,我并没有试图找到web服务器的主机名,而是在做不应该做的事情的计算机。这不仅暴露了Windows主机名,还暴露了Mac地址,这是我列表中的下一个地址!ubuntu中没有这样的包nmblookup。你指的是哪个linux?你的意思是“nslookup”吗?@johnsyrinek你能详细介绍一下DHCP主机名查询吗?我想通过IP查询另一台机器(在同一wlan中)的主机名,这可能吗?
python -c "import socket;print(socket.gethostbyaddr('127.0.0.1'))"
python -c "import socket;print(socket.gethostbyaddr('8.8.8.8'))[0]"
nbtstat -a 10.228.42.57