我想获取我的网络上的“友好”设备名称列表。
我读的所有内容说,我绝对可以通过 来做到这一点nmap
。但是,它对我来说不起作用:
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-01 15:14 PDT
Nmap scan report for 192.168.11.2
Host is up (0.0057s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
5000/tcp open upnp
7000/tcp open afs3-fileserver
7100/tcp open font-service
49152/tcp open unknown
49153/tcp open unknown
49154/tcp open unknown
62078/tcp open iphone-sync
如果一切正常,它会显示类似“Levi 的 iPhone 的 Nmap 扫描报告”的内容。但是,如您所见,它只显示 IP 地址。我的第一个想法是,这一定是某种权限问题或相关设备的配置问题。但是,当我在另一台移动设备上运行一个简单的网络扫描应用程序时,它清楚地列出了同一网络上所有设备的 IP、MAC 地址和名称。因此,显然这些数据是可用的。
我遗漏了什么?为什么应用程序能够找到此信息,但终端命令却找不到?
答案1
最基本的方法“反向 DNS”会向路由器询问设备 DHCP 租约请求中收到的名称。但实际上并非所有设备发送其中的主机名,当然配置了静态 IP 地址的设备首先不会发送任何 DHCP 租约请求。
不过,nmap 在这方面有点小题大做。可以使用更简单的工具(例如“host”)来查询反向 DNS。事实上,当您运行“arp”时,它除了尝试显示其列出的地址的反向 DNS 之外,不会执行任何其他操作。能够通过“arp”列出名称是一个副作用——ARP 协议本身实际上没有名称的概念。
一种相关方法是通过 mDNS(多播 DNS)查询设备。在某些操作系统上,这包含在“nmap -R”中,并且始终会生成 *.local 名称。但实际上很少有设备会响应 mDNS - 主要是 macOS 系统、一些 NAS 硬件等。Linux 计算机可以安装 mDNS,但通常不会安装。
Nmap 更有用的一点是通过其“脚本”方法,该方法通过各种协议(NBT、HTTP 等)查询设备 - 但不能保证目标设备将支持任何这些协议。
但就你的情况而言,你似乎并没有真正已启用脚本模式,因此您不会从中获得任何结果。如果您使用该-A
选项运行它,它可能会报告与您的移动应用程序类似的结果。
但总体而言,这并不是要求设备能够真正有主机名或愿意透露主机名。这都是自愿加入的。
答案2
您的链接显示该名称是通过以下方式找到的反向 DNS 查找nmap
。如果您使用(用于端口扫描)或其他工具进行反向 DNS 查找,则这无关紧要。
此外,如果您的网络中没有支持反向查找且未配置设备名称的 DNS 服务器,那么您将无法得到答案。
一些设备通过 mDNS 广播其名称,您可以查找此信息。
或者换句话说:无法保证您的网络设置方式可以让您轻松获取网络上“友好”设备名称列表。
您需要网络上有实现此目的的组件。如果您没有这些组件,那么您将无法获得此信息(或只能获得部分信息)。