Est-il possible de forger une commande wake on LAN magic packet et de l'envoyer en une commande bash d'une ligne?
Bien sûr, je sais qu'il existe des outils spécifiques pour ce faire qui résolvent le problème sur une seule ligne, mais il pourrait être utile de connaître les exigences minimales pour le forgeage WOL. C'est: comment gérer le réveil sur LAN sans outils spécifiques.
Les exigences minimales Je peux penser:
En supposant:
La ligne de commande serait:
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
Remplacer $MAC
par le MAC de destination. Ou, cette fois dans une commande à deux lignes :-):
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
Donc, dans une notation plus générique:
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
Explications:
ffffffffffff
(12 fois f
) suivi de 16 fois le MAC de destination sans deux-points (:
).sed
est utilisée ici pour supprimer les deux-points (:
) à partir du MAC et pour ajouter le \x
spécificateur hexadécimal (de sorte que 11
devient \x11
, 22
devient \x22
... et ainsi de suite) avant d'envoyer la chaîne à la pile réseau.Testé fonctionnant sur Ubuntu, Kali et même CygWin (Windows 7 SP 1 64 bits).
A prendre en considération:
-b
paramètre.-b
), vous devrez donc le remplacer par la version NetCat Traditional (package netcat-traditional sur les installateurs apt-get).$Broadcast
adresse par l'adresse IP publique de destination, et ouvrez/transférez le $PortNumber
(UDP) à destination.echo -e
peut être remplacé par printf
.Chaîne de paquet magique WOL pour l'exemple ci-dessus:
FFFFFFFFFFFF112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566
(1) Eh bien, en effet, sed
n'est pas explicitement requis. Il est utilisé ici pour supprimer ":" et ajouter \x
à chaque paire de caractères de la chaîne forgée du paquet magique. Je sais qu'il existe des moyens de remplacer sed
par une extension Shell ou quelque chose comme ça.
Le port par défaut pour la transmission de réveil est le port UDP 9.
UDP est le protocole recommandé à utiliser pour WOL car il peut être généré sans sockets bruts assortis de restrictions de sécurité, et le port 9 est recommandé car il correspond à l'ancien protocole de suppression bien connu. Parfois, vous verriez le port 7 utilisé mais cela correspond au protocole d'écho.
Cela signifie que s'il y a des hôtes sur votre réseau qui prennent en charge cet ancien service standard simple, vous obtiendrez un trafic de rétrodiffusion inutile lors de l'utilisation du port 7 mais aucun lors de l'utilisation du port 9. Et puisque Wake-on-LAN est normalement diffusé, vous pouvez obtenir la rétrodiffusion de de nombreux hôtes.
De plus, si vous dépannez WoL avec un renifleur de réseau tel que Wireshark, il décodera correctement les paquets WoL uniquement s'il s'agit de paquets UDP sur le port 9.
source: https://superuser.com/questions/295325/does-it-matter-what-udp-port-a-wol-signal-is-sent-to