2015-07-23 11 views
14

Czy to możliwe, aby ukształtować Wake on LAN magicznego pakietu i przesłać go w zaledwie bash polecenia jednej linii?Bash polecenia jedna linia wysłać Wake on LAN magicznego pakietu bez specjalnego narzędzia

Oczywiście wiem, że istnieją specjalne narzędzia do tego, które rozwiązują problem w jednym wierszu, ale może być przydatne poznanie minimalnych wymagań dotyczących kowalstwa WOL. Oto, jak radzić sobie z wybudzaniem w sieci LAN bez użycia specjalnych narzędzi.

Odpowiedz

19

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 \xsześ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.

+0

Czy byłoby możliwe użycie 'bash'' '/ dev/udp' zamiast' netcat'? –

+0

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'. –

+0

To działało świetnie do użytku z sesją bash MobaXTerm (używa cygwin), dziękuję! –