arping [选项] 目标IP地址
arping [选项] -s 源IP地址 目标IP地址
| 选项 | 说明 |
|---|---|
| -A | 发送ARP应答包而不是请求包 |
| -b | 发送广播ARP请求(默认) |
| -c 数量 | 发送指定数量的ARP请求后停止 |
| -D | 重复地址检测模式(检测IP冲突) |
| -f | 收到第一个响应后立即退出 |
| -I 接口 | 指定网络接口(如eth0、wlan0) |
| -q | 安静模式,不显示详细信息 |
| -s 源IP | 指定源IP地址 |
| -U | 发送未经请求的ARP(更新邻居ARP缓存) |
| -V | 显示版本信息 |
| -w 超时 | 设置超时时间(秒) |
| -h | 显示帮助信息 |
| 数据包类型 | 选项 | 用途 |
|---|---|---|
| ARP请求(广播) | -b(默认) | 查询IP地址对应的MAC地址 |
| ARP应答(单播) | -A | 响应ARP请求,通告自己的MAC地址 |
| 无偿ARP(广播) | -U | 主动通告IP-MAC映射,更新邻居缓存 |
| 重复地址检测 | -D | 检测网络中是否有IP地址冲突 |
# 检测192.168.1.1是否在线
arping 192.168.1.1
# 发送5个ARP请求后停止
arping -c 5 192.168.1.1
# 指定网络接口(多网卡环境)
arping -I eth0 192.168.1.1
# 安静模式,只显示结果
arping -c 3 -q 192.168.1.1 && echo "主机在线" || echo "主机离线"
# arping输出示例:
ARPING 192.168.1.1 from 192.168.1.100 eth0
Unicast reply from 192.168.1.1 [00:11:22:33:44:55] 0.873ms
Unicast reply from 192.168.1.1 [00:11:22:33:44:55] 0.921ms
Unicast reply from 192.168.1.1 [00:11:22:33:44:55] 0.891ms
Sent 3 probes (1 broadcast(s))
Received 3 response(s)
# 检测IP地址是否已被使用(DAD模式)
arping -D 192.168.1.100
# 检测并指定网络接口
arping -D -I eth0 192.168.1.100
# 检测冲突并显示详细信息
arping -D -c 3 192.168.1.100
# 无冲突时输出(只有一个响应):
ARPING 192.168.1.100 from 0.0.0.0 eth0
Sent 1 probes (1 broadcast(s))
Received 0 response(s)
# 有冲突时输出(多个响应):
ARPING 192.168.1.100 from 0.0.0.0 eth0
Unicast reply from 192.168.1.100 [AA:BB:CC:DD:EE:FF] 1.234ms
Unicast reply from 192.168.1.100 [11:22:33:44:55:66] 2.345ms # 冲突!
Sent 1 probes (1 broadcast(s))
Received 2 response(s)
# 发送无偿ARP更新邻居缓存
sudo arping -U 192.168.1.100
# 指定源IP地址
sudo arping -U -s 192.168.1.100 192.168.1.255
# 发送ARP应答包
sudo arping -A 192.168.1.100
# 广播无偿ARP更新整个网络
sudo arping -U -c 2 -I eth0 192.168.1.100
# 快速检测,收到第一个响应就退出
arping -f 192.168.1.1
# 设置超时时间(秒)
arping -w 3 192.168.1.1
# 指定源IP地址(模拟其他主机)
sudo arping -s 192.168.1.50 192.168.1.1
# 连续检测并显示时间戳
while true; do
echo -n "$(date '+%H:%M:%S') - "
arping -c 1 -q 192.168.1.1 && echo "在线" || echo "离线"
sleep 5
done
#!/bin/bash
# arping结果分析脚本
TARGET="192.168.1.1"
INTERFACE="eth0"
echo "测试目标: $TARGET"
echo "开始时间: $(date)"
echo ""
# 运行arping并捕获输出
OUTPUT=$(arping -c 5 -I $INTERFACE $TARGET 2>&1)
# 提取统计信息
SENT=$(echo "$OUTPUT" | grep "Sent" | awk '{print $2}')
RECEIVED=$(echo "$OUTPUT" | grep "Received" | awk '{print $2}')
echo "发送包数: $SENT"
echo "接收响应: $RECEIVED"
# 计算成功率
if [ "$SENT" -gt 0 ]; then
SUCCESS_RATE=$((RECEIVED * 100 / SENT))
echo "成功率: $SUCCESS_RATE%"
if [ "$SUCCESS_RATE" -lt 80 ]; then
echo "警告: 网络质量较差!"
fi
fi
# 提取MAC地址
MAC=$(echo "$OUTPUT" | grep "reply from" | head -1 | awk '{print $4}')
echo "MAC地址: $MAC"
# 提取平均延迟(如果有响应)
if [ "$RECEIVED" -gt 0 ]; then
AVG_LATENCY=$(echo "$OUTPUT" | grep "reply from" | awk -F' ' '{sum+=$5} END {print sum/NR}')
echo "平均延迟: ${AVG_LATENCY}ms"
fi
#!/bin/bash
# arp_spoof_detection.sh
GATEWAY="192.168.1.1"
KNOWN_MAC="00:11:22:33:44:55"
INTERFACE="eth0"
LOG_FILE="/var/log/arp_spoof.log"
echo "=== ARP欺骗检测开始: $(date) ===" >> $LOG_FILE
while true; do
# 获取网关的当前MAC地址
CURRENT_MAC=$(arping -c 1 -I $INTERFACE $GATEWAY 2>/dev/null | \
grep "reply from" | awk '{print $4}' | tr -d '[]')
if [ -n "$CURRENT_MAC" ]; then
if [ "$CURRENT_MAC" != "$KNOWN_MAC" ]; then
echo "警报: 检测到ARP欺骗!" >> $LOG_FILE
echo "时间: $(date)" >> $LOG_FILE
echo "预期MAC: $KNOWN_MAC" >> $LOG_FILE
echo "实际MAC: $CURRENT_MAC" >> $LOG_FILE
# 发送警报
wall "ARP欺骗警报!网关MAC地址被篡改!"
# 恢复正确的ARP条目
sudo arp -d $GATEWAY
sudo arping -c 1 -I $INTERFACE $GATEWAY > /dev/null 2>&1
fi
fi
sleep 30 # 每30秒检查一次
done
#!/bin/bash
# network_scanner.sh
NETWORK="192.168.1"
INTERFACE="eth0"
OUTPUT_FILE="network_devices_$(date +%Y%m%d).csv"
echo "IP地址,MAC地址,设备名,响应时间(ms),状态" > $OUTPUT_FILE
echo "开始扫描网络 $NETWORK.0/24..."
echo "IP地址 MAC地址 状态"
echo "----------------------------------------"
for i in {1..254}; do
IP="$NETWORK.$i"
# 发送单个ARP请求(安静模式)
RESULT=$(arping -c 1 -w 1 -I $INTERFACE -q $IP 2>&1)
if [ $? -eq 0 ]; then
# 获取MAC地址和延迟
DETAIL=$(arping -c 1 -I $INTERFACE $IP 2>/dev/null | grep "reply from")
MAC=$(echo $DETAIL | awk '{print $4}' | tr -d '[]')
LATENCY=$(echo $DETAIL | awk '{print $5}' | sed 's/ms//')
# 尝试获取主机名
HOSTNAME=$(nslookup $IP 2>/dev/null | grep "name =" | awk '{print $4}' | sed 's/\.$//')
if [ -z "$HOSTNAME" ]; then
HOSTNAME="未知"
fi
echo "$IP $MAC 在线"
echo "$IP,$MAC,$HOSTNAME,$LATENCY,在线" >> $OUTPUT_FILE
else
echo "$IP 离线"
echo "$IP,,,0,离线" >> $OUTPUT_FILE
fi
done
echo ""
echo "扫描完成,结果已保存到: $OUTPUT_FILE"
echo "在线设备总数: $(grep -c "在线" $OUTPUT_FILE)"
#!/bin/bash
# ha_arp_test.sh
VIRTUAL_IP="192.168.1.100"
PRIMARY_MAC="aa:bb:cc:dd:ee:01"
BACKUP_MAC="aa:bb:cc:dd:ee:02"
INTERFACE="eth0"
LOG_FILE="/var/log/ha_arp_test.log"
echo "=== 高可用ARP切换测试开始: $(date) ===" >> $LOG_FILE
while true; do
# 检测当前活动的MAC地址
CURRENT_MAC=$(arping -c 1 -I $INTERFACE $VIRTUAL_IP 2>/dev/null | \
grep "reply from" | awk '{print $4}' | tr -d '[]')
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
if [ "$CURRENT_MAC" = "$PRIMARY_MAC" ]; then
STATUS="主服务器活动"
elif [ "$CURRENT_MAC" = "$BACKUP_MAC" ]; then
STATUS="备份服务器活动"
else
STATUS="未知MAC: $CURRENT_MAC"
fi
echo "$TIMESTAMP - $STATUS" >> $LOG_FILE
# 测试连接性
if arping -c 1 -I $INTERFACE -q $VIRTUAL_IP > /dev/null 2>&1; then
LATENCY=$(arping -c 1 -I $INTERFACE $VIRTUAL_IP 2>/dev/null | \
grep "reply from" | awk '{print $5}' | sed 's/ms//')
echo " 响应时间: ${LATENCY}ms" >> $LOG_FILE
else
echo " 错误: 虚拟IP无响应!" >> $LOG_FILE
fi
sleep 10 # 每10秒检查一次
done
arp -a 查看是否有异常条目arping 目标IP 检查是否可达arping -D 目标IP 检查IP地址冲突arping 网关IP 检查网关响应#!/bin/bash
# network_diagnosis.sh
GATEWAY="192.168.1.1"
DNS_SERVER="8.8.8.8"
INTERFACE="eth0"
echo "=== 网络诊断报告 $(date) ==="
echo ""
echo "1. 测试本地接口..."
ip addr show $INTERFACE | grep "inet " | awk '{print "IP地址: "$2}'
echo ""
echo "2. 测试网关连通性..."
if arping -c 2 -I $INTERFACE $GATEWAY > /dev/null 2>&1; then
echo "网关 $GATEWAY 可达"
MAC=$(arping -c 1 -I $INTERFACE $GATEWAY 2>/dev/null | grep "reply from" | awk '{print $4}')
echo "网关MAC地址: $MAC"
else
echo "错误: 网关不可达!"
fi
echo ""
echo "3. 检测IP地址冲突..."
if arping -D -c 1 -I $INTERFACE $GATEWAY > /dev/null 2>&1; then
echo "网关IP无冲突"
else
echo "警告: 检测到IP地址冲突!"
fi
echo ""
echo "4. 测试外部网络..."
if ping -c 2 -W 1 $DNS_SERVER > /dev/null 2>&1; then
echo "外部网络可达"
else
echo "错误: 外部网络不可达"
fi
# Ubuntu/Debian
sudo apt install iputils-arping
# RHEL/CentOS 7及以下
sudo yum install iputils
# RHEL/CentOS 8/Fedora
sudo dnf install iputils
# 从源码编译(iputils包)
wget https://github.com/iputils/iputils/archive/refs/tags/20211215.tar.gz
tar xzf 20211215.tar.gz
cd iputils-20211215
meson build
cd build
ninja
sudo ninja install
A: 主要区别:
| 特性 | arping | ping |
|---|---|---|
| 工作层级 | 数据链路层(二层) | 网络层(三层) |
| 协议 | ARP协议 | ICMP协议 |
| 使用范围 | 仅限于局域网 | 可以跨网络 |
| 防火墙影响 | 通常不受ICMP规则影响 | 可能被ICMP规则阻止 |
| 主要用途 | MAC地址查询、IP冲突检测 | 网络连通性测试 |
A: 以下情况需要root权限:
# 方法1:监控网关MAC地址变化
KNOWN_GATEWAY_MAC="00:11:22:33:44:55"
while true; do
CURRENT_MAC=$(arping -c 1 192.168.1.1 | grep "reply from" | awk '{print $4}')
if [ "$CURRENT_MAC" != "$KNOWN_GATEWAY_MAC" ]; then
echo "ARP欺骗警报!"
fi
sleep 30
done
# 方法2:检测同一MAC地址对应多个IP
arp -a | awk '{print $4}' | sort | uniq -d | while read MAC; do
echo "警告: MAC地址 $MAC 对应多个IP:"
arp -a | grep "$MAC"
done
| 工具 | 主要功能 | 适用场景 |
|---|---|---|
| arping | ARP协议测试和诊断 | 局域网连通性、IP冲突检测、MAC地址查询 |
ping |
ICMP协议测试 | 网络层连通性测试 |
arp |
ARP缓存管理 | 查看和修改本地ARP缓存表 |
nmap |
网络扫描和发现 | 全面的网络设备发现和端口扫描 |
arp-scan |
ARP扫描工具 | 快速扫描局域网所有设备 |
ip neigh |
邻居缓存管理 | 现代Linux的邻居发现管理 |