
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
答え2
/dev/udp
bashで認識され、実際にはファイルシステムには存在しないので、試してみてください。
syslogd
-l
サポートさえあればスイッチなしでも使えると思います-R
。
私はsyslogd
ouun-R
がなく、nc
nonorのないbusyboxを持っていますが、bash
まだ閉じ込められています。
答え3
古いHTC dreamで実行されているSSHサーバーがあります。私のビジボックスバージョンにはether-wakeも含まれておらず、ビジボックスをコンパイルするのに十分な技術がありません。幸いなことに、次のコマンドを使用してコンピュータを起動できました。
bash
cat mac2.txt | tr B '\000' >/dev/udp/192.0.1.255/7
私のネットワークでは、ブロードキャストIPが異なることに注意してください。
私のコンピュータにマジックパッケージを含むファイル(mac2.txt)を作成し、SFTP経由でサーバーにプッシュしました。私のMacにはnullバイトがあるので、trを使用してすべてのx42バイトを00に置き換える必要があります。それは魅力のように動作します。