mirror of
https://github.com/bettercap/bettercap
synced 2025-07-16 10:03:39 -07:00
new: supporting wildcard expressions in dns.spoof module (closes #215)
This commit is contained in:
parent
e80e73879f
commit
b5596d54d2
66 changed files with 6281 additions and 10 deletions
|
@ -4,7 +4,6 @@ import (
|
|||
"bytes"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/bettercap/bettercap/core"
|
||||
|
@ -15,12 +14,14 @@ import (
|
|||
"github.com/google/gopacket"
|
||||
"github.com/google/gopacket/layers"
|
||||
"github.com/google/gopacket/pcap"
|
||||
|
||||
"github.com/gobwas/glob"
|
||||
)
|
||||
|
||||
type DNSSpoofer struct {
|
||||
session.SessionModule
|
||||
Handle *pcap.Handle
|
||||
Domains []string
|
||||
Domains []glob.Glob
|
||||
Address net.IP
|
||||
All bool
|
||||
waitGroup *sync.WaitGroup
|
||||
|
@ -32,6 +33,7 @@ func NewDNSSpoofer(s *session.Session) *DNSSpoofer {
|
|||
SessionModule: session.NewSessionModule("dns.spoof", s),
|
||||
Handle: nil,
|
||||
All: false,
|
||||
Domains: make([]glob.Glob, 0),
|
||||
waitGroup: &sync.WaitGroup{},
|
||||
}
|
||||
|
||||
|
@ -79,6 +81,7 @@ func (s DNSSpoofer) Author() string {
|
|||
func (s *DNSSpoofer) Configure() error {
|
||||
var err error
|
||||
var addr string
|
||||
var domains []string
|
||||
|
||||
if s.Running() {
|
||||
return session.ErrAlreadyStarted
|
||||
|
@ -97,10 +100,18 @@ func (s *DNSSpoofer) Configure() error {
|
|||
return err
|
||||
}
|
||||
|
||||
if err, s.Domains = s.ListParam("dns.spoof.domains"); err != nil {
|
||||
if err, domains = s.ListParam("dns.spoof.domains"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, domain := range domains {
|
||||
if expr, err := glob.Compile(domain); err != nil {
|
||||
return fmt.Errorf("'%s' is not a valid domain glob expression: %s", domain, err)
|
||||
} else {
|
||||
s.Domains = append(s.Domains, expr)
|
||||
}
|
||||
}
|
||||
|
||||
if err, addr = s.StringParam("dns.spoof.address"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -232,12 +243,8 @@ func (s *DNSSpoofer) dnsReply(pkt gopacket.Packet, peth *layers.Ethernet, pudp *
|
|||
}
|
||||
|
||||
func (s *DNSSpoofer) shouldSpoof(domain string) bool {
|
||||
if len(s.Domains) == 1 && s.Domains[0] == "*" {
|
||||
return true
|
||||
}
|
||||
|
||||
for _, d := range s.Domains {
|
||||
if strings.HasSuffix(domain, d) == true {
|
||||
for _, expr := range s.Domains {
|
||||
if expr.Match(domain) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue