Cygwinにはwakeonlanパッケージがなかったので、自力でなんとかする
WakeonLANのマジックパケットは 0xFF を6回、MACアドレス 6バイトを16回繰り返した 102バイトのバイナリを UDP:9 に流す
22:33:44:55:66:77 を起こすときはこんな感じ
00000000: ff ff ff ff ff ff 22 33 44 55 66 77 22 33 44 55 ......"3DUfw"3DU 00000010: 66 77 22 33 44 55 66 77 22 33 44 55 66 77 22 33 fw"3DUfw"3DUfw"3 00000020: 44 55 66 77 22 33 44 55 66 77 22 33 44 55 66 77 DUfw"3DUfw"3DUfw 00000030: 22 33 44 55 66 77 22 33 44 55 66 77 22 33 44 55 "3DUfw"3DUfw"3DU 00000040: 66 77 22 33 44 55 66 77 22 33 44 55 66 77 22 33 fw"3DUfw"3DUfw"3 00000050: 44 55 66 77 22 33 44 55 66 77 22 33 44 55 66 77 DUfw"3DUfw"3DUfw 00000060: 22 33 44 55 66 77 "3DUfw
これを起こしたいPCのネットワークにsocatとかでブロードキャストすればよい
#!/bin/bash # あとで引数にする MYMAC="22:33:44:55:66:77" MYNET="172.17.255.255" B="\\x${MYMAC//:/\\x}" MAGIC_FF="\xff\xff\xff\xff\xff\xff" # 0xff を6回 MAGIC_MAC=$(printf "%.0s$B" {1..16}) # MACアドレスを16回 echo -en "$MAGIC_FF$MAGIC_MAC" | xxd -g1 echo -en "$MAGIC_FF$MAGIC_MAC" | socat - UDP4-DATAGRAM:$MYNET:9,broadcast
socat で255.255.255.255とか全体にブロードキャストするときはデバイスを指定する必要がある。
本来なら ,so-bindtodevice=eth0 とかオプションを追加する。
CygwinというかWindowsではなんかうまくいかないので、全体とかやめてブロードキャストアドレスを指定する。
送信元をbindするという手もあるが、自分のIPアドレスを都度調べるのも面倒だし