BashでWake on LANマジックパッケージを実装できますか?以前のカスタムBusyBoxを使用していますが、次のような他のether-wake
シェルコマンドで置き換えることはできますか?
wakeonlan 11:22:33:44:55:66
ベストアンサー1
覚醒したいデバイスに見えるイーサネットパケットを送信できることが必要です。
BusyBoxのコマンドはether-wake
あなたに必要なものです。 BusyBoxにこのエントリがない場合は、BusyBoxを再コンパイルして含めることをお勧めします。
十分に「膨大な」netcatがある場合(BusyBoxは2つの実装のnc
うちの1つを持つことができ、そのうちの1つはTCPのみを処理します)、手動で作成されたUDPパケットをデバイスが接続されているネットワークセグメントのブロードキャストアドレスに送信できます。 。
mac=$(printf '\xed\xcb\xa9\x87\x65\x43') # MAC = ed:cb:a9:87:65:43
wol_packet=$(printf "\xff\xff\xff\xff\xff\xff$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac$mac")
echo "$wol_packet" | nc -u 7 192.0.2.255
このパケットを送信するために乱用する可能性がある別のBusyBoxユーティリティはsyslogd
。
syslogd -n -O /dev/null -l 0 -R 192.0.2.255/7 &
syslogd_pid=$!
logger "$wol_packet"
kill $!
MAC にヌルバイトが含まれていると、パケットを簡単に作成できません。 ()\xff
などMACにないバイトを選択してパイプします。\x42
B
tr
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
bashがある場合(BusyBoxがあるデバイスでは非常にまれです。実際にBusyBoxが提供する他のシェルではなくbashはありますか?)にリダイレクトしてアクセスできます/dev/udp/$hostname/$port
。
echo "$wol_packet" >/dev/udp/192.0.2.255/7