可以通过 MAC ping 网卡吗

Fir*_*ame 30 networking wake-on-lan ping mac-address arp

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

我尝试创建一个 ARP 条目:

arp -s 192.168.2.2 00-0c-0d-ef-02-03
ping 192.168.2.2
Run Code Online (Sandbox Code Playgroud)

那没有用,因为 NIC 卡没有这个 IP 地址。所以 NIC 卡会收到 ping 请求,但不会回复它。有没有办法解决?

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

slm*_*slm 25

改用该工具可能会更好arping。该工具pingOSI 模型的第 3arping层工作,而在第 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)
Run Code Online (Sandbox Code Playgroud)

arping工作原理类似于ping除了发送 ICMP 数据包之外,它发送 ARP 数据包。

仅使用 MAC 获取系统 IP

这里有几种方法可以进行 MAC 到 IP 的反向查找。

  1. 映射

    $ nmap -sP 192.168.1.0/24
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. $ fping -a -g 192.168.1.0/24 -c 1
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. $ ping -b -c1 192.168.1.255
    
    Run Code Online (Sandbox Code Playgroud)

    然后查看您的 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
    
    Run Code Online (Sandbox Code Playgroud)

  • `arping` 可以将 MAC 地址作为参数:`arping -c 5 38:e7:d8:63:5e:a6` (3认同)

pab*_*ouk 13

您无法 ping 普通网卡,因为仅网卡不会发送任何回复。

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

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

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

局域网唤醒是单向的

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

例外

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


Dra*_*oan 5

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

您可以通过使用arp -an和 grep 为您的 MAC 获取目标主机的 IP来查看您现有的 arp 缓存列表。然而,因为 arp 是一个缓存,它可能已经“超时”缓存(并且仍然是“唤醒”)。然后,您可能必须使用蛮力方法来查找它的 IP,例如:

 sudo nmap -sP 192.168.2.0/24 | less  
Run Code Online (Sandbox Code Playgroud)

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

  • 休眠的机器不会响应 ping。如果机器打开并且您通过 IP ping(并且主机响应),它将在 arp 缓存中放置一个条目。如果那里的条目与主机的 MAC 地址匹配,那么它就有可能起作用(排除其他网络防火墙、路由器和其他可能导致“ether-wake”无法到达它的物理问题)。我实际上可以访问现场的另一台主机,让目标机器进入睡眠状态并尝试“ether-wake”。根据 WOL 工作原理的性质,无论如何必须在与主机相同的子网上发送请求 (2认同)
  • @DravSloan 例如 Apples Time Capsule 上可用的 Bonjour 代理是处理这个问题的一种非常巧妙的方法。机器休眠但路由器响应它,并且仅在代理无法再处理它时才将其唤醒。 (2认同)