IP 地址衝突會導致網路間歇斷線、通訊異常。arping 透過發送 ARP 請求,在第二層 (資料鏈路層) 直接探測目標 IP 是否被佔用,且能獲取佔用者 MAC 位址,不受防火牆/ICMP 封鎖影響。本文詳細解析 arping 參數、實戰檢測流程、衝突定位與自動化腳本。
arping 主動發送 ARP Request (Who has IP? Tell me),收到 ARP Reply 表示 IP 已被佔用。| 參數 | 說明 | 典型用法 |
|---|---|---|
-c COUNT | 發送請求次數 | -c 3 發送 3 次 |
-f | 收到第一個回應即退出 | 快速檢測 |
-D | 重複地址檢測模式 (DAD),來源 IP 設為 0.0.0.0 | 啟動前自檢 |
-I INTERFACE | 指定網卡介面 | -I eth0、-I bond0 |
-s SOURCE_IP | 指定來源 IP | 多 IP 介面指定來源 |
-w TIMEOUT | 等待回應超時 (秒) | -w 2 |
-q | 靜默模式,不顯示過程資訊 | 腳本調用 |
-b | 廣播模式 (目的 MAC 為 ff:ff:ff:ff:ff:ff) | 特殊場景 |
-U | Unsolicited ARP (免費 ARP),宣告擁有權 | IP 漂移/高可用切換 |
-A | ARP 回應模式,更新鄰居表 | 更新交換機 MAC 表 |
arping -c 3 -f -I eth0 192.168.1.100
# -c 3: 最多 3 次
# -f: 收到回應即停止
# 輸出範例:
# Unicast reply from 192.168.1.100 [00:11:22:33:44:55] 0.842ms
# Sent 1 probes (1 broadcast(s))
# Received 1 response(s)
結果判讀:
Unicast reply → IP 已佔用,顯示佔用者 MAC。arping -D -c 3 -I eth0 192.168.1.100
# 來源 IP 0.0.0.0,不更新鄰居表,純檢測
# 返回碼:0=無衝突,1=有衝突
#!/bin/bash
# scan_free_ip.sh
NETWORK="192.168.1"
IFACE="eth0"
for i in {1..254}; do
IP="${NETWORK}.${i}"
if arping -c 1 -f -w 1 -q -I "$IFACE" "$IP" >/dev/null 2>&1; then
echo "OCCUPIED: $IP"
else
echo "FREE: $IP"
fi
done
arping 輸出直接顯示。# 核心交換機
show mac address-table address 00:11:22:33:44:55
# 顯示該 MAC 學習到的端口 (如 Gi1/0/24)
#!/bin/bash
# check_ip_conflict.sh
# 回傳 JSON 供監控系統解析
TARGET_IPS=("192.168.1.10" "192.168.1.20" "192.168.1.100")
IFACE="eth0"
CONFLICTS=()
for ip in "${TARGET_IPS[@]}"; do
if arping -c 2 -f -w 1 -q -I "$IFACE" "$ip" >/dev/null 2>&1; then
# 獲取 MAC
MAC=$(arping -c 1 -f -w 1 -I "$IFACE" "$ip" 2>/dev/null | grep -oE '([0-9a-f]{2}:){5}[0-9a-f]{2}')
CONFLICTS+=("{\"ip\":\"$ip\",\"mac\":\"$MAC\"}")
fi
done
if [ ${#CONFLICTS[@]} -eq 0 ]; then
echo '{"status":"ok","conflicts":[]}'
else
echo "{\"status\":\"conflict\",\"conflicts\":[$(IFS=,; echo "${CONFLICTS[*]}")]}"
fi
| 工具 | 層級 | 穿透防火牆 | 獲取 MAC | 適用場景 |
|---|---|---|---|---|
arping | L2 (ARP) | 是 (除非 L2 隔離) | 是 | IP 衝突檢測、L2 連通性 |
ping | L3 (ICMP) | 否 (常被封鎖) | 否 | 基本連通性測試 |
nmap -sn | L3/L4 | 部分 | 是 (需 root) | 網段掃描、資產發現 |
# RHEL/CentOS
yum install iputils # 含 arping
# 或
yum install arping # 獨立套件
# Ubuntu/Debian
apt install iputils-arping # 現代版本
# 或
apt install arping # 經典版本 (功能較少)
# 需 root 權限發送原始套接字
sudo arping ...
# 或設定 capabilities
sudo setcap cap_net_raw+ep /usr/sbin/arping
掌握 arping 讓你在 IP 衝突排查、網路遷移驗證、高可用 VIP 測試中擁有「透視眼」級別的 L2 可見性。