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 ją obudzić. Mam adres MAC karty. Czy istnieje sposób, w jaki mogę wysłać ping do karty sieciowej za pomocą adresu 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 zadziałało, ponieważ karta NIC nie ma tego adresu IP. Więc karta NIC otrzymałaby żądanie ping, ale nie odpowiedziałaby na nie. Czy jest jakiś sposób na obejście tego?
I używam pakietu etherwake do wysyłania wiadomości wake-on-lan.
Odpowiedź
Możesz mieć więcej szczęścia używając tego narzędzia Zamiast tego arping
. Narzędzie ping
działa na poziomie 3 warstwy modelu OSI , podczas gdy arping
działa w warstwie 2.
Nadal musisz znać adres IP systemu, jednak z tym narzędziem. Istnieją 2 wersje to, standardowa wersja dołączona do większości Uniksów (Alexey Kuznetsov) jest wersją, która radzi sobie tylko z adresami IP. inna wersja (Thomas Habets „) przypuszczalnie może wykonywać zapytania przy użyciu 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)
arping
działa podobnie do ping
z tym wyjątkiem, że zamiast wysyłać pakiety ICMP, wysyła pakiety ARP.
Pobieranie systemu ” s IP używając tylko adresu MAC
Oto kilka metod odwrotnego wyszukiwania adresu MAC na IP.
-
nmap
$ nmap -sP 192.168.1.0/24
Następnie poszukaj w pamięci podręcznej arp odpowiedniej maszyny
arp -an
. -
fping
$ fping -a -g 192.168.1.0/24 -c 1
Następnie zajrzyj do pamięci podręcznej arp, tak samo jak powyżej.
-
ping
$ ping -b -c1 192.168.1.255
Następnie zajrzyj do pamięci podręcznej arp, tak samo jak powyżej.
-
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
Komentarze
Odpowiedź
Nie możesz pingować zwykłej karty sieciowej, ponieważ sama karta sieciowa nie wysyła żadnych odpowiedzi.
Tylko uruchomiony komputer może wysyłać odpowiedzi
Zwykłe karty sieciowe same nie wysyłają 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
Wake-on-LAN pozwala komputerowi na częściowe włączenie karty sieciowej w celu odbioru Ramki Ethernet i poszukaj w nich magicznej sekwencji budzenia, ale karta sieciowa nadal nie wyśle żadnej odpowiedzi. Funkcja Wake-on-LAN jest ściśle jednokierunkowa. Brak wysłanych odpowiedzi.
Wyjątki
Istnieją specjalne karty sieciowe, które mogą samodzielnie wysyłać odpowiedzi, na przykład implementujące kompletne odciążanie uzgadniania TCP .
Komentarze
- +1 – to jedyna odpowiedź, która naprawdę odnosi się do OP ' pytanie. ” Wake-on-LAN jest jednokierunkowy „.
Odpowiedź
Polecenie ether-wake
będzie działać na adresach mac, więc z pewnością (a) nie będziesz potrzebować adresu IP oraz (b) może wysłać polecenie bez szkody (jeśli jest już obudzona, budzenie nie będzie miało żadnego wpływu?)
Możesz zobaczyć listę istniejącej pamięci podręcznej arp, używając arp -an
i grepping dla twojego MAC, aby uzyskać adres IP hosta docelowego. Jednakże, ponieważ arp jest pamięcią podręczną, mógł zostać przekroczony limit czasu pamięci podręcznej (i nadal być „aktywny”). Wtedy może być konieczne użycie metody brutalnej siły, aby znaleźć 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ą!
Komentarze
- Nie ' nie chcę teraz obudzić komputera. Ale chcę mieć pewność, że karta sieciowa będzie mogła odbierać moje wiadomości, tak aby gdy wychodzę poza siedzibę firmy i włączam komputer za pośrednictwem pakietu WOL, wiem, że się włączy. To ' jest powodem, dla którego chcę pingować przez IP lub MAC i nie budzić go.
- Uśpione maszyny nie odpowiadają na ping. Jeśli maszyna jest włączona i wykonujesz ping z adresu IP (a host odpowie), umieści wpis w pamięci podręcznej arp. Jeśli wpis w tym miejscu jest zgodny z adresem MAC hosta, istnieje uzasadnione prawdopodobieństwo, że zadziała (zablokowanie innych zapór sieciowych, routerów i innych problemów fizycznych, które mogą spowodować, że
ether-wake
nie będzie osiągnąć to). W rzeczywistości uzyskałbym dostęp do innego hosta na miejscu, uśpiłbym maszynę docelową i spróbowałbym wykonaćether-wake
. Ze względu na sposób działania WOL żądanie i tak będzie musiało zostać wysłane do tej samej podsieci co host - @DravSloan, a serwer proxy Bonjour dostępny np. Apples Time Capsule to dość genialny sposób na rozwiązanie tego problemu. Maszyna śpi, ale router odpowiada na nią i budzi ją tylko wtedy, gdy serwer proxy nie może ' nie obsługiwać go już.
- Nie ' nie polegaj na WOL bez uprzedniego przetestowania. W takim przypadku raczej weź kartę IPMI.
Odpowiedź
Moja aplikacja była serwerem RSYNC łączącym się ze stacją roboczą w celu pobierz katalog dokumentów stacji roboczej … ale stacja robocza nie miała gwarantowanego adresu IP, ale miała znany adres MAC (adres IP został utworzony przez DHCP). ten kod używa TYLKO polecenia 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
Odpowiedź
Oto prosty skrypt do pingowania przez adres mac. Po prostu zapisz i uruchom np.
macping aa:bb:cc:dd:ee:ff
Możesz także połączyć wynik w łańcuch, 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;
Odpowiedź
To nie polega na różnicach wersje arping ani na złożonych skryptach bash:
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk " { printf $1 } ")
Używałem raczej arp-scan niż arp, ponieważ wydaje się, że działa dużo szybciej.
arping
może przyjąć adres MAC jako parametr:arping -c 5 38:e7:d8:63:5e:a6
arping
na adres MAC: Tak, istnieją dwie implementacje arping 1. z Linuksa iputils 2. arping autorstwa Thomasa Habetsa . — Tylko implementacja 2. może pingować adres MAC, ale taki ping jest bardzo trudny: pingowana maszyna nadal musi mieć skonfigurowany protokół TCP / IP (przynajmniej adres IP) i musi być w stanie odpowiedzieć na ping do rozgłoszeniowego adresu IP.