From 549fdc45af0abd1d215ad6cfc348d9482758ae08 Mon Sep 17 00:00:00 2001 From: evilsocket Date: Sun, 9 Sep 2018 13:21:42 +0300 Subject: [PATCH] misc: small fix or general refactoring i did not bother commenting --- modules/net_probe_upnp.go | 20 +++++++++++++------- packets/upnp.go | 39 ++++----------------------------------- 2 files changed, 17 insertions(+), 42 deletions(-) diff --git a/modules/net_probe_upnp.go b/modules/net_probe_upnp.go index ce8889c5..e912dc4a 100644 --- a/modules/net_probe_upnp.go +++ b/modules/net_probe_upnp.go @@ -1,6 +1,7 @@ package modules import ( + "fmt" "net" "github.com/bettercap/bettercap/log" @@ -8,13 +9,18 @@ import ( ) func (p *Prober) sendProbeUPNP(from net.IP, from_hw net.HardwareAddr) { - err, raw := packets.NewUPNPProbe(from, from_hw) - if err != nil { - log.Error("error while sending upnp probe: %v", err) - return - } else if err := p.Session.Queue.Send(raw); err != nil { - log.Error("error sending upnp packet: %s", err) + name := fmt.Sprintf("%s:%d", packets.UPNPDestIP, packets.UPNPPort) + if addr, err := net.ResolveUDPAddr("udp", name); err != nil { + log.Debug("could not resolve %s.", name) + } else if con, err := net.DialUDP("udp", nil, addr); err != nil { + log.Debug("could not dial %s.", name) } else { - log.Debug("sent %d bytes of UPNP probe", len(raw)) + defer con.Close() + if wrote, _ := con.Write(packets.UPNPDiscoveryPayload); wrote > 0 { + p.Session.Queue.TrackSent(uint64(wrote)) + } else { + p.Session.Queue.TrackError() + } } + } diff --git a/packets/upnp.go b/packets/upnp.go index ae5aed87..39748efa 100644 --- a/packets/upnp.go +++ b/packets/upnp.go @@ -3,9 +3,6 @@ package packets import ( "fmt" "net" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" ) const ( @@ -13,40 +10,12 @@ const ( ) var ( - UPNPDestMac = net.HardwareAddr{0x01, 0x00, 0x5e, 0x00, 0x00, 0xfb} - UPNPDestIP = net.ParseIP("239.255.255.250") -) - -func NewUPNPProbe(from net.IP, from_hw net.HardwareAddr) (error, []byte) { - eth := layers.Ethernet{ - SrcMAC: from_hw, - DstMAC: UPNPDestMac, - EthernetType: layers.EthernetTypeIPv4, - } - - ip4 := layers.IPv4{ - Protocol: layers.IPProtocolUDP, - Version: 4, - TTL: 64, - SrcIP: from, - DstIP: UPNPDestIP, - } - - udp := layers.UDP{ - SrcPort: layers.UDPPort(12345), - DstPort: layers.UDPPort(UPNPPort), - } - - payload := []byte("M-SEARCH * HTTP/1.1\r\n" + + UPNPDestMac = net.HardwareAddr{0x01, 0x00, 0x5e, 0x00, 0x00, 0xfb} + UPNPDestIP = net.ParseIP("239.255.255.250") + UPNPDiscoveryPayload = []byte("M-SEARCH * HTTP/1.1\r\n" + fmt.Sprintf("Host: %s:%d\r\n", UPNPDestIP, UPNPPort) + "Man: ssdp:discover\r\n" + "ST: ssdp:all\r\n" + "MX: 2\r\n" + "\r\n") - - if err := udp.SetNetworkLayerForChecksum(&ip4); err != nil { - return err, nil - } - - return Serialize(ð, &ip4, &udp, gopacket.Payload(payload)) -} +)