Refactoring modules

This commit is contained in:
Giuseppe Trotta 2019-02-10 23:58:08 +01:00
parent c0d3c314fc
commit ed652622e2
89 changed files with 186 additions and 138 deletions

27
main.go
View file

@ -35,31 +35,8 @@ func main() {
fmt.Printf("%s (type '%s' for a list of commands)\n\n", tui.Bold(appName), tui.Bold("help"))
sess.Register(modules.NewEventsStream(sess))
sess.Register(modules.NewTicker(sess))
sess.Register(modules.NewUpdateModule(sess))
sess.Register(modules.NewCapletsModule(sess))
sess.Register(modules.NewMacChanger(sess))
sess.Register(modules.NewProber(sess))
sess.Register(modules.NewDiscovery(sess))
sess.Register(modules.NewArpSpoofer(sess))
sess.Register(modules.NewDHCP6Spoofer(sess))
sess.Register(modules.NewDNSSpoofer(sess))
sess.Register(modules.NewSniffer(sess))
sess.Register(modules.NewPacketProxy(sess))
sess.Register(modules.NewAnyProxy(sess))
sess.Register(modules.NewTcpProxy(sess))
sess.Register(modules.NewHttpProxy(sess))
sess.Register(modules.NewHttpsProxy(sess))
sess.Register(modules.NewHttpServer(sess))
sess.Register(modules.NewHttpsServer(sess))
sess.Register(modules.NewRestAPI(sess))
sess.Register(modules.NewWOL(sess))
sess.Register(modules.NewWiFiModule(sess))
sess.Register(modules.NewBLERecon(sess))
sess.Register(modules.NewSynScanner(sess))
sess.Register(modules.NewGPS(sess))
sess.Register(modules.NewMySQLServer(sess))
// Load all modules
modules.LoadModules(sess)
if err = sess.Start(); err != nil {
log.Fatal("%s", err)

View file

@ -1,4 +1,4 @@
package modules
package any_proxy
import (
"github.com/bettercap/bettercap/firewall"

View file

@ -1,4 +1,4 @@
package modules
package api_rest
import (
"context"

View file

@ -1,4 +1,4 @@
package modules
package api_rest
import (
"crypto/subtle"

View file

@ -1,4 +1,4 @@
package modules
package api_rest
import (
"encoding/json"

View file

@ -1,4 +1,4 @@
package modules
package arp_spoof
import (
"bytes"

View file

@ -1,4 +1,4 @@
package modules
package ble
import (
"github.com/bettercap/gatt"

View file

@ -1,7 +1,7 @@
// +build !windows
// +build !darwin
package modules
package ble
import (
"encoding/hex"

View file

@ -1,7 +1,7 @@
// +build !windows
// +build !darwin
package modules
package ble
import (
"github.com/bettercap/bettercap/log"

View file

@ -1,7 +1,7 @@
// +build !windows
// +build !darwin
package modules
package ble
import (
"github.com/bettercap/bettercap/network"

View file

@ -1,7 +1,7 @@
// +build !windows
// +build !darwin
package modules
package ble
import (
"fmt"

View file

@ -1,6 +1,6 @@
// +build windows darwin
package modules
package ble
import (
"github.com/bettercap/bettercap/session"

View file

@ -1,4 +1,4 @@
package modules
package caplets
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package dhcp6_spoof
import (
"bytes"

View file

@ -1,6 +1,7 @@
package modules
package discovery
import (
"github.com/bettercap/bettercap/modules/utils"
"time"
"github.com/bettercap/bettercap/log"
@ -10,7 +11,7 @@ import (
type Discovery struct {
session.SessionModule
selector *ViewSelector
selector *utils.ViewSelector
}
func NewDiscovery(s *session.Session) *Discovery {
@ -52,7 +53,8 @@ func NewDiscovery(s *session.Session) *Discovery {
return d.showMeta(args[0])
}))
d.selector = ViewSelectorFor(&d.SessionModule, "net.show", []string{"ip", "mac", "seen", "sent", "rcvd"}, "ip asc")
d.selector = utils.ViewSelectorFor(&d.SessionModule, "net.show", []string{"ip", "mac", "seen", "sent", "rcvd"},
"ip asc")
return d
}

View file

@ -1,4 +1,4 @@
package modules
package discovery
import (
"fmt"
@ -16,9 +16,9 @@ import (
)
var (
aliveTimeInterval = time.Duration(10) * time.Second
presentTimeInterval = time.Duration(1) * time.Minute
justJoinedTimeInterval = time.Duration(10) * time.Second
AliveTimeInterval = time.Duration(10) * time.Second
PresentTimeInterval = time.Duration(1) * time.Minute
JustJoinedTimeInterval = time.Duration(10) * time.Second
)
type ProtoPair struct {
@ -42,7 +42,7 @@ func (d *Discovery) getRow(e *network.Endpoint, withMeta bool) [][]string {
// if endpoint was not found in ARP at least once
addr = tui.Dim(addr)
mac = tui.Dim(mac)
} else if sinceStarted > (justJoinedTimeInterval*2) && sinceFirstSeen <= justJoinedTimeInterval {
} else if sinceStarted > (JustJoinedTimeInterval*2) && sinceFirstSeen <= JustJoinedTimeInterval {
// if endpoint was first seen in the last 10 seconds
addr = tui.Bold(addr)
mac = tui.Bold(mac)
@ -67,10 +67,10 @@ func (d *Discovery) getRow(e *network.Endpoint, withMeta bool) [][]string {
seen := e.LastSeen.Format("15:04:05")
sinceLastSeen := time.Since(e.LastSeen)
if sinceStarted > aliveTimeInterval && sinceLastSeen <= aliveTimeInterval {
if sinceStarted > AliveTimeInterval && sinceLastSeen <= AliveTimeInterval {
// if endpoint seen in the last 10 seconds
seen = tui.Bold(seen)
} else if sinceLastSeen <= presentTimeInterval {
} else if sinceLastSeen <= PresentTimeInterval {
// if endpoint seen in the last 60 seconds
} else {
// not seen in a while

View file

@ -1,4 +1,4 @@
package modules
package discovery
import (
"github.com/bettercap/bettercap/network"

View file

@ -1,4 +1,4 @@
package modules
package dns_spoof
import (
"bytes"

View file

@ -1,4 +1,4 @@
package modules
package dns_spoof
import (
"bufio"

View file

@ -1,4 +1,4 @@
package modules
package events_stream
import (
"errors"

View file

@ -1,4 +1,4 @@
package modules
package events_stream
import (
"fmt"

View file

@ -1,7 +1,8 @@
package modules
package events_stream
import (
"fmt"
"github.com/bettercap/bettercap/modules/net_sniff"
"os"
"strings"
"time"
@ -9,6 +10,8 @@ import (
"github.com/bettercap/bettercap/network"
"github.com/bettercap/bettercap/session"
"github.com/bettercap/bettercap/modules/syn_scan"
"github.com/google/go-github/github"
"github.com/evilsocket/islazy/tui"
@ -78,12 +81,12 @@ func (s *EventsStream) viewSnifferEvent(e session.Event) {
fmt.Fprintf(s.output, "[%s] [%s] %s\n",
e.Time.Format(eventTimeFormat),
tui.Green(e.Tag),
e.Data.(SnifferEvent).Message)
e.Data.(net_sniff.SnifferEvent).Message)
}
}
func (s *EventsStream) viewSynScanEvent(e session.Event) {
se := e.Data.(SynScanEvent)
se := e.Data.(syn_scan.SynScanEvent)
fmt.Fprintf(s.output, "[%s] [%s] found open port %d for %s\n",
e.Time.Format(eventTimeFormat),
tui.Green(e.Tag),

View file

@ -1,7 +1,7 @@
// +build !windows
// +build !darwin
package modules
package events_stream
import (
"fmt"

View file

@ -1,6 +1,6 @@
// +build windows darwin
package modules
package events_stream
import (
"github.com/bettercap/bettercap/session"

View file

@ -1,4 +1,4 @@
package modules
package events_stream
import (
"bytes"
@ -6,6 +6,7 @@ import (
"encoding/hex"
"encoding/json"
"fmt"
"github.com/bettercap/bettercap/modules/net_sniff"
"net/url"
"regexp"
"strings"
@ -19,7 +20,7 @@ var (
reJsonKey = regexp.MustCompile(`("[^"]+"):`)
)
func (s *EventsStream) shouldDumpHttpRequest(req HTTPRequest) bool {
func (s *EventsStream) shouldDumpHttpRequest(req net_sniff.HTTPRequest) bool {
if s.dumpHttpReqs {
// dump all
return true
@ -37,7 +38,7 @@ func (s *EventsStream) shouldDumpHttpRequest(req HTTPRequest) bool {
return false
}
func (s *EventsStream) shouldDumpHttpResponse(res HTTPResponse) bool {
func (s *EventsStream) shouldDumpHttpResponse(res net_sniff.HTTPResponse) bool {
if s.dumpHttpResp {
return true
} else if strings.Contains(res.ContentType, "text/plain") {
@ -119,8 +120,8 @@ func (s *EventsStream) dumpRaw(body []byte) string {
}
func (s *EventsStream) viewHttpRequest(e session.Event) {
se := e.Data.(SnifferEvent)
req := se.Data.(HTTPRequest)
se := e.Data.(net_sniff.SnifferEvent)
req := se.Data.(net_sniff.HTTPRequest)
fmt.Fprintf(s.output, "[%s] [%s] %s\n",
e.Time.Format(eventTimeFormat),
@ -157,8 +158,8 @@ func (s *EventsStream) viewHttpRequest(e session.Event) {
}
func (s *EventsStream) viewHttpResponse(e session.Event) {
se := e.Data.(SnifferEvent)
res := se.Data.(HTTPResponse)
se := e.Data.(net_sniff.SnifferEvent)
res := se.Data.(net_sniff.HTTPResponse)
fmt.Fprintf(s.output, "[%s] [%s] %s\n",
e.Time.Format(eventTimeFormat),

View file

@ -1,7 +1,8 @@
package modules
package events_stream
import (
"fmt"
"github.com/bettercap/bettercap/modules/wifi"
"strings"
"github.com/bettercap/bettercap/network"
@ -44,7 +45,7 @@ func (s *EventsStream) viewWiFiApEvent(e session.Event) {
}
func (s *EventsStream) viewWiFiClientProbeEvent(e session.Event) {
probe := e.Data.(WiFiProbeEvent)
probe := e.Data.(wifi.WiFiProbeEvent)
desc := ""
if probe.FromAlias != "" {
desc = fmt.Sprintf(" (%s)", probe.FromAlias)
@ -66,7 +67,7 @@ func (s *EventsStream) viewWiFiClientProbeEvent(e session.Event) {
}
func (s *EventsStream) viewWiFiHandshakeEvent(e session.Event) {
hand := e.Data.(WiFiHandshakeEvent)
hand := e.Data.(wifi.WiFiHandshakeEvent)
from := hand.Station.String()
to := hand.AP.String()
@ -91,7 +92,7 @@ func (s *EventsStream) viewWiFiHandshakeEvent(e session.Event) {
}
func (s *EventsStream) viewWiFiClientEvent(e session.Event) {
ce := e.Data.(WiFiClientEvent)
ce := e.Data.(wifi.WiFiClientEvent)
ce.Client.Alias = s.Session.Lan.GetAlias(ce.Client.BSSID())

View file

@ -1,4 +1,4 @@
package modules
package gps
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"github.com/bettercap/bettercap/session"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"bufio"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"io/ioutil"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"net"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"crypto/tls"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"bytes"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"bytes"

View file

@ -1,4 +1,4 @@
package modules
package http_proxy
import (
"net/http"

View file

@ -1,4 +1,4 @@
package modules
package http_server
import (
"context"

View file

@ -1,22 +1,23 @@
package modules
package https_proxy
import (
"github.com/bettercap/bettercap/log"
"github.com/bettercap/bettercap/session"
"github.com/bettercap/bettercap/tls"
"github.com/bettercap/bettercap/modules/http_proxy"
"github.com/evilsocket/islazy/fs"
)
type HttpsProxy struct {
session.SessionModule
proxy *HTTPProxy
proxy *http_proxy.HTTPProxy
}
func NewHttpsProxy(s *session.Session) *HttpsProxy {
p := &HttpsProxy{
SessionModule: session.NewSessionModule("https.proxy", s),
proxy: NewHTTPProxy(s),
proxy: http_proxy.NewHTTPProxy(s),
}
p.AddParam(session.NewIntParameter("https.port",

View file

@ -1,4 +1,4 @@
package modules
package https_server
import (
"context"

View file

@ -1,4 +1,4 @@
package modules
package mac_changer
import (
"fmt"

61
modules/modules.go Normal file
View file

@ -0,0 +1,61 @@
package modules
import (
"github.com/bettercap/bettercap/modules/any_proxy"
"github.com/bettercap/bettercap/modules/api_rest"
"github.com/bettercap/bettercap/modules/arp_spoof"
"github.com/bettercap/bettercap/modules/ble"
"github.com/bettercap/bettercap/modules/caplets"
"github.com/bettercap/bettercap/modules/dhcp6_spoof"
"github.com/bettercap/bettercap/modules/discovery"
"github.com/bettercap/bettercap/modules/dns_spoof"
"github.com/bettercap/bettercap/modules/events_stream"
"github.com/bettercap/bettercap/modules/gps"
"github.com/bettercap/bettercap/modules/http_proxy"
"github.com/bettercap/bettercap/modules/http_server"
"github.com/bettercap/bettercap/modules/https_proxy"
"github.com/bettercap/bettercap/modules/https_server"
"github.com/bettercap/bettercap/modules/mac_changer"
"github.com/bettercap/bettercap/modules/mysql_server"
"github.com/bettercap/bettercap/modules/net_sniff"
"github.com/bettercap/bettercap/modules/packet_proxy"
"github.com/bettercap/bettercap/modules/prober"
"github.com/bettercap/bettercap/modules/syn_scan"
"github.com/bettercap/bettercap/modules/tcp_proxy"
"github.com/bettercap/bettercap/modules/ticker"
"github.com/bettercap/bettercap/modules/update"
"github.com/bettercap/bettercap/modules/wifi"
"github.com/bettercap/bettercap/modules/wol"
"github.com/bettercap/bettercap/session"
)
func LoadModules(sess *session.Session) {
sess.Register(any_proxy.NewAnyProxy(sess))
sess.Register(arp_spoof.NewArpSpoofer(sess))
sess.Register(api_rest.NewRestAPI(sess))
sess.Register(ble.NewBLERecon(sess))
sess.Register(caplets.NewCapletsModule(sess))
sess.Register(dhcp6_spoof.NewDHCP6Spoofer(sess))
sess.Register(discovery.NewDiscovery(sess))
sess.Register(dns_spoof.NewDNSSpoofer(sess))
sess.Register(events_stream.NewEventsStream(sess))
sess.Register(gps.NewGPS(sess))
sess.Register(http_proxy.NewHttpProxy(sess))
sess.Register(http_server.NewHttpServer(sess))
sess.Register(https_proxy.NewHttpsProxy(sess))
sess.Register(https_server.NewHttpsServer(sess))
sess.Register(mac_changer.NewMacChanger(sess))
sess.Register(mysql_server.NewMySQLServer(sess))
sess.Register(net_sniff.NewSniffer(sess))
sess.Register(packet_proxy.NewPacketProxy(sess))
sess.Register(prober.NewProber(sess))
sess.Register(syn_scan.NewSynScanner(sess))
sess.Register(tcp_proxy.NewTcpProxy(sess))
sess.Register(ticker.NewTicker(sess))
sess.Register(update.NewUpdateModule(sess))
sess.Register(wifi.NewWiFiModule(sess))
sess.Register(wol.NewWOL(sess))
}

View file

@ -1,4 +1,4 @@
package modules
package mysql_server
import (
"bufio"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"os"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"github.com/google/gopacket"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"github.com/google/gopacket"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"regexp"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"math/rand"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"bufio"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"encoding/asn1"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"strings"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"regexp"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"github.com/bettercap/bettercap/log"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"github.com/bettercap/bettercap/packets"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package net_sniff
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package packet_proxy
import (
"github.com/bettercap/bettercap/session"

View file

@ -1,6 +1,6 @@
// +build !amd64
package modules
package packet_proxy
import (
"github.com/bettercap/bettercap/session"

View file

@ -1,4 +1,4 @@
package modules
package packet_proxy
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package packet_proxy
import (
"github.com/bettercap/bettercap/session"

View file

@ -1,4 +1,4 @@
package modules
package prober
import (
"sync"

View file

@ -1,4 +1,4 @@
package modules
package prober
import (
"net"

View file

@ -1,4 +1,4 @@
package modules
package prober
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package prober
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package prober
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package syn_scan
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package syn_scan
import (
"github.com/bettercap/bettercap/network"

View file

@ -1,4 +1,4 @@
package modules
package syn_scan
import (
"net"

View file

@ -1,4 +1,4 @@
package modules
package tcp_proxy
import (
"fmt"

View file

@ -1,4 +1,4 @@
package modules
package tcp_proxy
import (
"net"

View file

@ -1,4 +1,4 @@
package modules
package ticker
import (
"time"

View file

@ -1,4 +1,4 @@
package modules
package update
import (
"context"

View file

@ -1,4 +1,4 @@
package modules
package utils
import (
"fmt"

View file

@ -1,7 +1,8 @@
package modules
package wifi
import (
"fmt"
"github.com/bettercap/bettercap/modules/utils"
"net"
"strconv"
"sync"
@ -47,7 +48,7 @@ type WiFiModule struct {
writes *sync.WaitGroup
reads *sync.WaitGroup
chanLock *sync.Mutex
selector *ViewSelector
selector *utils.ViewSelector
}
func NewWiFiModule(s *session.Session) *WiFiModule {
@ -208,7 +209,7 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
return w.Show()
}))
w.selector = ViewSelectorFor(&w.SessionModule, "wifi.show",
w.selector = utils.ViewSelectorFor(&w.SessionModule, "wifi.show",
[]string{"rssi", "bssid", "essid", "channel", "encryption", "clients", "seen", "sent", "rcvd"}, "rssi asc")
w.AddHandler(session.NewModuleHandler("wifi.recon.channel", `wifi\.recon\.channel[\s]+([0-9]+(?:[, ]+[0-9]+)*|clear)`,

View file

@ -1,4 +1,4 @@
package modules
package wifi
import (
"errors"

View file

@ -1,4 +1,4 @@
package modules
package wifi
import (
"bytes"

View file

@ -1,4 +1,4 @@
package modules
package wifi
import (
"bytes"

View file

@ -1,4 +1,4 @@
package modules
package wifi
import (
"net"

View file

@ -1,4 +1,4 @@
package modules
package wifi
import (
"time"

View file

@ -1,4 +1,4 @@
package modules
package wifi
import (
"bytes"

View file

@ -1,7 +1,8 @@
package modules
package wifi
import (
"fmt"
"github.com/bettercap/bettercap/modules/discovery"
"os"
"sort"
"strconv"
@ -26,17 +27,17 @@ func (w *WiFiModule) getRow(station *network.Station) ([]string, bool) {
sinceFirstSeen := time.Since(station.FirstSeen)
bssid := station.HwAddress
if sinceStarted > (justJoinedTimeInterval*2) && sinceFirstSeen <= justJoinedTimeInterval {
if sinceStarted > (discovery.JustJoinedTimeInterval*2) && sinceFirstSeen <= discovery.JustJoinedTimeInterval {
// if endpoint was first seen in the last 10 seconds
bssid = tui.Bold(bssid)
}
seen := station.LastSeen.Format("15:04:05")
sinceLastSeen := time.Since(station.LastSeen)
if sinceStarted > aliveTimeInterval && sinceLastSeen <= aliveTimeInterval {
if sinceStarted > discovery.AliveTimeInterval && sinceLastSeen <= discovery.AliveTimeInterval {
// if endpoint seen in the last 10 seconds
seen = tui.Bold(seen)
} else if sinceLastSeen > presentTimeInterval {
} else if sinceLastSeen > discovery.PresentTimeInterval {
// if endpoint not seen in the last 60 seconds
seen = tui.Dim(seen)
}

View file

@ -1,4 +1,4 @@
package modules
package wifi
import (
"github.com/bettercap/bettercap/network"

View file

@ -1,4 +1,4 @@
package modules
package wol
import (
"fmt"