W minimalne wymagania można myśleć wolny:
- atakujących wsparcie ekspansji klamra (chyba, że jest v3.5.1 i powyżej).
- Komenda sed (1).
- NetCat.
Zakładając:
- WOL pakiet dla sieci LAN, nadawanie do 255.255.255.255.
Linia komend byłoby:
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000
Wymień $MAC
przez docelowego MAC. Lub, tym razem w poleceniu :-) dwa-liner:
MAC=11:22:33:44:55:66
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b 255.255.255.255 4000
Tak, w sposób bardziej ogólny zapis:
MAC=11:22:33:44:55:66
Broadcast=255.255.255.255
PortNumber=4000
echo -e $(echo $(printf 'f%.0s' {1..12}; printf "$(echo $MAC | sed 's/://g')%.0s" {1..16}) | sed -e 's/../\\x&/g') | nc -w1 -u -b $Broadcast $PortNumber
Objaśnienia:
- WOL magiczny pakiet jest skompilowany z
ffffffffffff
(12 razy f
) a następnie 16 razy docelowy MAC bez dwukropków (:
).
- Komenda
sed
jest tutaj stosowane do usunąć Dwukropki (:
) z MAC i dodać specificator \x
sześciokątną (tak, że 11
staje \x11
, 22
staje \x22
... i tak dalej) przed wysłaniem ciąg do stosu sieciowego.
- Fałszywe wybijanie w pakiecie LAN jest wysyłane do stosu sieciowego , wysyłając go do NetCat. SoCat może być użyty zamiast tego (oczywiście składnia będzie się różnić).
Testowany pracy na Ubuntu, Kali, a nawet Cygwin (Windows 7 SP 1 64 bity).
Aby wziąć pod uwagę:
- Cygwin za Netcat wersja nie potrzeba
-b
parametru.
- Wersja OpenBSD firmy NetCat ma błąd na dzień dzisiejszy (Juy 2015) na transmisję danych (
-b
), więc należy go zastąpić przez wersję NetCat Traditional (pakiet netcat-tradycyjny na instalatorach apt-get).
- W tym przykładzie użyto UDP port 4.000. Numer portu o numerze wydaje się nie mieć znaczenia na WOL.
- Powyższe jednoliniowe polecenie bash powinno działać również dla przebudzenia w sieci LAN przez Internet. W takim przypadku zamień adres IP na docelowy publiczny adres IP i otwórz/prześlij podaną lokację
$PortNumber
(UDP).
echo -e
może być zastąpiony przez printf
.
WOL ciąg magiczny pakiet dla powyższego przykładu:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) No, rzeczywiście, nie jest sed
wyraźnie wymagane. Służy on tutaj do usuwania ":" i dodawania \x
do każdej pary znaków w kutym łańcuchu magicznego łańcucha. Wiem, że istnieją sposoby na zastąpienie sed
przez niektóre rozszerzenia powłoki lub tak.
Czy byłoby możliwe użycie 'bash'' '/ dev/udp' zamiast' netcat'? –
Myślę, że nie jest, ale jest to przedmiotem dyskusji tutaj: http://unix.stackexchange.com/questions/217476/is-it-possible-to-ech-characters-directly-to-network. W skrócie: możesz to zrobić, ale są pewne niestabilności. Tj .: wysłanie '\ x0a' działa jakaś flaga' datagramu break' dla pakietu sieciowego, więc nie możesz wysłać (lub nie wiem jak) WOL dla MAC jak '0a: 11: 22: 33: 44 : 55'. –
To działało świetnie do użytku z sesją bash MobaXTerm (używa cygwin), dziękuję! –