可以通过MAC ping NIC吗


28

我在某处的Debian机器上有一个NIC卡。机器已关闭,但我需要知道NIC卡是否已打开,以便稍后(从另一台Debian机器)发送可唤醒局域网的魔术包以将其唤醒。我有卡的MAC地址。有什么方法可以通过MAC ping以太网卡以查看其是否打开?

我尝试创建ARP条目:

arp -s 192.168.2.2 00-0c-0d-ef-02-03
ping 192.168.2.2

那是行不通的,因为NIC卡没有此IP地址。因此,NIC卡将收到ping请求,但不会回复它。有没有办法解决?

我正在使用etherwake软件包发送局域网唤醒消息。

Answers:


23

改用该工具可能会更好arping。该工具pingOSI模型的第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)

arpingping除了发送ICMP数据包外,它发送ARP数据包,其工作原理与之类似。

仅使用MAC获取系统的IP

这是用于将MAC反向查找到IP的几种方法。

  1. 纳帕

    $ nmap -sP 192.168.1.0/24
    

    然后在您的arp缓存中查找相应的计算机arp -an

  2. ping

    $ fping -a -g 192.168.1.0/24 -c 1
    

    然后,像上面一样查看您的arp缓存。

  3. ping

    $ ping -b -c1 192.168.1.255
    

    然后,像上面一样查看您的arp缓存。

  4. 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
    

3
arping可以将MAC地址作为参数:arping -c 5 38:e7:d8:63:5e:a6

@MichaelMrozek-在有人基本上将我的回答发表为评论并且没有阅读我所说的关于两个版本的Arping的内容之后,我才这样做。另一个答案似乎已删除,因此感谢您消除我的大胆挫败。
slm

谢谢您的帮助。将此标记为已解决。我们在BIOS设置程序中找不到WOL选项。这是我的猜测:BIOS没有打开WOL,但NIC已打开。因此,NIC正在第一个WOL数据包中唤醒,并正在向BIOS发送消息。但是由于未在BIOS中打开它,所以BIOS没有做任何事情。从此刻起,由于NIC处于唤醒状态,因此NIC对其进行响应,但计算机未响应。这么简单的问题:BIOS是否有可能关闭WOL和NIC同时打开它?
Alastor Moody

1
@AlastorMoody-我想说,您可能被允许在打开NIC的WOL的情况下关闭BIOS WOL。但是,如果您的BIOS不支持WOL,那么即使NIC也不支持,我也无法使用它。请参阅有关WOL的维基百科文章:en.wikipedia.org/wiki/Wake-on-LAN。在“对魔术包进行故障排除”部分中说的与我相同。
slm

@niervol:arping到MAC地址:是的,有两种实现arping的 实现1.来自Linux iputils 2. 由Thomas Habets进行arping。---只有2.实现可以ping通MAC地址,但是这种ping操作非常棘手:ping通的计算机仍必须配置TCP / IP(至少是IP地址),并且它必须能够响应ping广播IP地址。
pabouk

12

您无法ping通普通NIC,因为仅NIC不会发送任何答复。

只有正在运行的计算机才能发送答复

普通的网络接口卡本身不会发送任何答复。他们总是需要计算机上正在运行的软件。

当计算机的CPU断电时,没有正在运行的软件会向ping发送回复。

局域网唤醒是单向的

LAN唤醒允许计算机仅部分打开NIC的电源,以接收以太网帧并在其中寻找神奇的唤醒序列,但NIC仍不会发送任何答复。局域网唤醒是严格单向的。没有发送回复。

例外情况

有某些特殊的NIC可以自行发送答复,例如实现完整的TCP握手卸载的答复。


1
+1-这是真正解决OP问题的唯一答案。“局域网唤醒是单向的”。
Celada

5

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)-提供的防火墙和其他类似的东西不会挡住!


我现在不想唤醒机器。但是我想确保NIC可以接收我的消息,以便当我离开现场并通过WOL数据包打开计算机时,我知道它将打开。这就是为什么我想通过IP或MAC进行ping操作而不唤醒它。
Alastor Moody

2
睡眠机器不会响应ping。如果计算机已打开,并且您通过IP ping(主机响应),它将在arp缓存中放置一个条目。如果其中的条目与主机的MAC地址匹配,则有合理的机会使其起作用(禁止其他网络防火墙,路由器和其他可能导致ether-wake无法访问的物理问题)。我实际上可以在现场访问另一台主机,将目标计算机置于睡眠状态并尝试ether-wake。截至WOL是如何工作的性质,请求将不得不反正在同一子网中的主机发送
Drav斯隆

2
@DravSloan Bonsour代理(例如Apples Time Capsule)可用,是解决此问题的非常巧妙的方法。机器进入睡眠状态,但路由器对此做出响应,仅在代理不再处理该设备时才将其唤醒。
托尔比约恩Ravn的安徒生

在未先进行测试的情况下,请不要依赖WOL。在这种情况下,应该获得IPMI卡。
sjas 2013年

0

我的应用程序是一台服务器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

0

这是一个通过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;

0

这不依赖于不同版本的arping,也不依赖于复杂的bash脚本:

ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7  | awk ' { printf $1 } ')

我使用了arp-scan而不是arp,因为它运行起来快得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.