33
|
1 package main
|
|
2
|
|
3 import (
|
40
|
4 "bytes"
|
|
5 "flag"
|
|
6 "fmt"
|
|
7 "net"
|
|
8 "log"
|
|
9 "os"
|
33
|
10 )
|
|
11
|
|
12 func main() {
|
40
|
13 var port int
|
|
14 flag.IntVar(&port, "p", 9, "port")
|
|
15 flag.Parse()
|
|
16
|
|
17 if flag.NArg() < 1 {
|
|
18 fmt.Fprintln(os.Stderr, "magicpacket mac-address1 mac-address2 ...")
|
|
19 fmt.Fprintln(os.Stderr, "magicpacket port mac-address1 mac-address2 ...")
|
|
20 os.Exit(1)
|
|
21 }
|
|
22
|
|
23 addr := fmt.Sprintf("255.255.255.255:%d", port)
|
33
|
24
|
40
|
25 for _, mac := range flag.Args() {
|
|
26 hw, err := net.ParseMAC(mac)
|
|
27 if err != nil {
|
|
28 log.Fatal(err)
|
|
29 }
|
|
30 b := [][]byte{bytes.Repeat([]byte{255}, 6), bytes.Repeat([]byte(hw), 16)}
|
|
31 pkt := bytes.Join(b, nil)
|
|
32 conn, err := net.Dial("udp", addr)
|
|
33 if err != nil {
|
|
34 log.Fatal(err)
|
|
35 }
|
|
36 defer conn.Close()
|
|
37 conn.Write(pkt)
|
|
38 }
|
33
|
39 }
|
|
40
|