ARP主机名问题

ARP主机名问题

我在查看 LAN 中设备的主机名时遇到问题。在我的第一台笔记本电脑(Ubuntu 18.04 LTS 桌面版)上,以下命令的结果:

arp -a

正是我想要的:

X (192.168.56.243) at 40:a3:cc:99:2d:66 [ether] on wlan0
test-test-test (192.168.56.146) at 48:bf:6b:e3:bf:5a [ether] on wlan0
TP-Link_Archer_ (192.168.56.1) at 10:7b:44:40:61:70 [ether] on wlan0

使用地图,我可以使用以下命令扫描我的 LAN:

nmap -sn 192.168.56.0/24

我用主机名得到了完美的结果:

Starting Nmap 7.60 ( https://nmap.org ) at 2018-08-07 09:07 EDT
Nmap scan report for TP-Link_Archer_ (192.168.56.1)
Host is up (0.0054s latency).
Nmap scan report for ZZ (192.168.56.156)
Host is up (0.00045s latency).

但是,在另一台安装了 Debian 9 x64 Minimal 的笔记本电脑上,整个主机名部分丢失。每当我发出arp-a,我得到以下信息:

? (192.168.56.243) at 40:a3:cc:99:2d:66 [ether] on wlan0
? (192.168.56.146) at 48:bf:6b:e3:bf:5a [ether] on wlan0
? (192.168.56.1) at 10:7b:44:40:61:70 [ether] on wlan0

此外,扫描nmap -sn 192.168.56.0/24产生这个输出:

Starting Nmap 7.60 ( https://nmap.org ) at 2018-08-07 09:17 EDT
Nmap scan report for 192.168.56.1
Host is up (0.0054s latency).
Nmap scan report for 192.168.56.156
Host is up (0.00045s latency).

老实说,我不知道发生了什么,很可能我错过了一些东西Debian 最小化安装,在Ubuntu中安装。但我不知道在哪里可以找到丢失的部分,以便 Debian 机器可以开始向我显示主机名。

有任何想法吗?

编辑: 我的 /etc/nsswitch.conf 正是这样:

root@zxcv:/home/test# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

不过,我已经设置了一个带有桥接网络适配器的虚拟机,安装了相同版本的 Debian Minimal,并且我能够获取所有 IP 的主机名。现在的问题是,失败的 Debian 缺少哪些数据包/模块/服务,从而阻止获取主机名?

答案1

您无权访问可将 IP 地址转换为名称的 DNS 服务器。

还有其他方法可以关联主机名和 IP 地址,但如果您有不止一台计算机,DNS 是您的最佳答案。

回复你的评论,是的,/etc/resolv.conf 应该包含 DNS 服务器的地址。在小型网络中,这通常与路由器相同。

答案2

arp正在询问您的系统以确定它如何将 IP 转换为主机名。如果您使用该-n开关,它将放弃这一点并仅显示 IP,而不对主机名进行任何转换。

与 Linux 中的大多数工具一样,arp它使用 NS(名称服务交换机)进行查找。如果您strace执行arp命令,您可以看到它查找这些内容:

$ strace -s 2000 arp -a
...
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 5

查看此文件后,arp您将发现它是如何查找主机名的。

$ grep hosts: /etc/nsswitch.conf
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

这表示首先查看文件,然后第二次查询 DNS...files这里的意思是使用系统的/etc/hosts文件。您可以使用该命令了解 NS 如何执行此操作getent hosts

例子

以我的 CentOS 7 虚拟机为例:

$ arp -a
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
gateway (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0
$ arp -an
? (10.0.2.3) at 52:54:00:12:35:03 [ether] on eth0
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0

如果我们查询getent寻找 10.0.2.2 IP:

$ getent hosts 10.0.2.2
10.0.2.2        gateway

如果 IP 不存在于本地任何文件中,接下来将在 DNS 中查找。由于我的 IP 都是该虚拟机的私有 IP,并且它们没有明确地出现在我的虚拟机定义的 DNS 中,这里顺便定义了 DNS:

$ more /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.2.3

笔记: arp除了向您显示一个问号之外别无选择,因为它找不到任何可用的名称。

相关内容