Am undeva un card NIC pe o mașină Debian. Mașina este oprită, dar trebuie să știu dacă cardul NIC este pornit, astfel încât să pot trimite mai târziu un pachet magic wake-on-lan (de la o altă mașină Debian) pentru a-l trezi. Am adresa MAC a cardului. Există vreo modalitate de a face ping pe placa Ethernet de către MAC pentru a vedea dacă este activată?
Am încercat să creez o intrare ARP:
arp -s 192.168.2.2 00-0c-0d-ef-02-03 ping 192.168.2.2
Asta nu a funcționat, deoarece cardul NIC nu are această adresă IP. Deci, cardul NIC ar primi cererea de ping, dar nu i-ar răspunde. Există vreo cale în acest sens?
I folosesc pachetul etherwake pentru a trimite un mesaj wake-on-lan.
Răspunde
S-ar putea să ai mai mult noroc folosind instrumentul arping
în schimb. Instrumentul ping
funcționează la nivelul de nivel 3 al modelului OSI , în timp ce arping
funcționează la nivelul 2.
Totuși, trebuie să cunoașteți adresa IP a sistemului cu acest instrument. Există 2 versiuni ale aceasta, cea standard inclusă în majoritatea Unixes-urilor (Alexey Kuznetsov) este versiunea care se poate ocupa doar de adrese IP. cealaltă versiune (Thomas Habets „) presupune că poate interoga folosind adrese 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
funcționează similar cu ping
, cu excepția cazului în care trimite pachete ICMP, trimite pachete ARP.
Obținerea unui sistem ” IP utilizând doar MAC
Iată câteva metode pentru efectuarea căutării inversă a MAC către IP.
-
nmap
$ nmap -sP 192.168.1.0/24
Apoi căutați în cache-ul dvs. arp mașina corespunzătoare
arp -an
. -
fping
$ fping -a -g 192.168.1.0/24 -c 1
Apoi, căutați în memoria cache arp, la fel ca mai sus.
-
ping
$ ping -b -c1 192.168.1.255
Apoi, căutați în memoria cache arp, la fel ca mai sus.
-
nbtscan (Windows only hosts)
$ 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
Comentarii
Răspuns
Nu puteți face ping la un NIC normal, deoarece NIC singur nu trimite niciun răspuns.
Numai un computer care rulează poate trimite răspunsuri
Cardurile de interfață de rețea normale nu trimit niciun răspuns de la sine. Ei au întotdeauna nevoie de un software care rulează pe computer pentru a face acest lucru.
Când CPU-ul computerului este oprit, atunci nu există niciun software care să trimită un răspuns la un ping.
Wake-on-LAN este unidirecțional
Wake-on-LAN permite computerului să permită doar alimentarea parțială a NIC pentru a primi Cadre Ethernet și căutați secvența de trezire magică în ele, dar NIC nu va trimite în continuare niciun răspuns. Wake-on-LAN este strict unidirecțional. Nu există răspunsuri trimise.
Excepții
Există anumite NIC-uri speciale care ar putea trimite răspunsuri de la sine, de exemplu cele care implementează o descărcare completă a strângerii de mână TCP a>.
Comentarii
- +1 – acesta este singurul răspuns care se adresează cu adevărat OP ‘ întrebarea. ” Wake-on-LAN este unidirecțional „.
Răspuns
Comanda ether-wake
va funcționa în funcție de adresa Mac, deci sigur (a) nu veți avea nevoie de o adresă IP și (b) poate trimite comanda fără daune (dacă este deja treaz, trezirea nu va avea niciun impact?)
Puteți vedea lista cache-ului dvs. arp existent utilizând arp -an
și grepping pentru MAC-ul dvs. pentru a obține IP-ul gazdei țintă. Cu toate acestea, deoarece arp este un cache, este posibil să fi fost „expirat” din cache (și totuși să fie „treaz”). Poate că va trebui să utilizați o metodă de forță brută pentru a-i găsi adresa IP, cum ar fi:
sudo nmap -sP 192.168.2.0/24 | less
(și apoi căutați 00: 0c: 0d: ef: 02: 03) – cu condiția ca paravanele de protecție și alte astfel de lucruri să nu vă împiedice!
Comentarii
- Nu ‘ nu doresc să trezească aparatul chiar acum. Dar vreau să mă asigur că NIC-ul îmi poate primi mesajele, astfel încât atunci când plec de pe site și pornesc aparatul printr-un pachet WOL, știu că va porni. De aceea, ‘ este motivul pentru care vreau să fac ping prin IP sau MAC și să nu-l trezesc.
- Aparatele de dormit nu vor răspunde la ping. Dacă mașina este pornită și faceți ping după IP (și gazda răspunde), va introduce o intrare în cache-ul arp. Dacă intrarea de acolo se potrivește cu adresa MAC a gazdei, există o șansă rezonabilă ca aceasta să funcționeze (fără alte firewall-uri de rețea, routere și alte probleme fizice care ar putea cauza
ether-wake
ajunge la el). Aș avea de fapt acces la o altă gazdă la fața locului, aș pune mașina țintă în repaus și aș încercaether-wake
. După natura funcționării WOL, solicitarea va trebui trimisă oricum pe aceeași subrețea cu gazda - @DravSloan Proxy Bonjour disponibil pe de ex. Apples Time Capsule este un mod destul de ingenios de a rezolva acest proble. Aparatul doarme, dar routerul răspunde pentru el și îl trezește numai atunci când proxy-ul nu mai poate ‘ să-l mai gestioneze.
- Nu ‘ nu se bazează pe WOL fără a fi testat mai întâi. Obțineți mai degrabă un card IPMI în acest caz.
Răspuns
Aplicația mea a fost un server RSYNCing într-o stație de lucru pentru obțineți directorul de documente al stației de lucru … dar stația de lucru nu avea o adresă IP garantată, dar avea o adresă MAC cunoscută (adresa IP a fost făcută de DHCP). Acest cod folosește DOAR 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
Răspuns
Iată un script simplu pentru a face ping prin adresa Mac. Doar salvați și rulați de ex.
macping aa:bb:cc:dd:ee:ff
Puteți, de asemenea, să lanțați rezultatul pentru a face condiționat alte lucruri, de exemplu:
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;
Răspuns
Acest lucru nu se bazează pe diferențe versiuni de arping și nici pe scripturi bash complexe:
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk " { printf $1 } ")
Am folosit arp-scan mai degrabă decât arp, deoarece pare să ruleze mult mai repede.
arping
poate lua o adresă MAC ca parametru:arping -c 5 38:e7:d8:63:5e:a6
arping
la o adresă MAC: Da, există două implementări ale arping 1. din Linux iputils 2. arping de Thomas Habets . — Doar implementarea 2. poate face ping la o adresă MAC, dar un astfel de ping este foarte dificil: mașina ping trebuie să aibă în continuare configurat TCP / IP (cel puțin o adresă IP) și trebuie să fie capabil să răspundă la un ping către o adresă IP difuzată.