如何在 Linux 上使用 arping 命令

已发表: 2022-07-28
显示 bash 提示符的 Linux 笔记本电脑
fatmawati achmad zaenuri/Shutterstock.com

Linux arping命令类似于ping ,但仅适用于本地网络。 它的优点是它在较低的网络级别上运行,有时在ping不能时得到响应。 以下是如何使用它。

ARP 协议

IP 地址是联网设备的数字标签。 它用作地址,以便适当的网络流量到达正确的设备。 但局域网上的大多数设备都有动态IP 地址。 也就是说,他们的 IP 地址可能会在下次启动时发生变化。

为了能够正确地将网络流量路由到适当的设备,必须采用将 IP 地址映射到媒体访问控制 (MAC) 地址的方案。 MAC 地址是在设备制造时建立的唯一标识。 IP 地址是一个逻辑地址。 MAC 地址是物理地址。

什么是数据包?
相关什么是数据包?

地址解析协议是将 IP 地址映射到 MAC 地址的中间人。 负责在您的网络中编组和引导网络数据包的设备(通常是路由器)构建并维护一个将 IP 地址与 MAC 地址联系起来的 ARP 表。

如果路由器需要将数据路由到它不知道的设备,它会发出 ARP 请求以获取新设备的 MAC 地址。

当新设备连接到您的网络时,它会被分配一个 IP 地址,但这还不足以将流量实际路由到它。 路由器需要获取 MAC 地址,这是拼图中缺失的部分。 但是由于 IP 地址本身不足以将数据包路由到设备,因此 Catch-22 不能使用 IP 地址查询硬件以获取 MAC 地址。

开放系统互连模型将构成工作网络的技术分组为一系列层。 没有低层,高层就无法运行。 OSI 模型有七层。

  • 第 7 层是最顶层,即应用层。 它向计算机用户提供信息并从他们那里接收信息。
  • 第 6 层是表示层。 这可确保数据在进出网络格式时处于正确的格式或状态。 加密和解密发生在这一层。
  • 第 5 层是会话层。 会话是两个或多个设备之间的网络连接。 该层涉及诸如连接的启动、握手、超时和不再需要的连接中断等事务。
  • 第 4 层是传输层。 这是以协调方式在网络中移动数据的层。 该层关心诸如传输速率和数据量之类的事情。 传输控制协议(TCP/IP 中的 TCP)在这一层运行。
  • 第三层是网络层。 这是路由和数据包转发发生的地方。 它是 Internet 协议(TCP/IP 中的 IP)运行的层。
  • 第 2 层是数据链路层。 它用于在可直接寻址的设备之间发送数据包,使用广播到每个设备或单播到特定 MAC 地址。
  • 第 1 层是物理层。 这与物理基础设施有关,包括电缆、路由器和网络交换机。 Wi-Fi 中使用的无线电波也属于这一类。

当路由器收到一个不在其表中的 IP 地址的数据包时,它会向整个网络发送一个广播数据包。 它有效地询问“谁有这个 IP 地址?” 这是第二层消息,因此它不依赖于 IP 路由。

具有匹配地址的设备通过发回其 MAC 地址进行响应。 该设备的 IP 地址和 MAC 地址可以添加到映射表中。 现在可以将常规 IP 流量路由到设备,因为其 IP 地址和 MAC 地址之间的关系已建立并记录。

相关:互联网的基础:TCP/IP 年满 40 岁

arping 命令

所有聪明的 ARP 东西都会在后台自动运行,构建和维护 ARP 表。 arping命令将 ARP 查询的一些功能带到终端窗口。 它在 OSI 第 2 层运行,当ping不通时,它可以请求设备的响应。

在 Fedora 36 上,已经安装了arping ,但我们需要在 Manjaro 21 和 Ubuntu 22.04 上安装它。

在 Ubuntu 上,命令是:

 sudo apt install arping 

在 Ubuntu 上安装 arping

在 Manjaro 上,您需要输入:

 sudo pacman -Sy arping 

在 Manjaro 上安装 arping

使用arping的最简单方法是使用 IP 地址。 这必须是连接到本地网络的可直接寻址设备的地址。 因为arping在第 2 层运行,所以不可能进行路由。 您需要将sudoarping一起使用。

 须藤arping 192.168.1.17 

使用带有 IP 地址的 arping

