From 6007849d7912512f27965abfa2bf07450e61eebd Mon Sep 17 00:00:00 2001 From: jedrw Date: Mon, 3 Feb 2025 00:58:18 +0000 Subject: [PATCH] refactor: move magicpacket code to pkg dir --- cmd/gowake/gowake.go | 6 +-- cmd/listen/listen.go | 6 +-- listen.go | 29 -------------- pkg/magicpacket/listen.go | 38 +++++++++++++++++++ .../magicpacket/magicpacket.go | 4 +- send.go => pkg/magicpacket/send.go | 4 +- 6 files changed, 48 insertions(+), 39 deletions(-) delete mode 100644 listen.go create mode 100644 pkg/magicpacket/listen.go rename magicpacket.go => pkg/magicpacket/magicpacket.go (86%) rename send.go => pkg/magicpacket/send.go (72%) diff --git a/cmd/gowake/gowake.go b/cmd/gowake/gowake.go index fee4631..fabdb2e 100644 --- a/cmd/gowake/gowake.go +++ b/cmd/gowake/gowake.go @@ -4,8 +4,8 @@ import ( "fmt" "regexp" - "github.com/jedrw/gowake" "github.com/jedrw/gowake/cmd/listen" + "github.com/jedrw/gowake/pkg/magicpacket" "github.com/spf13/cobra" ) @@ -33,14 +33,14 @@ var gowakeCmd = &cobra.Command{ } // Build packet - mp, err := gowake.NewMagicPacket(args[0]) + mp, err := magicpacket.New(args[0]) if err != nil { fmt.Println(err.Error()) return } // Send packet - err = gowake.SendMagicPacket(mp, ip, port) + err = magicpacket.Send(mp, ip, port) if err != nil { fmt.Println(err.Error()) } diff --git a/cmd/listen/listen.go b/cmd/listen/listen.go index c7ca448..c078eb1 100644 --- a/cmd/listen/listen.go +++ b/cmd/listen/listen.go @@ -3,7 +3,7 @@ package listen import ( "fmt" - "github.com/jedrw/gowake" + "github.com/jedrw/gowake/pkg/magicpacket" "github.com/spf13/cobra" ) @@ -15,13 +15,13 @@ var ListenCmd = &cobra.Command{ cont, _ := cmd.Flags().GetBool("continuous") fmt.Printf("Listening for magic packets on port %d:\n", port) for { - remote, mac, err := gowake.Listen(port) + remote, mac, err := magicpacket.Listen(port) if err != nil { if err.Error() == fmt.Sprintf("listen udp 0.0.0.0:%d: bind: permission denied", port) { fmt.Println("Please run as elevated user") return } else { - fmt.Println(err.Error()) + fmt.Println(err) return } } diff --git a/listen.go b/listen.go deleted file mode 100644 index a0566b2..0000000 --- a/listen.go +++ /dev/null @@ -1,29 +0,0 @@ -package gowake - -import ( - "net" -) - -func Listen(port int) (*net.UDPAddr, string, error) { - addr := net.UDPAddr{ - IP: net.ParseIP("0.0.0.0"), - Port: port, - } - - listener, err := net.ListenUDP("udp", &addr) - if err != nil { - return nil, "", err - } - defer listener.Close() - - magicPacket := MagicPacket{} - remote := &net.UDPAddr{} - for { - _, remote, err = listener.ReadFromUDP(magicPacket[:]) - if err != nil { - return remote, "", err - } else { - return remote, net.HardwareAddr.String(magicPacket[96:]), err - } - } -} diff --git a/pkg/magicpacket/listen.go b/pkg/magicpacket/listen.go new file mode 100644 index 0000000..4c0918a --- /dev/null +++ b/pkg/magicpacket/listen.go @@ -0,0 +1,38 @@ +package magicpacket + +import ( + "bytes" + "fmt" + "net" +) + +func Listen(port int) (*net.UDPAddr, string, error) { + addr := net.UDPAddr{ + IP: net.ParseIP("0.0.0.0"), + Port: port, + } + + listener, err := net.ListenUDP("udp", &addr) + if err != nil { + return nil, "", err + } + defer listener.Close() + + var magicPacket MagicPacket + remote := &net.UDPAddr{} + _, remote, err = listener.ReadFromUDP(magicPacket[:]) + if err != nil { + return remote, "", err + } + + macLength := 6 + offset := 6 + for i := 0; i < 16; i++ { + if !bytes.Equal(magicPacket[offset:offset+macLength], magicPacket[96:]) { + return remote, "", fmt.Errorf("received malformed magicpacket from %v", remote) + } + offset += 6 + } + + return remote, net.HardwareAddr.String(magicPacket[96:]), err +} diff --git a/magicpacket.go b/pkg/magicpacket/magicpacket.go similarity index 86% rename from magicpacket.go rename to pkg/magicpacket/magicpacket.go index 8bd7539..bbf6f8d 100644 --- a/magicpacket.go +++ b/pkg/magicpacket/magicpacket.go @@ -1,4 +1,4 @@ -package gowake +package magicpacket import ( "fmt" @@ -7,7 +7,7 @@ import ( type MagicPacket [102]byte -func NewMagicPacket(mac string) (MagicPacket, error) { +func New(mac string) (MagicPacket, error) { // Parse mac address hwAddr, err := net.ParseMAC(mac) if err != nil { diff --git a/send.go b/pkg/magicpacket/send.go similarity index 72% rename from send.go rename to pkg/magicpacket/send.go index e6f599d..7749685 100644 --- a/send.go +++ b/pkg/magicpacket/send.go @@ -1,11 +1,11 @@ -package gowake +package magicpacket import ( "fmt" "net" ) -func SendMagicPacket(packet MagicPacket, ip string, port int) error { +func Send(packet MagicPacket, ip string, port int) error { conn, err := net.Dial("udp", fmt.Sprintf("%s:%d", ip, port)) if err != nil { return err