Можно ли пинговать NIC по MAC

28

У меня где-то есть карта NIC на машине Debian. Машина выключена, но мне нужно знать, включена ли карта NIC, чтобы я мог позже отправить волшебный пакет пробуждения по локальной сети (с другой машины Debian), чтобы разбудить его. У меня есть MAC-адрес карты. Можно ли как-то проверить связь с картой Ethernet по MAC-адресу, чтобы узнать, включена ли она?

Я попытался создать запись ARP:

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

Это не сработало, поскольку карта NIC не имеет этого IP-адреса. Таким образом, карта NIC получит запрос проверки связи, но не ответит на него. Есть ли способ обойти это?

Я использую пакет etherwake для отправки сообщения wake-on-lan.

Аластор Муди
источник

Ответы:

23

Возможно, вам повезет больше, если вы воспользуетесь этим инструментом arping. Инструмент pingработает на уровне 3 модели OSI , тогда как arpingработает на уровне 2.

Однако вам все равно нужно знать IP-адрес системы с помощью этого инструмента. Существует две версии: стандартная, включенная в большинство Unix (у Алексея Кузнецова), - версия, которая может работать только с 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.

Получение IP-адреса системы, используя только MAC

Вот несколько методов для обратного поиска MAC к IP.

  1. птар

    $ nmap -sP 192.168.1.0/24
    

    Затем посмотрите в вашем ARP-кэше соответствующий компьютер arp -an.

  2. Fping

    $ 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
    
SLM
источник
3
arpingможет взять MAC-адрес в качестве параметра:arping -c 5 38:e7:d8:63:5e:a6
@MichaelMrozek - я сделал это после того, как кто-то опубликовал мой ответ в качестве комментария и не прочитал то, что я сказал о 2 версиях арпинга. Другой ответ, похоже, был удален, так что спасибо, что избавились от моих смелых разочарований.
slm
Спасибо за помощь. Отмечать это как решенное. Мы не смогли найти вариант WOL в настройках BIOS. Это мое предположение: в BIOS не было включено WOL, но в NIC было. Таким образом, сетевой адаптер просыпался от первого пакета WOL и отправлял сообщение в BIOS. Но так как он не был включен в BIOS, BIOS ничего не делал. С этого момента NIC реагировал на пинг, так как он не спал, но машина не была. Итак, быстрый вопрос: возможно ли в BIOS отключить WOL и одновременно включить NIC?
Аластор Муди
1
@AlastorMoody - я бы сказал, что вам, вероятно, разрешено отключать BIOS WOL с включенной WIC NIC. Однако, если ваш BIOS не поддерживает WOL, то я не думаю, что вы сможете использовать его, даже если NIC поддерживает. Смотрите статью в Википедии на WOL: en.wikipedia.org/wiki/Wake-on-LAN . Говорит то же самое, что и я, в разделе «Устранение неисправностей магических пакетов».
slm
@niervol: arpingна MAC-адрес: Да, есть две реализации arping 1. из Linux iputils 2. arping от Thomas Habets . --- Только реализация 2. может пропинговать MAC-адрес, но такой эхо-запрос очень сложен: проверяемая машина все еще должна иметь настроенный TCP / IP (по крайней мере, IP-адрес), и она должна быть в состоянии ответить на эхо-запрос широковещательный IP-адрес.
Пабук
12

Вы не можете пропинговать нормальный NIC, потому что один NIC не отправляет никаких ответов.

Только работающий компьютер может отправлять ответы

Обычные сетевые интерфейсные карты не отправляют никаких ответов сами по себе. Для этого им всегда нужно работающее программное обеспечение на компьютере.

Когда ЦП компьютера выключен, тогда не работает работающее программное обеспечение, которое отправило бы ответ на эхо-запрос.

Wake-on-LAN является однонаправленным

Функция пробуждения по локальной сети позволяет компьютеру разрешить частичное включение только сетевого адаптера для приема кадров Ethernet и искать в них волшебную последовательность активации, но сетевой адаптер все равно не отправит никакого ответа. Wake-on-LAN строго однонаправлен. Ответов не отправлено.

Исключения

Существуют определенные специальные NIC, которые могут отправлять ответы сами по себе, например, такие, которые реализуют полную разгрузку рукопожатия TCP .

pabouk
источник
1
+1 - это единственный ответ, который действительно отвечает на вопрос ОП. «Wake-on-LAN является однонаправленным».
Селада,
5

Команда ether-wakeбудет работать по MAC-адресу, поэтому вам (а) не понадобится IP-адрес и (б) вы можете отправить команду без вреда (если она уже проснулась, пробуждение не окажет никакого влияния?)

Вы можете увидеть список вашего существующего arp-кэша, используя arp -anMAC для получения IP-адреса целевого хоста. Тем не менее, поскольку arp является кешем, он мог быть «тайм-аут» из кеша (и все еще быть «активным»). Тогда вам, возможно, придется использовать метод грубой силы, чтобы определить его IP, например:

 sudo nmap -sP 192.168.2.0/24 | less  

(а затем ищите 00: 0c: 0d: ef: 02: 03) - при условии, что брандмауэры и другие подобные вещи не мешают!

Драв Слоан
источник
Я не хочу будить машину прямо сейчас. Но я хочу убедиться, что сетевой адаптер может получать мои сообщения, чтобы, когда я захожу за пределы офиса и включаю компьютер через пакет WOL, я знал, что он включится. Вот почему я хочу пинговать по IP или MAC, а не будить.
Аластор Муди
2
Спящие машины не будут отвечать на пинг. Если машина включена и вы пропингуете по IP (и хосту отвечает), она поместит запись в кеш arp. Если вход в него совпадает с MAC-адресом хоста, существует разумная вероятность того, что он будет работать (исключая другие сетевые брандмауэры, маршрутизаторы и другие физические проблемы, которые могут привести к тому, что он ether-wakeне будет достигнут). Я бы фактически получил доступ к другому хосту на месте, перевел бы целевую машину в спящий режим и попытался бы ether-wake. В
зависимости
2
@DravSloan Bonjour Proxy, доступный, например, в Apples Time Capsule, является довольно изобретательным способом решения этой проблемы. Машина спит, но маршрутизатор отвечает за нее, и разбудит ее только тогда, когда прокси-сервер больше не сможет справиться с этим.
Турбьёрн Равн Андерсен
Не полагайтесь на WOL, предварительно не проверив его. Скорее получите карту IPMI в этом случае.
sjas
0

Мое приложение было сервером RSYNCing на рабочую станцию, чтобы получить каталог 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-адресу. Просто сохраните и запустите, например
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;
Mtl Dev
источник
0

Это не зависит от разных версий arping и сложных скриптов bash:

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

Я использовал arp-scan, а не arp, поскольку он работает намного быстрее.

Джулиан Найт
источник