如何在 Linux 中使用 arping 命令

linux arping 命令就像 ping ,但僅適用於本地網絡。 它的優點是它在較低的網絡級別上運行,有時在 ping 不能。 以下是如何使用它。

ARP協議

IP 地址是網絡設備的數字標籤。 它用作地址,以便適當的網絡流量到達正確的設備。 但局域網上的大多數設備都有動態 IP 地址。 也就是說,他們的 IP 地址很可能會在下次啟動時發生變化。

為了將網絡流量正確路由到適當的設備,必須採用將 IP 地址映射到媒體訪問控制 (MAC) 地址的方案。 MAC 地址是在設備製造時建立的唯一標識。 IP 地址是一個邏輯地址。 MAC 地址是物理地址。

地址解析協議是將 IP 地址映射到 MAC 地址的中介。 負責在您的網絡上對網絡數據包進行分類和引導的設備(通常是路由器)創建並維護一個將 IP 地址鏈接到 MAC 地址的 ARP 表。

如果路由器需要將數據路由到它不知道的設備,它會發出 ARP 請求以獲取新設備的 MAC 地址。

當新設備連接到您的網絡時,它會被分配一個 IP 地址,但這還不足以將流量路由到它。 路由器需要獲取 MAC 地址,這是拼圖中缺失的部分。 但由於 IP 地址本身不足以將數據包路由到設備,因此22 袋就是不能用IP地址查詢硬件得到MAC地址。

開放系統互連模型將構成網絡的技術分組為一系列層。 沒有下層,上層就無法運行。 OSI 模型有七層。

  • 第 7 層是頂層,要求層。 它向計算機用戶提供信息並從他們那裡接收信息。
  • 第 6 層是介紹層。 這可確保數據在移入和移出網絡格式時處於正確的格式或狀態。 加密和解密發生在這一層。
  • 第 5 層是會議層。 會話是兩個或多個設備之間的網絡連接。 該層處理諸如連接的啟動、握手、超時和不再需要的連接中斷等問題。
  • 第 4 層是運輸層。 這是以協調方式在網絡上移動數據的層。 該層處理諸如傳輸速率和數據量之類的事情。 TCP/IP 中的 TCP 傳輸控制協議在這一層運行。
  • 第 3 層是互聯網層。 這是數據包的路由和轉發發生的地方。 它是 Internet 協議運行的層,即 TCP/IP 中的 IP。
  • 第 2 層是數據鏈接層。 它用於使用廣播到每個設備或單播到特定 MAC 地址的方式在可直接尋址的設備之間發送數據包。
  • 第 1 層是身體的層。 這是指物理基礎設施,包括電纜、路由器和網絡交換機。 Wi-Fi 中使用的無線電波也屬於這一類。

當路由器接收到一個不在其表中的 IP 地址的數據包時,它會向整個網絡發送一個廣播數據包。 它有效地詢問“誰有這個 IP 地址?” 這是第二層消息,因此它不依賴於 IP 路由。

具有匹配地址的設備通過返回其 MAC 地址進行響應。 該設備的 IP 地址和 MAC 地址可以添加到映射表中。 現在可以將正常的 IP 流量路由到設備,因為它的 IP 地址和它的 MAC 地址之間的關係已經建立並記錄了。

互聯網的基礎:TCP/IP 40 週年

豎琴指揮

所有智能 ARP 的東西都會在後台自動啟動,構建和維護 ARP 表。 這 arping 該命令將一些 ARP 查詢功能帶入終端窗口。 它在 OSI 第 2 層運行,並且可以在以下情況下請求設備的響應 ping 它不是。

在 Fedora 36 中, arping 已經安裝了,但是我們需要在 Manjaro 21 上安裝它Ubuntu22.04。

在 Ubuntu 中,命令是:

                      sudo apt install arping
                    

在 Manjaro 中,您需要編寫:

                      sudo pacman -Sy arping
                    

Instalación de arping en Manjaro

最簡單的使用方法 arping 帶有 IP 地址。 這必須是連接到本地網絡的直接可尋址設備的地址。 因為 arping 在第二層運行,路由是不可能的。 你將不得不使用 sudo arping .

                      sudo arping 192.168.1.17
                    

Usar arping con una dirección IP

按 Ctrl+C 停止。 返回的信息是響應設備的 MAC 地址、設備的索引號 arping 請求,以及往返時間 arping 申請完成。

將輸出與 ping 命令,下來。 這 ping 該命令返回有關網絡數據包往返時間的更多信息。 這 arping 該命令為您提供較少的時間統計信息,但確實包含設備的 MAC 地址。

                      ping 192.168.1.17
                    

Usar ping con una dirección IP

您還可以將設備的網絡名稱與 arping .

                      sudo arping fedora-36.local
                    

Usar arping con una dirección IP

你可以使用 -c (計數)計數選項 arping 在一定數量的請求後停止。 這個命令說 arping 嘗試兩次然後停止。

                      sudo arping -c 2 192.168.1.18
                    

Usando la opción -c para decirle a arping que se detenga después de hacer dos solicitudes

如果您的計算機上有多個網絡接口,則可以使用 -I (界面)計數選項 arping 使用哪個接口。

你可以使用 ip link 命令列出您的網絡接口。

                      ip link
                    

Usando ip link para listar las interfaces de red

這台電腦有三個接口。 這 lo 虛擬接口用作同一台計算機上軟件之間內部連接的環回。 這裡對我們沒有用。 我們可以使用以太網連接 enp3s0 或無線接口 wlan0 .

這個命令說 arping 使用我們選擇的界面,而不是自己選擇。

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

Usar la opción -I para decirle a arping que use una interfaz de red específica

在腳本中使用 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
                          
                        
                      
                    

該腳本接受兩個命令行參數。 這些用作您要使用的範圍內 IP 地址的最後一個八位字節 arping 在。 因此,如果將 20 和 30 傳遞給腳本,則循環將從 192.168.1 開始。二十並且在使用 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 scan-range.sh
                    

Usando la opción chmod +x para hacer que el script sea ejecutable

我們將運行它並掃描從 15 到 20 的 IP 範圍。其中一些地址沒有連接設備,因此我們應該會看到一些故障。 記得使用 sudo . 我們也會嘗試 ping 設備位於 192.168.1.15。

                      sudo ./scan-range.sh 15 20
                    
                      ping 192.168.1.15
                    

Ejecutando el script y ejecutando ping

就像您在任何網絡上一樣,我們得到了混合命中和未命中。 但請注意,192.168.1.15 的設備雖然響應了來自第二層的 ARP 請求,但它不響應第三層。 ping 要求。

如果您 p​​ing 過設備並註意到故障,您可能會傾向於檢查它是否已插入、在線,如果可以 ping 外部設備 192.168.1.15。

但隨著 arping 您可以驗證您是否已連接、在線並且可以通過網絡訪問。 這將指導您的故障排除開始尋找路由和 ARP 表問題。

更深入的洞察力

洋蔥網有很多層。 是的 ping 它讓你無處可去,拉下一層,看看是什麼 arping 我可以說你

如何使用 Nmtui 管理 Linux Wi-Fi 網絡

相關文章