ウェイクオンランマジックパケットをbashに実装することは可能ですか?古い、カスタマイズされたBusyBoxを使用していますが、ありませんether-wake
。次のような他のシェルコマンドで置き換えることは可能ですか?
wakeonlan 11:22:33:44:55:66
ウェイクオンランマジックパケットをbashに実装することは可能ですか?古い、カスタマイズされたBusyBoxを使用していますが、ありませんether-wake
。次のような他のシェルコマンドで置き換えることは可能ですか?
wakeonlan 11:22:33:44:55:66
回答:
起動したいデバイスから見えるイーサネットパケットを送信できるものが必要です。
ether-wake
BusyBox のコマンドは、まさにあなたが求めているものです。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ではなく、MACにないバイトを選択して\x42
(B
)と言い、パイプを通過しtr
ます。
echo "$wol_packet" | tr B '\000' | nc -u 7 192.0.2.255
実際にbashがある場合(BusyBoxが搭載されたデバイスでは非常に珍しいです。BusyBoxが提供する別のシェルではなく、本当にbashを持っていますか?)、にリダイレクトすることでUDPパケットを送信できます/dev/udp/$hostname/$port
。
echo "$wol_packet" >/dev/udp/192.0.2.255/7
古いHTCドリームでsshサーバーを実行しています。私のバージョンのbusyboxには、ether-wakeも含まれていなかったため、自分のbusyboxをコンパイルするのに十分なスキルがありません。幸いにも、私は次の方法でPCをウェイクアップできました。
bash
cat mac2.txt | tr B '\000' >/dev/udp/192.0.1.255/7
ブロードキャストIPが私のネットワークで異なることに注意してください。
私は自分のPCにマジックパケットを含むファイル(mac2.txt)を作成し、SFTP経由でサーバーにプッシュしました。私のMacにはnullバイトがあるので、trを使用してすべてのx42バイトを00に置き換える必要があります。これは魅力のように機能しました。