diff --git a/modules/net_probe.go b/modules/net_probe.go index 8d7ba32d..048f79d9 100644 --- a/modules/net_probe.go +++ b/modules/net_probe.go @@ -16,6 +16,7 @@ type Probes struct { NBNS bool MDNS bool UPNP bool + WSD bool } type Prober struct { @@ -43,6 +44,10 @@ func NewProber(s *session.Session) *Prober { "true", "Enable UPNP discovery probes.")) + p.AddParam(session.NewBoolParameter("net.probe.wsd", + "true", + "Enable WSD discovery probes.")) + p.AddParam(session.NewIntParameter("net.probe.throttle", "10", "If greater than 0, probe packets will be throttled by this value in milliseconds.")) @@ -96,6 +101,8 @@ func (p *Prober) Configure() error { return err } else if err, p.probes.UPNP = p.BoolParam("net.probe.upnp"); err != nil { return err + } else if err, p.probes.WSD = p.BoolParam("net.probe.wsd"); err != nil { + return err } else { log.Debug("Throttling packets of %d ms.", p.throttle) } @@ -135,6 +142,10 @@ func (p *Prober) Start() error { p.sendProbeUPNP(from, from_hw) } + if p.probes.WSD { + p.sendProbeWSD(from, from_hw) + } + for _, ip := range addresses { if !p.Running() { return diff --git a/modules/net_probe_wsd.go b/modules/net_probe_wsd.go new file mode 100644 index 00000000..eaaf34a4 --- /dev/null +++ b/modules/net_probe_wsd.go @@ -0,0 +1,26 @@ +package modules + +import ( + "fmt" + "net" + + "github.com/bettercap/bettercap/log" + "github.com/bettercap/bettercap/packets" +) + +func (p *Prober) sendProbeWSD(from net.IP, from_hw net.HardwareAddr) { + name := fmt.Sprintf("%s:%d", packets.WSDDestIP, packets.WSDPort) + 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 { + defer con.Close() + if wrote, _ := con.Write(packets.WSDDiscoveryPayload); wrote > 0 { + p.Session.Queue.TrackSent(uint64(wrote)) + } else { + p.Session.Queue.TrackError() + } + } + +} diff --git a/packets/wsd.go b/packets/wsd.go new file mode 100644 index 00000000..fe7df83c --- /dev/null +++ b/packets/wsd.go @@ -0,0 +1,28 @@ +package packets + +import ( + "net" +) + +const ( + WSDPort = 3702 +) + +var ( + WSDDestIP = net.ParseIP("239.255.255.250") + WSDDiscoveryPayload = []byte("" + + "" + + "" + + "urn:schemas-xmlsoap-org:ws:2005:04:discovery" + + "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe" + + "urn:uuid:05a0036e-dcc8-4db8-98b6-0ceeee60a6d9" + + "" + + "" + + "" + + "" + + "") +)