当我运行 arp 命令时,我得到以下信息:
mark@mark-P8Z77-I-0:~$ arp
Address HWtype HWaddress Flags Mask Iface
192.168.1.128 ether 08:86:3b:c8:d8:09 C eth0
192.168.1.4 ether e0:91:f5:7c:7c:34 C eth0
192.168.1.110 ether 9c:d3:6d:b1:d3:49 C eth0
192.168.1.101 ether 94:10:3e:48:60:0d C eth0
mark-N3050T ether d0:17:c2:ad:ff:58 C eth0
192.168.1.117 ether b8:27:eb:ad:2e:72 C eth0
192.168.1.129 (incomplete) eth0
192.168.1.103 ether ec:1a:59:cb:42:25 C eth0
192.168.1.111 ether 54:4a:16:02:54:a8 C eth0
192.168.1.127 ether 84:ba:3b:05:6d:45 C eth0
192.168.1.106 ether a4:77:33:2b:29:40 C eth0
192.168.1.122 ether 00:18:dd:04:6a:cc C eth0
mark-N53Jf ether 48:5d:60:71:7f:be C eth0
gateway ether 28:c6:8e:20:a8:e5 C eth0
报告中出现的所有三个主机名也可以使用ping hostname
arp 表进行 ping 操作,/proc/net/arp 仅包含 ip 地址:
mark@mark-P8Z77-I-0:~$ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.1.128 0x1 0x2 08:86:3b:c8:d8:09 * eth0
192.168.1.4 0x1 0x2 e0:91:f5:7c:7c:34 * eth0
192.168.1.110 0x1 0x2 9c:d3:6d:b1:d3:49 * eth0
192.168.1.101 0x1 0x2 94:10:3e:48:60:0d * eth0
192.168.1.138 0x1 0x2 d0:17:c2:ad:ff:58 * eth0
192.168.1.117 0x1 0x2 b8:27:eb:ad:2e:72 * eth0
192.168.1.129 0x1 0x0 00:00:00:00:00:00 * eth0
192.168.1.103 0x1 0x2 ec:1a:59:cb:42:25 * eth0
192.168.1.111 0x1 0x2 54:4a:16:02:54:a8 * eth0
192.168.1.127 0x1 0x2 84:ba:3b:05:6d:45 * eth0
192.168.1.106 0x1 0x2 a4:77:33:2b:29:40 * eth0
192.168.1.122 0x1 0x2 00:18:dd:04:6a:cc * eth0
192.168.1.121 0x1 0x2 48:5d:60:71:7f:be * eth0
192.168.1.1 0x1 0x2 28:c6:8e:20:a8:e5 * eth0
arp 命令和 ping 使用什么服务来解析主机名?
我试过好几种,但最接近的是 avahi-browse。但是它报告的网络上主机名比 arp 报告多,而且所有主机名都附加.local
在名称后面。
此外,arp 报告的三个主机名中有两个是远程 ubuntu 系统。我不记得在这些系统上执行过任何特殊配置来允许这种行为。“网关”主机名由路由器提供。连接的系统之一是 raspian 系统。
我该如何配置 Raspian 以实现此行为?主机名如何传输?
我应该使用什么命令来解析这些主机名?
最后说明:主机名似乎根据数据的陈旧程度而变化,但我还没有完全调查清楚这一点。我只知道我需要从给定的(ubuntu)主机 ping 才能捕获其他系统的主机名。我还没有确定哪些查询最能快速填充这些信息。
在查看了截至美国东部时间 12 月 18 日晚上 8 点的评论后,我可以分享以下信息:主持人说道/etc/nsswitch.conf
:
hosts: files mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns mdns4 myhostname
没有列出远程主机/etc/hosts
avahi-resolve-address
解决如下问题:
192.168.1.1 Failed to resolve: Timeout reached (is "gateway")
192.168.1.117 raspberrypi.local (shows in arp report as 192.168.1.117)
192.168.1.138 mark-3050T.local (shows in arp as mark-3050T)
192.168.1.130 is currently offline but is similar to 192.168.1.130
虽然 mark-N3050T 被 arp 报告,但 ping 失败。
ping mark-N3050T.local
失败但ping 192.168.1.138
成功 ping 网关成功。
ping raspberrypi.local
即使 raspberrypi 没有被 arp 报告,也能成功
当我写我的原始帖子时,它ping mark-N3050T
会起作用,因此会发生一些老化,从而删除此主机名。我找不到将刷新主机名的命令。arp 和 ping 之间的区别在于 arp 将 IP 地址解析为主机名,而 ping 执行相反的操作。但是,我希望答案是对称的。
我这样做只是为了增加我对 LAN 网络工作原理的了解。我非常感谢任何愿意帮助我的人。
答案1
具体顺序如下:
首先
arp
从中获取数据(缓存) ,Linux 通过伪文件系统的文件向用户空间/proc/net/arp
公开其 ARP 缓存。内核不存储任何域名,只存储 IP 地址;这类似于使用procfs
/proc/net/arp
arp -n
现在,当您想要
arp
获取主机名时,arp
只需按照glibc
的nsswitch
配置进行操作,准确地说/etc/nsswitch.conf
,将尝试使用该文件中提到的序列来获取主机名,例如hosts: files mdns4 dns
,在这种情况下arp
将:- 检查
/etc/hosts
文件 - 然后
mdns
(多播 DNS) - 通用 DNS
需要注意的是,如果您
.local
在域名末尾看到,那么它(大概)已被解析mdns
(除非您实际上有这样的 TLD)。- 检查
答案2
地址解析协议 (ARP) 向网络中的所有主机广播 ARP 请求数据包,表示
Source=MAC-ADDRESS B
Destination=????
who-has IP A Tell IP B
其中 IP A 是您要查找的 IP,IP B 是您的 IP 地址,如果接收计算机的 IP 地址匹配,它会向您的计算机发送单播 ARP 答复,其中包含
Source=MAC-ADDRESS A
Destination=MAC-ADDRESS B
IP A is-at MAC-Address A
这就是全部 arp 剂量