Answers:
改用该工具可能会更好arping
。该工具ping
在OSI模型的第3层级别上arping
起作用,而在第2层上起作用。
但是,您仍然需要使用此工具来了解系统的IP。它有2个版本,大多数Unix(Alexey Kuznetsov的)中包含的标准版本是只能处理IP地址的版本。的其他版本(托马斯哈伯特)据说可以查询使用MAC地址。
$ sudo arping 192.168.1.1 -c 1
ARPING 192.168.1.1 from 192.168.1.218 eth0
Unicast reply from 192.168.1.1 [00:90:7F:85:BE:9A] 1.216ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)
arping
ping
除了发送ICMP数据包外,它发送ARP数据包,其工作原理与之类似。
这是用于将MAC反向查找到IP的几种方法。
纳帕
$ nmap -sP 192.168.1.0/24
然后在您的arp缓存中查找相应的计算机arp -an
。
ping
$ fping -a -g 192.168.1.0/24 -c 1
然后,像上面一样查看您的arp缓存。
ping
$ ping -b -c1 192.168.1.255
然后,像上面一样查看您的arp缓存。
nbtscan(仅Windows主机)
$ nbtscan 192.168.1.0/24
Doing NBT name scan for addresses from 192.168.1.0/24
IP address NetBIOS Name Server User MAC address
------------------------------------------------------------------------------
192.168.1.0 Sendto failed: Permission denied
192.168.1.4 MACH1 <server> <unknown> 00-0b-12-60-21-dd
192.168.1.5 MACH2 <server> <unknown> 00-1b-a0-3d-e7-be
192.168.1.6 MACH3 <server> <unknown> 00-21-9b-12-b6-a7
arping
到MAC地址:是的,有两种实现arping的 实现1.来自Linux iputils 2. 由Thomas Habets进行arping。---只有2.实现可以ping通MAC地址,但是这种ping操作非常棘手:ping通的计算机仍必须配置TCP / IP(至少是IP地址),并且它必须能够响应ping广播IP地址。
该ether-wake
命令将通过mac地址工作,因此您可以肯定地(a)不需要IP地址,并且(b)可以发送该命令而不会造成损害(如果它已经醒着,唤醒它不会有影响吗?)
您可以通过使用arp -an
和grepping MAC获取目标主机的IP来查看现有arp缓存的列表。但是,因为arp是一个缓存,所以它可能已在缓存中“超时”(并且仍然“清醒”)。然后,您可能必须使用蛮力方法来找到它的IP,例如:
sudo nmap -sP 192.168.2.0/24 | less
(然后查找00:0c:0d:ef:02:03)-提供的防火墙和其他类似的东西不会挡住!
ether-wake
无法访问的物理问题)。我实际上可以在现场访问另一台主机,将目标计算机置于睡眠状态并尝试ether-wake
。截至WOL是如何工作的性质,请求将不得不反正在同一子网中的主机发送
我的应用程序是一台服务器RSYNC,该服务器正在RSYNC进入工作站以获取工作站的Document目录...,但该工作站没有保证的IP地址,但确实有一个已知的MAC地址(IP地址由DHCP完成)。此代码仅使用ping。
export COUNTER=1
while [ $COUNTER -lt 255 ]
do
#ping $1$COUNTER -c 1 -w 400 | grep -B 1 "Lost = 0" &
# activate all 254 addresses in the subnet.. dont really need to grep the ping output
ping 192.168.0.$COUNTER -c 1 -w 4 2> /dev/null | grep -B 1 ' 0\% packet loss' > /dev/null &
COUNTER=$(( $COUNTER + 1 ))
done
# wait till 254 background processes finished
wait
# the arp cache will automatically flush it's incomplete entries in about 10 minutes...
#echo "finished"
#
#SRC_SERVER_IP="192.168.0.160:873"
SRC_SERVER_IP=$(arp -a | grep "00:22:4d:81:8f:76" | awk '{print $2}' | sed 's/[()]//g')":873"
if [ $SRC_SERVER_IP == ":873" ] ; then
echo "ws1.example.com is not on the network... exiting..."
exit 0
fi
这是一个通过mac地址ping的简单脚本。只需保存并运行例如
macping aa:bb:cc:dd:ee:ff
您还可以以菊花链方式将结果有条件地做为其他事情,例如:
macping aa:bb:cc:dd:ee:ff && echo do something if online || echo do something if offline
--
#!/bin/bash
network=192.168.1.1/24
if [ "$#" -ne 1 ]; then echo Usage example: $0 aa:bb:cc:dd:ee:ff; exit 2; fi;
nmap -sP $network >& /dev/null
ip=$(arp -n | grep $1 | awk ' { print $1 }')
ping $ip -n -q -c 2 -i 0.2 -w 1 >& /dev/null
if [ $? -eq 0 ]; then
echo Device is online \($ip\)
else
echo Device is offline
exit 1
fi;
这不依赖于不同版本的arping,也不依赖于复杂的bash脚本:
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk ' { printf $1 } ')
我使用了arp-scan而不是arp,因为它运行起来快得多。
arping
可以将MAC地址作为参数:arping -c 5 38:e7:d8:63:5e:a6