Jeg har et NIC-kort på en Debian-maskin et sted. Maskinen er slått av, men jeg må vite om NIC-kortet er slått på slik at jeg senere kan sende en wake-on-lan-magisk pakke (fra en annen Debian-maskin) for å vekke den. Jeg har MAC-adressen til kortet. Er det noen måte jeg kan pinge ethernet-kortet av MAC for å se om det er på?
Jeg prøvde å lage en ARP-oppføring:
arp -s 192.168.2.2 00-0c-0d-ef-02-03 ping 192.168.2.2
Det fungerte ikke, siden NIC-kortet ikke har denne ip-adressen. Så NIC-kortet ville motta ping-forespørselen, men ville ikke svare på det. Er det noen vei rundt dette?
I bruker etherwake-pakken til å sende en wake-on-lan-melding.
Svar
Du kan ha bedre lykke med verktøyet arping
i stedet. Verktøyet ping
fungerer på lag 3-nivå i OSI-modellen , mens arping
fungerer i lag 2.
Du trenger fortsatt å vite IP-en til systemet, men med dette verktøyet. Det er to versjoner av det, den standard som følger med de fleste Unixes (Alexey Kuznetsov «s) er versjonen som bare kan håndtere IP-adresser. den andre versjonen (Thomas Habets «) kan angivelig spørre ved hjelp av MAC-adresser.
$ 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
fungerer på samme måte som ping
bortsett fra i stedet for å sende ICMP-pakker, sender den ARP-pakker.
Få et system » s IP bruker bare MAC
Her er et par metoder for å gjøre omvendt oppslag av MAC til IP.
-
nmap
$ nmap -sP 192.168.1.0/24
Se deretter i arp-cachen din for den tilsvarende maskinen
arp -an
. -
fping
$ fping -a -g 192.168.1.0/24 -c 1
Så se i arp-cachen din, samme som ovenfor.
-
ping
$ ping -b -c1 192.168.1.255
Se deretter i arp-cachen din, samme som ovenfor.
-
nbtscan (bare Windows er verter)
$ 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
Kommentarer
Svar
Du kan ikke pinge et normalt nettverk fordi NIC alene ikke sender noen svar.
Bare en datamaskin som kjører kan sende svar
Vanlige nettverksgrensesnittkort sender ikke svar alene. De trenger alltid en programvare som kjører på datamaskinen for å gjøre det.
Når datamaskinens CPU er slått av, er det ingen programvare som kjører som vil sende et svar til en ping.
Wake-on-LAN er ensrettet
Wake-on-LAN lar datamaskinen bare la nettverkskortet være delvis slått på for å motta Ethernet-rammer og se etter den magiske vekke-sekvensen i dem, men NIC vil fortsatt ikke sende noe svar. Wake-on-LAN er strengt ensrettet. Det er ingen svar sendt.
Unntak
Det er visse spesielle NIC-er som kan sende svar av seg selv som for eksempel de som implementerer en komplett TCP-håndtrykkavlastning .
Kommentarer
- +1 – dette er det eneste svaret som virkelig adresserer OP ‘ s spørsmål. » Wake-on-LAN er ensrettet «.
Svar
ether-wake
-kommandoen vil fungere etter mac-adresse, så sikkert (a) trenger du ikke en IP-adresse og (b) kan sende kommandoen uten skade (hvis den allerede er våken, vil den ikke våkne?)
Du kan se listen over din eksisterende arp-cache ved å bruke arp -an
og grepping for din MAC for å få IP-adressen til målverten. Men fordi arp er en hurtigbuffer, kan den ha blitt «tidsavbrutt» fra hurtigbufferen (og fremdeles være «våken»). Det kan hende du må bruke en brute force-metode for å finne IP-en, for eksempel:
sudo nmap -sP 192.168.2.0/24 | less
(og se etter 00: 0c: 0d: ef: 02: 03) – forutsatt at brannmurer og andre slike ting ikke kommer i veien!
Kommentarer
- Jeg don ‘ t vil vekke maskinen akkurat nå. Men jeg vil sikre at NIC kan motta meldingene mine, slik at når jeg går utenfor stedet og slår på maskinen via en WOL-pakke, vet jeg at den kommer til å slå på. Det er ‘ hvorfor jeg vil pinge med IP eller MAC og ikke vekke det.
- Sovemaskiner vil ikke svare på ping. Hvis maskinen er slått på og du pinger etter IP (og verten svarer), vil den legge inn en oppføring i arp-cachen. Hvis oppføringen der samsvarer med MAC-adressen til verten, er det en rimelig sjanse for at den vil fungere (sperring av andre nettverksbrannmurer, rutere og andre fysiske problemer som kan føre til at
ether-wake
ikke nå det). Jeg ville faktisk få tilgang til en annen vert på stedet, sette maskinen i dvale og prøveether-wake
. Av karakteren til hvordan WOL fungerer, må forespørselen sendes på samme delnett som verten uansett - @DravSloan Bonjour Proxy tilgjengelig på f.eks. Apples Time Capsule er en ganske genial måte å håndtere dette problemet på. Maskinen sover, men ruteren reagerer på den, og vekker den bare når proxyen kan ‘ t håndtere den lenger.
- Don ‘ ikke stole på WOL uten å ha testet den først. Skaff deg heller et IPMI-kort i så fall.
Svar
Programmet mitt var en server som RSYNCing til en arbeidsstasjon for å få arbeidsstasjonens dokumentkatalog … men arbeidsstasjonen hadde ikke en garantert IP-adresse, men hadde en kjent MAC-adresse (IP-adresse ble utført av DHCP). Denne koden bruker KUN 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
Svar
Her er et enkelt skript å pinge via mac-adresse. Bare lagre og kjør f.eks. macping aa:bb:cc:dd:ee:ff
Du kan også kjede resultatet for å gjøre andre ting betinget, for eksempel:
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;
Svar
Dette stoler ikke på forskjellige versjoner av arping eller på komplekse bash-skript:
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk " { printf $1 } ")
Jeg har brukt arp-scan i stedet for arp, da det ser ut til å løpe mye raskere.
arping
kan ta en MAC-adresse som parameter:arping -c 5 38:e7:d8:63:5e:a6
arping
til en MAC-adresse: Ja, det er to implementeringer av arping 1. fra Linux iputils 2. arping av Thomas Habets . — Bare implementeringen av 2. kan pinge en MAC-adresse, men en slik ping er veldig vanskelig: Den pingede maskinen må fortsatt ha TCP / IP konfigurert (i det minste en IP-adresse), og den må være i stand til å svare på et ping til en kringkastet IP-adresse.