Czy można pingować kartę sieciową przez MAC

28

Mam gdzieś kartę NIC na maszynie Debiana. Maszyna jest wyłączona, ale muszę wiedzieć, czy karta NIC jest włączona, abym mógł później wysłać magiczny pakiet wake-on-lan (z innej maszyny Debiana), aby go obudzić. Mam adres MAC karty. Czy jest jakiś sposób na pingowanie karty Ethernet przez MAC, aby sprawdzić, czy jest włączona?

Próbowałem utworzyć wpis ARP:

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

To nie działało, ponieważ karta sieciowa nie ma tego adresu IP. Tak więc karta sieciowa otrzyma żądanie ping, ale nie odpowie na nie. Czy jest na to jakiś sposób?

Korzystam z pakietu etherwake, aby wysłać wiadomość wake-on-lan.

Alastor Moody
źródło

Odpowiedzi:

23

Zamiast tego możesz mieć więcej szczęścia, korzystając z arpingtego narzędzia . Narzędzie pingdziała na poziomie warstwy 3 modelu OSI , natomiast arpingdziała na warstwie 2.

Jednak dzięki temu narzędziu nadal musisz znać adres IP systemu. Istnieją 2 wersje, standardowa dołączona do większości Uniksów (Aleksieja Kuzniecow) jest wersją, która może obsługiwać tylko adresy IP. Inna wersja (Thomas Habets') rzekomo mogą wyszukiwać za pomocą adresów 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)

arpingdziała podobnie jak pingoprócz wysyłania pakietów ICMP, wysyła pakiety ARP.

Uzyskiwanie adresu IP systemu za pomocą samego MAC

Oto kilka metod wykonywania wyszukiwania wstecznego adresów MAC na IP.

  1. nmap

    $ nmap -sP 192.168.1.0/24
    

    Następnie poszukaj w pamięci podręcznej arp odpowiedniej maszyny arp -an.

  2. fping

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

    Następnie spójrz w swoją pamięć podręczną arp, tak samo jak powyżej.

  3. świst

    $ ping -b -c1 192.168.1.255
    

    Następnie spójrz w swoją pamięć podręczną arp, tak samo jak powyżej.

  4. nbtscan (hosty tylko dla systemu 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
źródło
3
arpingmoże przyjąć adres MAC jako parametr:arping -c 5 38:e7:d8:63:5e:a6
@MichaelMrozek - Zrobiłem to po tym, jak ktoś w zasadzie opublikował moją odpowiedź jako komentarz i nie przeczytał tego, co powiedziałem o 2 wersjach arpingu. Druga odpowiedź wygląda na usuniętą, więc dziękuję za usunięcie moich śmiałych frustracji.
slm
Dzięki za pomoc. Oznaczono to jako rozwiązane. Nie mogliśmy znaleźć opcji WOL w konfiguracji BIOS-u. Tak sądzę: BIOS nie miał włączonej funkcji WOL, ale NIC. Tak więc karta sieciowa budziła się przy pierwszym pakiecie WOL i wysyłała wiadomość do BIOS-u. Ale ponieważ nie zostało włączone w BIOSie, BIOS nic nie zrobił. Od tego momentu karta sieciowa reagowała na ping, ponieważ nie była aktywna, ale maszyna nie. Tak szybkie pytanie: czy BIOS może wyłączyć WOL, a NIC włączyć jednocześnie?
Alastor Moody
1
@AlastorMoody - Powiedziałbym, że prawdopodobnie możesz wyłączyć BIOS WOL z włączoną funkcją WOL NIC. Jeśli jednak BIOS nie obsługuje WOL, nie sądzę, abyś mógł z niego skorzystać, nawet jeśli NIC to robi. Zobacz artykuł w Wikipedii na WOL: en.wikipedia.org/wiki/Wake-on-LAN . Mówi to samo co ja w sekcji „Rozwiązywanie problemów z magicznymi pakietami”.
slm
@niervol: arpingna adres MAC: Tak, istnieją dwie implementacje arping 1. z Linux iputils 2. arping przez Thomasa Habetsa . --- Tylko implementacja 2. może pingować adres MAC, ale taki ping jest bardzo trudny: pingowana maszyna musi jeszcze mieć skonfigurowany protokół TCP / IP (przynajmniej adres IP) i musi być w stanie odpowiedzieć na ping adres IP emisji.
pabouk,
12

Nie można pingować zwykłej karty sieciowej, ponieważ sama karta sieciowa nie wysyła żadnych odpowiedzi.

Tylko działający komputer może wysyłać odpowiedzi

Normalne karty sieciowe nie wysyłają samodzielnie żadnych odpowiedzi. Zawsze potrzebują do tego działającego oprogramowania na komputerze.

Gdy procesor komputera jest wyłączony, nie ma uruchomionego oprogramowania, które wysłałoby odpowiedź na ping.

Wake-on-LAN jest jednokierunkowy

Funkcja Wake-on-LAN pozwala komputerowi częściowo włączyć kartę sieciową w celu odbierania ramek Ethernet i szukać w nich magicznej sekwencji budzenia, ale karta sieciowa nadal nie wysyła żadnej odpowiedzi. Wake-on-LAN jest ściśle jednokierunkowy. Brak wysłanych odpowiedzi.

Wyjątki

Istnieją pewne specjalne karty sieciowe, które same mogą wysyłać odpowiedzi, na przykład takie, które realizują całkowite odciążenie uzgadniania TCP .

pabouk
źródło
1
+1 - to jedyna odpowiedź, która naprawdę odpowiada na pytanie PO. „Wake-on-LAN jest jednokierunkowy”.
Celada,
5

ether-wakeKomenda będzie działać przez adres MAC, więc na pewno (a) nie trzeba będzie adres IP i (b) mogą wysyłać polecenia bez szkody (czy to już zasnąć, budząc będzie miał żadnego wpływu?)

Możesz zobaczyć listę istniejącej pamięci podręcznej arp, używając arp -ani grepując dla twojego MAC, aby uzyskać adres IP hosta docelowego. Ponieważ jednak arp jest pamięcią podręczną, mógł zostać „przekroczony limit czasu” pamięci podręcznej (i nadal „czuwać”). Być może będziesz musiał użyć metody brutalnej siły, aby znaleźć jej adres IP, na przykład:

 sudo nmap -sP 192.168.2.0/24 | less  

(a następnie poszukaj 00: 0c: 0d: ef: 02: 03) - pod warunkiem, że zapory ogniowe i inne tego typu rzeczy nie przeszkadzają!

Drav Sloan
źródło
Nie chcę teraz budzić maszyny. Chcę jednak upewnić się, że karta sieciowa może odbierać moje wiadomości, więc kiedy opuszczę witrynę i włączy maszynę za pośrednictwem pakietu WOL, wiem, że się włączy. Dlatego chcę pingować przez IP lub MAC i nie budzić go.
Alastor Moody
2
Urządzenia do spania nie będą reagować na ping. Jeśli urządzenie jest włączone, a pingujesz według adresu IP (a host odpowiada), umieści wpis w pamięci podręcznej arp. Jeśli wpis tam pasuje do adresu MAC hosta, istnieje uzasadniona szansa, że ​​zadziała (zakaz innych zapór sieciowych, routerów i innych problemów fizycznych, które mogą spowodować, że ether-wakenie dojdzie do niego). W rzeczywistości uzyskałbym dostęp do innego hosta na miejscu, położyłby maszynę docelową na sen i spróbowałbym ether-wake. Z racji tego, jak działa WOL, żądanie i tak będzie musiało zostać wysłane w tej samej podsieci co host
Drav Sloan
2
@DravSloan Bonjour Proxy dostępny np. Na Apples Time Capsule to dość genialny sposób radzenia sobie z tą próbką. Komputer śpi, ale router odpowiada za niego i budzi go tylko wtedy, gdy serwer proxy nie może go już obsłużyć.
Thorbjørn Ravn Andersen
Nie polegaj na WOL bez uprzedniego przetestowania. W takim przypadku raczej dostań kartę IPMI.
sjas
0

Moja aplikacja była serwerem RSYNC do stacji roboczej, aby uzyskać katalog dokumentów stacji roboczej ... ale stacja nie miała gwarantowanego adresu IP, ale miała znany adres MAC (adres IP został wykonany przez DHCP). ten kod używa TYLKO 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
Don Matheson
źródło
0

Oto prosty skrypt do pingowania za pomocą adresu mac. Po prostu zapisz i uruchom np
macping aa:bb:cc:dd:ee:ff

Możesz także połączyć łańcuchowo wynik, aby warunkowo wykonać inne czynności, np .:

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
źródło
0

Nie zależy to od różnych wersji arping ani od skomplikowanych skryptów bash:

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

Użyłem arp-scan zamiast arp, ponieważ wydaje się on działać znacznie szybciej.

Julian Knight
źródło