diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..86401cb --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module miniwol + +go 1.17 diff --git a/main.go b/main.go new file mode 100644 index 0000000..d300a57 --- /dev/null +++ b/main.go @@ -0,0 +1,51 @@ +package main + +import ( + "fmt" + "net" +) + +func main() { + macStr := "" // Target Computers MAC Address + + // Get a binary representation of that MAC Address + mac, err := net.ParseMAC(macStr) + if err != nil { + panic(err) + } + + // Construct the Magic Packet + packet := make([]byte, 102) + index := 0 + for i := 0; i < 6; i++ { + packet[index] = 0xFF + index++ + } + for i := 0; i < 16; i++ { + for j := 0; j < 6; j++ { + packet[index] = mac[j] + index++ + } + } + + localAddr, err := net.ResolveUDPAddr("udp4", ":9") + if err != nil { + panic(err) + } + + broadcastAddr, err := net.ResolveUDPAddr("udp4", "255.255.255.255:9") // General Broadcast + // broadcastAddr, err := net.ResolveUDPAddr("udp4", "192.168.178.255:9") // Broadcast on most home networks + if err != nil { + panic(err) + } + + conn, err := net.DialUDP("udp4", localAddr, broadcastAddr) + if err != nil { + panic(err) + } + + defer conn.Close() + conn.Write(packet) + + fmt.Println("Successfully sent magic packet") +}