33
|
1 package main
|
|
2
|
|
3 import (
|
|
4 "bytes"
|
|
5 "fmt"
|
|
6 "net"
|
|
7 "log"
|
|
8 "os"
|
|
9 )
|
|
10
|
|
11 func main() {
|
|
12 if len(os.Args) < 2 {
|
|
13 fmt.Fprintln(os.Stderr, "wol mac-address1 mac-address2 ...")
|
|
14 os.Exit(1)
|
|
15 }
|
|
16 for i, m := range os.Args {
|
|
17 if i == 0 {
|
|
18 continue
|
|
19 }
|
|
20 hw, err := net.ParseMAC(m)
|
|
21 if err != nil {
|
|
22 log.Fatal(err)
|
|
23 }
|
|
24
|
|
25 b := [][]byte{bytes.Repeat([]byte{255}, 6), bytes.Repeat([]byte(hw), 16)}
|
|
26 pkt := bytes.Join(b, nil)
|
|
27
|
|
28 conn, err := net.Dial("udp", "255.255.255.255:9")
|
|
29 if err != nil {
|
|
30 log.Fatal(err)
|
|
31 }
|
|
32 defer conn.Close()
|
|
33
|
|
34 conn.Write(pkt)
|
|
35 }
|
|
36 }
|
|
37
|