如何在 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 網絡