Jag har ett NIC-kort på en Debian-maskin någonstans. Maskinen är avstängd, men jag måste veta om NIC-kortet är påslaget så att jag kan skicka ett magiskt paket för uppvakning senare (från en annan Debian-maskin) för att väcka det. Jag har kortets MAC-adress. Finns det något sätt jag kan pinga Ethernet-kortet av MAC för att se om det är på?
Jag försökte skapa en ARP-post:
arp -s 192.168.2.2 00-0c-0d-ef-02-03 ping 192.168.2.2
Det fungerade inte, eftersom NIC-kortet inte har den här IP-adressen. Så NIC-kortet skulle få ping-begäran men skulle inte svara på det. Finns det något sätt att kringgå det?
I använder etherwake-paketet för att skicka ett wake-on-lan-meddelande.
Svar
Du kan ha bättre tur med verktyget arping
istället. Verktyget ping
fungerar på lager 3-nivån i OSI-modellen , medan arping
fungerar i lager 2.
Du behöver fortfarande känna till systemets IP men med det här verktyget. Det finns två versioner av det, den standard som ingår i de flesta Unixes (Alexey Kuznetsov ”s) är den version som bara kan hantera IP-adresser. den andra versionen (Thomas Habets ”) kan förmodligen fråga med 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
fungerar på samma sätt som ping
utom i stället för att skicka ICMP-paket skickar det ARP-paket.
Få ett system ” s IP med bara MAC
Här är några metoder för att göra omvänd sökning av MAC till IP.
-
nmap
$ nmap -sP 192.168.1.0/24
Leta sedan efter i din arp-cache efter motsvarande maskin
arp -an
. -
fping
$ fping -a -g 192.168.1.0/24 -c 1
Titta sedan i din arp-cache, samma som ovan.
-
ping
$ ping -b -c1 192.168.1.255
Titta sedan i din arp-cache, samma som ovan.
-
nbtscan (endast Windows-värdar)
$ 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 inte pinga en vanlig nätverkskort eftersom NIC ensam inte skickar några svar.
Endast en löpande dator kan skicka svar
Normala nätverksgränssnittskort skickar inga svar ensamma. De behöver alltid en löpande programvara på datorn för att göra det.
När datorns CPU stängs av finns det ingen programvara som kan skicka ett svar till en ping.
Wake-on-LAN är enkelriktad
Wake-on-LAN gör att datorn bara låter nätverkskortet vara påslaget för att ta emot Ethernet-ramar och leta efter den magiska väckningssekvensen i dem men NIC skickar fortfarande inte något svar. Wake-on-LAN är strikt enkelriktad. Det finns inga svar skickade.
Undantag
Det finns vissa speciella nätverkskort som kan skicka svar själva som till exempel sådana som implementerar en fullständig TCP-handskakningsavlastning .
Kommentarer
- +1 – detta är det enda svaret som verkligen adresserar OP ’ s fråga. ” Wake-on-LAN är enkelriktad ”.
Svar
ether-wake
-kommandot fungerar med mac-adress, så säkert behöver du (a) inte en IP-adress och (b) kan skicka kommandot utan skada (om det redan är vaken, har det ingen påverkan att väcka det?)
Du kan se listan över din befintliga arp-cache genom att använda arp -an
och grepping för din MAC för att få målvärdens IP. Eftersom arp är en cache kan den dock ha ”time-out” från cachen (och fortfarande vara ”vaken”). Du kan då behöva använda en brute force-metod för att hitta IP: s, såsom:
sudo nmap -sP 192.168.2.0/24 | less
(och leta sedan efter 00: 0c: 0d: ef: 02: 03) – förutsatt att brandväggar och andra sådana saker inte kommer i vägen!
Kommentarer
- Jag don ’ t vill väcka maskinen just nu. Men jag vill se till att nätverkskortet kan ta emot mina meddelanden så att när jag går utanför anläggningen och slår på maskinen via ett WOL-paket vet jag att den kommer att sättas på. Det är ’ varför jag vill pinga med IP eller MAC och inte väcka det.
- Sovmaskiner svarar inte på ping. Om maskinen är påslagen och du pingar med IP (och värden svarar) kommer den att lägga in en post i arp-cachen. Om posten där matchar värdens MAC-adress finns det en rimlig chans att den kommer att fungera (spärra andra nätverksbrandväggar, routrar och andra fysiska problem som kan orsaka att
ether-wake
inte nå det). Jag skulle faktiskt få tillgång till en annan värd på plats, sätta målmaskinen i viloläge och försökaether-wake
. Av typen WOL fungerar måste förfrågan skickas i samma undernät som värden ändå - @DravSloan Bonjour Proxy tillgänglig på t.ex. Apples Time Capsule är ett ganska genialt sätt att hantera detta problem. Maskinen sover men routern svarar för det och väcker den bara när proxyn kan ’ t hantera den längre.
- Don ’ lita inte på WOL utan att testa det först. Skaffa snarare ett IPMI-kort i så fall.
Svar
Min applikation var en server som RSYNCing till en arbetsstation för att hämta arbetsstationens dokumentkatalog … men arbetsstationen hade ingen garanterad IP-adress men hade en känd MAC-adress (IP-adressen gjordes av DHCP). den här koden använder ENDAST 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
Här är ett enkelt skript att pinga via mac-adress. Spara bara och kör t.ex. macping aa:bb:cc:dd:ee:ff
Du kan också kedja resultatet för att villkorligt göra andra saker, t.ex.:
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
Detta förlitar sig inte på olika versioner av arping eller på komplexa bash-skript:
ping $(arp-scan --localnet | grep 80:1f:02:fa:90:b7 | awk " { printf $1 } ")
Jag har använt arp-scan snarare än arp eftersom det verkar springa mycket snabbare.
arping
kan ta en MAC-adress som parameter:arping -c 5 38:e7:d8:63:5e:a6
arping
till en MAC-adress: Ja, det finns två implementeringar av arping 1. från Linux iputils 2. arping av Thomas Habets . — Endast implementeringen 2. kan pinga en MAC-adress men en sådan ping är väldigt knepig: Den pingade maskinen måste fortfarande ha TCP / IP konfigurerad (åtminstone en IP-adress) och den måste vara kan svara på ett ping till en IP-adress för sändningar.