mirror of
https://github.com/bettercap/bettercap
synced 2025-08-14 02:36:57 -07:00
new: WSD discovery agent for net.probe
This commit is contained in:
parent
632f7700bf
commit
b6adb2b65f
3 changed files with 65 additions and 0 deletions
|
@ -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
|
||||
|
|
26
modules/net_probe_wsd.go
Normal file
26
modules/net_probe_wsd.go
Normal file
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue