Можна один пінг 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 отримала б запит ping, але не відповіла на нього. Чи є спосіб обходити це?

Я використовую пакет etherwake, щоб надіслати повідомлення про пробудження в мережі.

Відповіді:


23

Можливо, вам пощастить скористатися цим інструментом arping. Інструмент pingпрацює на рівні 3 рівня моделі OSI , тоді як arpingпрацює на рівні 2.

Ви все ще повинні знати IP-адресу системи, однак за допомогою цього інструменту. Є дві його версії, стандартна версія, що входить до більшості Unixes (Олексія Кузнецова) - це версія, яка може мати справу лише з 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

    $ nmap -sP 192.168.1.0/24
    

    Потім подивіться у свій архівний кеш на відповідну машину arp -an.

  2. fping

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

    Потім подивіться у свій арх-кеш, як і вище.

  3. пінг

    $ ping -b -c1 192.168.1.255
    

    Потім подивіться у свій арх-кеш, як і вище.

  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 - я зробив це після того, як хтось в основному опублікував мою відповідь як коментар і не прочитав те, що я сказав про 2 версії arping. Інша відповідь, схоже, була видалена, тому дякую, що вийняли мої сміливі розчарування.
slm

Дякую за допомогу. Позначення цього як вирішеного. У програмі BIOS не вдалося знайти варіант WOL. Це моя здогадка: у BIOS не було включено WOL, але NIC це зробив. Таким чином, NIC прокинувся на першому пакеті WOL і надсилав повідомлення в BIOS. Але оскільки він не був включений у BIOS, BIOS нічого не робив. З цього моменту NIC відповів на ping, оскільки він був неспаний, але машина не була. Настільки швидке запитання: чи можливо для BIOS вимкнено WOL, а NIC одночасно увімкнути його?
Аластор Муді

1
@AlastorMoody - я б сказав, що вам, ймовірно, дозволяється вимкнути BIOS WOL без включення WOL NIC. Однак якщо у вас BIOS не підтримує WOL, я не думаю, що ви не зможете ним скористатися, навіть якщо це буде NIC. Дивіться статтю wikipedia на WOL: en.wikipedia.org/wiki/Wake-on-LAN . Каже те саме, що я в розділі "Виправлення неполадок магічних пакетів".
slm

@niervol: arpingна MAC-адресу: Так, є дві реалізації arping 1. від Linux iputils 2. arping від Thomas Habets . --- Тільки 2. реалізація може пінг MAC-адреси, але такий ping дуже складний: Піндірована машина все ще повинна мати налаштований TCP / IP (принаймні IP-адресу), і вона повинна мати можливість відповідати на ping на IP-адреса широкомовної передачі.
pabouk

12

Ви не можете надіслати звичайний NIC, оскільки NIC сам не надсилає відповідей.

Лише працюючий комп'ютер може надсилати відповіді

Звичайні картки мережевого інтерфейсу не надсилають відповіді самі. Для цього їм завжди потрібне програмне забезпечення на комп’ютері.

Коли центральний процесор комп'ютера вимкнений, не існує програмного забезпечення, яке б надіслало відповідь на ping.

Пробудження в локальній мережі односпрямоване

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

Винятки

Є певні спеціальні NIC, які можуть надсилати відповіді самі, як, наприклад, ті, що здійснюють повне завантаження рукостискання TCP .


1
+1 - це єдина відповідь, яка справді відповідає на питання ОП. "Пробудження в локальній мережі односпрямоване".
Целада

5

ether-wakeКоманда буде працювати по MAC - адреса, так що напевно ви (а) не потрібен IP - адреса і (б) може послати команду без шкоди (якщо він вже спить, прокидаючись це не матиме ніякого впливу?)

Ви можете побачити список наявного кешу arp, скориставшись arp -anMAP для отримання IP-адреси цільового хоста та натиснувши його. Однак, оскільки arp є кешем, він, можливо, був "вичерпаний" з кешу (і все ще залишається "неспаним"). Тоді вам, можливо, доведеться використовувати метод грубої сили, щоб знайти IP-адресу, наприклад:

 sudo nmap -sP 192.168.2.0/24 | less  

(а потім шукайте 00: 0c: 0d: ef: 02: 03) - якщо брандмауери та інші подібні речі не заважають!


Я не хочу зараз будити апарат. Але я хочу забезпечити, щоб NIC міг приймати мої повідомлення, щоб, коли я виїжджаю за межі сайту та включав апарат через пакет WOL, я знаю, що він увімкнеться. Ось чому я хочу ping за IP або MAC, а не прокидати його.
Аластор Муді

2
Сплячі машини не реагують на пінг. Якщо машина увімкнена, і ви запитуєте IP (і хост відповідає), він помістить запис у кеш арпу. Якщо запис там відповідає MAC-адресу хоста, є обґрунтований шанс, що він спрацює (заборона інших мережевих брандмауерів, маршрутизаторів та інших фізичних проблем, які можуть призвести до того, що його ether-wakeне можна отримати). Я б фактично отримав доступ до іншого вузла на місці, поклав цільову машину спати та спробував ether-wake. За характером того, як працює WOL, запит потрібно буде надіслати в тій самій підмережі, що і хост
Drav Sloan

2
@DravSloan Bonjour Proxy, доступний на напр., Капсула з яблуками, є досить геніальним способом вирішення цієї проблеми. Машина спить, але маршрутизатор відповідає за це, і прокидається лише тоді, коли проксі вже не може впоратися з цим.
Thorbjørn Ravn Andersen

Не покладайтеся на WOL без попереднього тестування. Замість цього отримайте карту IPMI у цьому випадку.
sjas

0

Моєю програмою був сервер RSYNCing на робочу станцію, щоб отримати каталог документів документа робочої станції ... але робоча станція не мала гарантованої 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

Ось простий скрипт для ping через 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;

0

Це не покладається ні на різні версії arping, ні на складні bash-скрипти:

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

Я скоріше використовував арп-сканування, ніж арп, оскільки, здається, працює набагато швидше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.