按 Ctrl+C 停止。 返回的信息是响应设备的MAC地址、 arping请求的索引号以及arping请求完成的往返时间。

将输出与下面ping命令的输出进行比较。 ping命令返回有关网络数据包往返时间的更多信息。 arping命令为您提供较少的计时统计信息,但它确实包含设备的 MAC 地址。

 平 192.168.1.17 

对 IP 地址使用 ping

您还可以将设备的网络名称与arping一起使用。

 sudo arping fedora-36.local 

使用带有 IP 地址的 arping

您可以使用-c (count) 选项来告诉arping在设定数量的请求后停止。 该命令告诉arping尝试两次然后停止。

 须藤arping -c 2 192.168.1.18 

使用 -c 选项告诉 arping 在发出两个请求后停止

如果您的计算机中有多个网络接口,您可以使用-I (接口)选项来告诉arping使用哪个接口。

您可以使用ip link命令列出您的网络接口。

 ip链接

使用 ip link 列出网络接口

这台电脑有三个接口。 lo虚拟接口用作同一计算机上软件之间内部连接的环回。 在这里对我们没用。 我们可以使用以太网连接enp3s0或无线接口wlan0

该命令告诉arping使用我们选择的接口,而不是自己选择。

 sudo arping -c 2 -I enp3s0 manjaro-21.local 

使用 -I 选项告诉 arping 使用特定的网络接口

在脚本中使用 arping

通过将arping包装在脚本中的循环中,我们可以让它在一系列 IP 地址上工作。 复制此脚本中的文本并将其保存到名为“scan-range.sh”的文件中。

您需要编辑脚本并将所有出现的 192.168.1 替换为您网络的 IP 地址。

 #!/bin/bash for (( device = $1 ; device <= $2 ; device ++ )) do arping -c 1 192.168.1. $device | grep -E "1 response|1 packets received" > /dev/null if [ $? == 0 ] ; then echo "192.168.1. $device responded." else echo "192.168.1. $device didn't respond." fi  done

该脚本接受两个命令行参数。 这些用作要使用arping的范围的 IP 地址的最后一个八位字节。 因此,如果将 20 和 30 传递给脚本,则循环将从 192.168.1 开始。 20并在使用 IP 地址 192.168.1 后终止。 30 .

参数在脚本内部以$1$2的形式访问。 这些用于 C 风格for循环。 在for循环的每次旋转中, $device被设置为范围内的下一个 IP 地址。

该脚本使用我们已经看到的相同arping -c格式,但这次我们只要求向范围内的每个设备发送一个 ARP 请求。

arping命令的输出通过grep管道传输。

可以在您的脚本中简化grep语法。 grep正在寻找两个字符串之一,“1 个响应”或“1 个收到的数据包”。 这是因为测试计算机上有不同版本的arping ,它们使用不同的术语。 如果grep找到这些短语中的任何一个,它的退出值将为零。

当您知道您的arping版本使用了哪些短语时,您可以通过删除其他短语来简化grep语法。

if语句测试$? - 一个保存最后一个进程的退出代码的变量 - 查看它是否为零。 如果是,它使用echo将成功消息打印到终端窗口。 如果测试失败,则grep没有找到任何一个字符串,这意味着 ARP 请求失败。

使用chmod命令和+x选项使您的脚本可执行。

 chmod +x 扫描范围.sh 

使用 chmod +x 选项使脚本可执行

我们将运行它并扫描从 15 到 20 的 IP 范围。其中一些地址没有连接设备,因此我们应该会看到一些故障。 记得使用sudo 。 我们还将尝试在 192.168.1.15 上ping设备。

 须藤 ./scan-range.sh 15 20
 平 192.168.1.15 

运行脚本并运行 ping

就像您在任何网络上一样,我们得到了成功和失败的混合。 但请注意,虽然 192.168.1.15 的设备响应了二层 ARP 请求,但它并没有响应三层ping请求。

如果您 p​​ing 过设备并注意到故障,您可能倾向于检查它是否已插入、在线以及是否可以ping设备 192.168.1.15。

但是通过arping ,您可以验证它是否已连接、在线和网络可访问。 这将指导您进行故障排除以开始调查路由和 ARP 表问题。

更深入的洞察

网络洋葱有很多层。 如果ping无法让您到达任何地方,请下拉一层,看看arping能告诉您什么。

相关:如何使用 Nmtui 管理 Linux Wi-Fi 网络