可以通过 MAC ping 通网卡吗

可以通过 MAC ping 通网卡吗

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

我尝试创建一个 ARP 条目:

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

但这不起作用,因为网卡没有这个 IP 地址。因此网卡会收到 ping 请求但不会回复它。有没有办法解决?

我正在使用 etherwake 包发送 LAN 唤醒消息。

答案1

如果使用该工具,您的运气可能会更好arping。该工具ping工作在第 3 层开放系统互连模型,而arping在第 2 层工作。

然而,使用此工具您仍然需要知道系统的 IP。它有 2 个版本,大多数 Unix(Alexey Kuznetsov 的)包含的标准版本是只能处理 IP 地址的版本。这其他版本(Thomas Habets)据说可以使用 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

以下是进行 MAC 到 IP 反向查找的几种方法。

  1. 地图

    $ nmap -sP 192.168.1.0/24
    

    然后在你的 arp 缓存中查找相应的机器arp -an

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

    然后查看你的 arp 缓存,与上面相同。

  3. $ 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
    

答案2

您无法 ping 正常的 NIC,因为 NIC 本身不会发送任何回复。

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

普通网络接口卡本身不会发送任何回复。他们总是需要在计算机上运行软件才能做到这一点。

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

LAN 唤醒是单向的

局域网唤醒允许计算机让 NIC 部分通电以接收以太网帧并在其中查找魔术唤醒序列,但 NIC 仍然不会发送任何回复。 LAN 唤醒是严格单向的。没有发送任何回复。

例外情况

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

答案3

ether-wake命令将通过 MAC 地址工作,因此您肯定 (a) 不需要 IP 地址,并且 (b) 可以无害地发送命令(如果它已经唤醒,唤醒它不会有影响吗?)

arp -an您可以通过使用grep 获取您的 MAC 来获取目标主机的 IP,从而查看现有的 arp 缓存列表。然而,因为 arp 是一个缓存,所以它可能已经“超时”了缓存(并且仍然处于“唤醒”状态)。然后你可能需要使用暴力方法来找到它的IP,例如:

 sudo nmap -sP 192.168.2.0/24 | less  

(然后寻找 00:0c:0d:ef:02:03) - 前提是防火墙和其他类似的东西不会妨碍!

答案4

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

相关内容