web-dev-qa-db-fra.com

Commande Bash sur une ligne pour envoyer un paquet magique de réveil sur LAN sans outil spécifique

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.

19

Les exigences minimales Je peux penser:

  • Bash supportant l'expansion des accolades (je pense que c'est la version 3.5.1 et supérieure).
  • La commande sed (1).
  • NetCat .

En supposant:

  • Package WOL pour LAN, diffusé au 255.255.255.255.

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:

  • Le paquet magique WOL est composé de ffffffffffff (12 fois f) suivi de 16 fois le MAC de destination sans deux-points (:).
  • La commande 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.
  • Le package de réveil falsifié sur LAN est envoyé à la pile réseau en le canalisant vers NetCat . SoCat peut être utilisé à la place (la syntaxe sera différente, bien sûr).

Testé fonctionnant sur Ubuntu, Kali et même CygWin (Windows 7 SP 1 64 bits).

A prendre en considération:

  • La version NetCat de CygWin n'a pas besoin de -b paramètre.
  • La version OpenBSD de NetCat a un bogue comme aujourd'hui (Juy 2015) sur l'envoi de données de diffusion (-b), vous devrez donc le remplacer par la version NetCat Traditional (package netcat-traditional sur les installateurs apt-get).
  • Cet exemple utilise le port UDP 4.000. Le numéro de port spécifique ne semble pas être important sur WOL.
  • La commande bash d'une ligne ci-dessus devrait également fonctionner pour le réveil sur LAN via Internet . Dans ce cas, remplacez $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.

25

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

0
R4C3R