揮発性のメモ2

最近知った知識を さも昔から知ってた風にメモ書きしていく

CygwinからWake-on-LANをおこなう

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アドレスを都度調べるのも面倒だし