如何通过 IP 地址在局域网中查找计算机名称?

我的网络包括运行Linux的机器和运行Windows的机器。而我的机器正在运行Linux。


2这个问题有点不清楚,导致下面出现了各种不同但都很好的答案。你想要找到主机的DNS名称吗?你想要找到WINS名称吗?你想要搜索网络中找到的所有主机吗?所有这些问题都得到了回答,但具体想要的答案是未知的。 - Mei
7个回答

在终端中输入。
sudo nmap -sn <Your LAN Subnet>

例如:
sudo nmap -sn 192.168.1.*

你可以使用ip addr命令找到你的局域网子网。
它会显示局域网中所有主机的名称,无论是Linux还是Windows。如果有移动设备连接到局域网网络上,你也能看到它们。在运行命令时,请确保使用sudo或root权限。

16在我的本地网络上没有显示任何拥有30+个Linux机器的内容... - Cerin
@Cerin 你自己是在Linux机器上吗? - Shashank Sawant
2在Ubuntu 14.04上,这个信息显示为:"? (192.168.1.2) at 00:22:6b:f2:33:b3 [ether] on wlan0",只提供了关于我的路由器的信息(我的笔记本通过wifi连接到它,目前还有其他10台设备也是如此)。查看man arp可以看到它还说"arp - 操纵系统ARP缓存"。这个工具应该如何解决原始问题? - gerlos
6在Ubuntu 14.04上也是一样的,这只是列出了一堆? (192.168.55.147) at ac:3a:7a:a4:01:d4 [ether] on eth0 - Elijah Lynn
2我也是一样。我只能通过主机名访问本地主机,其他任何东西似乎都没有公布它的主机名,即使是我自己设置的Linux机器也是如此。 - unfa
我相信这个答案只适用于你拥有一个本地的DHCP服务器和DNS服务器/代理之间可以相互通信的情况,这样通过DNS就可以解析(或者在这种情况下进行反向解析)与DHCP租约记录的主机名。 - Doktor J
我相信这只会显示你已经在MAC解析缓存中拥有的机器的IP地址。只有当你过去访问过这些机器时,它们才会被填充进去。所以这个答案最多是误导性的,最糟糕的情况下是垃圾。 - Arnaud Meuret

在终端中输入
sudo aptitude install nmap
nmap -sP xxx.xxx.xxx.xxx

这将给你带来:
Starting Nmap 5.21 ( http://nmap.org ) at 2012-11-03 19:08 CET
Nmap scan report for HOST.DOMAIN (xxx.xxx.xxx.xxx)
Host is up (0.00052s latency).
MAC Address: YY:YY:YY:YY:YY:YY (Manufactor)
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds

HOST.DOMAIN是机器的DNS名称。


10这显示了所有活动的IP地址,但它只显示了在我的本地Bind服务器中明确配置了自定义域名的机器的域名。它不显示任何本地主机名,我认为这就是作者所想要实现的目标。 - Cerin
这个答案非常快速。 - activedecay
4根据您使用的nmap版本,**-sP** 可能已更改为 -sn。根据 nmap 7.12 手册中的说明:_-sn (无端口扫描) 在之前的 Nmap 版本中,-sn 被称为 -sP。_ - Lemmings19
类似于arp命令,我认为这个答案只在你拥有本地DHCP服务器和DNS服务器/代理之间进行通信的情况下才有效,这样可以通过DNS解析(或反向解析,在这种情况下)来解析与DHCP租约记录的主机名。 - Doktor J

Netbios名称反向查找可能比DNS和TCP/IP的“主机名”功能更符合您的要求。带有-A参数的nmblookup返回设备名称和MAC地址。尝试类似以下的命令:
nmblookup -A 192.168.1.2

这是对我有效的答案。 - humphrey
那就是答案。 - Campa
我的*ux没有那个命令... 你用的是哪个发行版? - ZEE

如果你尝试这个会怎样:
你可以在Windows上运行它。
nbtstat -A xxx.xxx.xxx.xxx (where x is the ip address)

在Ubuntu上,你可以安装nbtscan。你可以在这里找到更多信息:http://www.unixwiz.net/tools/nbtscan.html 希望能对你有所帮助。

非常感谢,但是似乎nbtscan只能检测到运行Windows系统的机器。我有两台运行Windows系统的机器和另外两台运行Linux系统的机器。它只能检测到那两台运行Windows系统的机器。 - Islam Hassan
2你可以尝试使用nmblookup吗?它应该已经安装在Ubuntu上了。 - Brett
对不起,我已经阅读了教程,但无法弄清楚如何编写解决我的问题的命令。我看不到以IP作为输入的选项。你能帮我写出命令吗? - Islam Hassan
6尝试使用nmblookup -A xxx.xxx.x.x命令,其中x是机器的IP地址。所以我会执行nmblookup -A 192.168.1.6命令,它会返回我的机器名称。您需要对每台机器执行此操作。 - Brett
它只能检测到Windows机器,但对于Linux机器,它会给我这个错误信息无法创建目录/var/run/samba以用于文件unexpected.tdb。错误原因是没有这样的文件或目录 - Islam Hassan
嗯...我在我的电脑上运行了那个命令,它显示了Ubuntu的机器名称。你安装了Samba吗?你的网络中有一个独立的Samba服务器吗? - Brett
我们继续在聊天中讨论 - Islam Hassan
1@Brett: (+1) 你应该把你的评论转化为一个答案,因为这是唯一对我有效的方法(无论是在Windows还是Linux系统上)。谢谢 - lepe

我只会使用
nslookup xxx.xxx.xxx.xxx

它会显示主机名(通常是计算机名)。

6这只是让我“** 服务器无法找到xxx.xxx.xxx.xxx.in-addr.arpa:NXDOMAIN”。 - Cerin
对我来说没问题 :) - vk.edward.li
3nslookup用于进行DNS搜索,因此为了使其正常工作,您需要在DNS中注册主机。如果您拥有一个常规的Windows网络,位于私有IP范围内且未配置ActiveDirectory,则它将无法正常工作。NetBios名称和DNS名称是不同的实体。 - bogdan.mustiata

如果您的网络运行着DHCP服务器,通常在调制解调器/路由器上,那么很有可能它会有一种方法让您查看DHCP分配的地址 - 通常是通过一个网页,并且经常列出计算机名称和分配的IP地址。

据我所知,目前没有可用的实用程序将IP地址解析为NetBIOS名称。我猜想某种网络范围程序或渗透测试程序可能能够提供这样的信息。然而,所有计算机必须在同一个域和子网上才行。

请问你能给一个节目起个名字吗? - Islam Hassan
1OP想要相反的情况,例如IP->主机名。 - Cerin
我知道这是老旧的...而且OP正在使用Linux,而不是Windows...但在Windows上,你可以运行nbtstat -A <IP地址>来仅通过IP获取NetBIOS名称。这适用于跨子网,并且无需处于相同的域中。另外,运行nbtstat -a <NetBIOS名称>将实现反向操作。希望这对你有所帮助... - John Homer