Refactor if/else and switch for the modules package

This commit is contained in:
Edznux 2018-10-23 06:09:10 +02:00
commit 191e8eacff
34 changed files with 326 additions and 199 deletions

View file

@ -82,17 +82,23 @@ func (p *AnyProxy) Configure() error {
if p.Running() { if p.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, iface = p.StringParam("any.proxy.iface"); err != nil { }
if err, iface = p.StringParam("any.proxy.iface"); err != nil {
return err return err
} else if err, protocol = p.StringParam("any.proxy.protocol"); err != nil { }
if err, protocol = p.StringParam("any.proxy.protocol"); err != nil {
return err return err
} else if err, srcPort = p.IntParam("any.proxy.src_port"); err != nil { }
if err, srcPort = p.IntParam("any.proxy.src_port"); err != nil {
return err return err
} else if err, dstPort = p.IntParam("any.proxy.dst_port"); err != nil { }
if err, dstPort = p.IntParam("any.proxy.dst_port"); err != nil {
return err return err
} else if err, srcAddress = p.StringParam("any.proxy.src_address"); err != nil { }
if err, srcAddress = p.StringParam("any.proxy.src_address"); err != nil {
return err return err
} else if err, dstAddress = p.StringParam("any.proxy.dst_address"); err != nil { }
if err, dstAddress = p.StringParam("any.proxy.dst_address"); err != nil {
return err return err
} }

View file

@ -128,25 +128,35 @@ func (api *RestAPI) Configure() error {
if api.Running() { if api.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, ip = api.StringParam("api.rest.address"); err != nil { }
if err, ip = api.StringParam("api.rest.address"); err != nil {
return err return err
} else if err, port = api.IntParam("api.rest.port"); err != nil { }
if err, port = api.IntParam("api.rest.port"); err != nil {
return err return err
} else if err, api.allowOrigin = api.StringParam("api.rest.alloworigin"); err != nil { }
if err, api.allowOrigin = api.StringParam("api.rest.alloworigin"); err != nil {
return err return err
} else if err, api.certFile = api.StringParam("api.rest.certificate"); err != nil { }
if err, api.certFile = api.StringParam("api.rest.certificate"); err != nil {
return err return err
} else if api.certFile, err = fs.Expand(api.certFile); err != nil { }
if api.certFile, err = fs.Expand(api.certFile); err != nil {
return err return err
} else if err, api.keyFile = api.StringParam("api.rest.key"); err != nil { }
if err, api.keyFile = api.StringParam("api.rest.key"); err != nil {
return err return err
} else if api.keyFile, err = fs.Expand(api.keyFile); err != nil { }
if api.keyFile, err = fs.Expand(api.keyFile); err != nil {
return err return err
} else if err, api.username = api.StringParam("api.rest.username"); err != nil { }
if err, api.username = api.StringParam("api.rest.username"); err != nil {
return err return err
} else if err, api.password = api.StringParam("api.rest.password"); err != nil { }
if err, api.password = api.StringParam("api.rest.password"); err != nil {
return err return err
} else if err, api.useWebsocket = api.BoolParam("api.rest.websocket"); err != nil { }
if err, api.useWebsocket = api.BoolParam("api.rest.websocket"); err != nil {
return err return err
} }

View file

@ -51,7 +51,8 @@ func (api *RestAPI) checkAuth(r *http.Request) bool {
// timing attack my ass // timing attack my ass
if subtle.ConstantTimeCompare([]byte(user), []byte(api.username)) != 1 { if subtle.ConstantTimeCompare([]byte(user), []byte(api.username)) != 1 {
return false return false
} else if subtle.ConstantTimeCompare([]byte(pass), []byte(api.password)) != 1 { }
if subtle.ConstantTimeCompare([]byte(pass), []byte(api.password)) != 1 {
return false return false
} }
} }
@ -184,10 +185,12 @@ func (api *RestAPI) sessionRoute(w http.ResponseWriter, r *http.Request) {
if !api.checkAuth(r) { if !api.checkAuth(r) {
setAuthFailed(w, r) setAuthFailed(w, r)
return return
} else if r.Method == "POST" { }
if r.Method == "POST" {
api.runSessionCommand(w, r) api.runSessionCommand(w, r)
return return
} else if r.Method != "GET" { }
if r.Method != "GET" {
http.Error(w, "Bad Request", 400) http.Error(w, "Bad Request", 400)
return return
} }

View file

@ -92,13 +92,17 @@ func (p *ArpSpoofer) Configure() error {
if err, p.internal = p.BoolParam("arp.spoof.internal"); err != nil { if err, p.internal = p.BoolParam("arp.spoof.internal"); err != nil {
return err return err
} else if err, targets = p.StringParam("arp.spoof.targets"); err != nil { }
if err, targets = p.StringParam("arp.spoof.targets"); err != nil {
return err return err
} else if err, whitelist = p.StringParam("arp.spoof.whitelist"); err != nil { }
if err, whitelist = p.StringParam("arp.spoof.whitelist"); err != nil {
return err return err
} else if p.addresses, p.macs, err = network.ParseTargets(targets, p.Session.Lan.Aliases()); err != nil { }
if p.addresses, p.macs, err = network.ParseTargets(targets, p.Session.Lan.Aliases()); err != nil {
return err return err
} else if p.wAddresses, p.wMacs, err = network.ParseTargets(whitelist, p.Session.Lan.Aliases()); err != nil { }
if p.wAddresses, p.wMacs, err = network.ParseTargets(whitelist, p.Session.Lan.Aliases()); err != nil {
return err return err
} }
@ -236,10 +240,12 @@ func (p *ArpSpoofer) sendArp(saddr net.IP, smac net.HardwareAddr, check_running
for ip, mac := range targets { for ip, mac := range targets {
if check_running && !p.Running() { if check_running && !p.Running() {
return return
} else if p.isWhitelisted(ip, mac) { }
if p.isWhitelisted(ip, mac) {
log.Debug("%s (%s) is whitelisted, skipping from spoofing loop.", ip, mac) log.Debug("%s (%s) is whitelisted, skipping from spoofing loop.", ip, mac)
continue continue
} else if saddr.String() == ip { }
if saddr.String() == ip {
continue continue
} }

View file

@ -184,7 +184,8 @@ func (d *BLERecon) enumAllTheThings(mac string) error {
dev, found := d.Session.BLE.Get(mac) dev, found := d.Session.BLE.Get(mac)
if !found || dev == nil { if !found || dev == nil {
return fmt.Errorf("BLE device with address %s not found.", mac) return fmt.Errorf("BLE device with address %s not found.", mac)
} else if d.Running() { }
if d.Running() {
d.gattDevice.StopScanning() d.gattDevice.StopScanning()
} }

View file

@ -43,7 +43,8 @@ func (d *BLERecon) onPeriphConnected(p gatt.Peripheral, err error) {
if err != nil { if err != nil {
log.Warning("Connected to %s but with error: %s", p.ID(), err) log.Warning("Connected to %s but with error: %s", p.ID(), err)
return return
} else if d.currDevice == nil { }
if d.currDevice == nil {
// timed out // timed out
log.Warning("Connected to %s but after the timeout :(", p.ID()) log.Warning("Connected to %s but after the timeout :(", p.ID())
return return

View file

@ -117,9 +117,8 @@ func parseRawData(raw []byte) string {
return fmt.Sprintf("%x", raw) return fmt.Sprintf("%x", raw)
} else if b == 0 { } else if b == 0 {
break break
} else {
s += fmt.Sprintf("%c", b)
} }
s += fmt.Sprintf("%c", b)
} }
return tui.Yellow(s) return tui.Yellow(s)

View file

@ -89,17 +89,23 @@ func (s *DNSSpoofer) Configure() error {
if s.Running() { if s.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if s.Handle, err = pcap.OpenLive(s.Session.Interface.Name(), 65536, true, pcap.BlockForever); err != nil { }
if s.Handle, err = pcap.OpenLive(s.Session.Interface.Name(), 65536, true, pcap.BlockForever); err != nil {
return err return err
} else if err = s.Handle.SetBPFFilter("udp"); err != nil { }
if err = s.Handle.SetBPFFilter("udp"); err != nil {
return err return err
} else if err, s.All = s.BoolParam("dns.spoof.all"); err != nil { }
if err, s.All = s.BoolParam("dns.spoof.all"); err != nil {
return err return err
} else if err, address = s.IPParam("dns.spoof.address"); err != nil { }
if err, address = s.IPParam("dns.spoof.address"); err != nil {
return err return err
} else if err, domains = s.ListParam("dns.spoof.domains"); err != nil { }
if err, domains = s.ListParam("dns.spoof.domains"); err != nil {
return err return err
} else if err, hostsFile = s.StringParam("dns.spoof.hosts"); err != nil { }
if err, hostsFile = s.StringParam("dns.spoof.hosts"); err != nil {
return err return err
} }

View file

@ -40,11 +40,14 @@ func (s *EventsStream) shouldDumpHttpRequest(req HTTPRequest) bool {
func (s *EventsStream) shouldDumpHttpResponse(res HTTPResponse) bool { func (s *EventsStream) shouldDumpHttpResponse(res HTTPResponse) bool {
if s.dumpHttpResp { if s.dumpHttpResp {
return true return true
} else if strings.Contains(res.ContentType, "text/plain") { }
if strings.Contains(res.ContentType, "text/plain") {
return true return true
} else if strings.Contains(res.ContentType, "application/json") { }
if strings.Contains(res.ContentType, "application/json") {
return true return true
} else if strings.Contains(res.ContentType, "text/xml") { }
if strings.Contains(res.ContentType, "text/xml") {
return true return true
} }
// search for interesting headers // search for interesting headers
@ -90,7 +93,8 @@ func (s *EventsStream) dumpGZIP(body []byte) string {
reader, err := gzip.NewReader(buffer) reader, err := gzip.NewReader(buffer)
if err != nil { if err != nil {
return s.dumpRaw(body) return s.dumpRaw(body)
} else if _, err = uncompressed.ReadFrom(reader); err != nil { }
if _, err = uncompressed.ReadFrom(reader); err != nil {
return s.dumpRaw(body) return s.dumpRaw(body)
} }
return s.dumpRaw(uncompressed.Bytes()) return s.dumpRaw(uncompressed.Bytes())

View file

@ -74,9 +74,11 @@ func (gps *GPS) Author() string {
func (gps *GPS) Configure() (err error) { func (gps *GPS) Configure() (err error) {
if gps.Running() { if gps.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, gps.serialPort = gps.StringParam("gps.device"); err != nil { }
if err, gps.serialPort = gps.StringParam("gps.device"); err != nil {
return err return err
} else if err, gps.baudRate = gps.IntParam("gps.baudrate"); err != nil { }
if err, gps.baudRate = gps.IntParam("gps.baudrate"); err != nil {
return err return err
} }

View file

@ -80,17 +80,23 @@ func (p *HttpProxy) Configure() error {
if p.Running() { if p.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, address = p.StringParam("http.proxy.address"); err != nil { }
if err, address = p.StringParam("http.proxy.address"); err != nil {
return err return err
} else if err, proxyPort = p.IntParam("http.proxy.port"); err != nil { }
if err, proxyPort = p.IntParam("http.proxy.port"); err != nil {
return err return err
} else if err, httpPort = p.IntParam("http.port"); err != nil { }
if err, httpPort = p.IntParam("http.port"); err != nil {
return err return err
} else if err, scriptPath = p.StringParam("http.proxy.script"); err != nil { }
if err, scriptPath = p.StringParam("http.proxy.script"); err != nil {
return err return err
} else if err, stripSSL = p.BoolParam("http.proxy.sslstrip"); err != nil { }
if err, stripSSL = p.BoolParam("http.proxy.sslstrip"); err != nil {
return err return err
} else if err, jsToInject = p.StringParam("http.proxy.injectjs"); err != nil { }
if err, jsToInject = p.StringParam("http.proxy.injectjs"); err != nil {
return err return err
} }

View file

@ -119,11 +119,11 @@ func (p *HTTPProxy) Configure(address string, proxyPort int, httpPort int, scrip
if strings.HasPrefix(jsToInject, "http://") || strings.HasPrefix(jsToInject, "https://") { if strings.HasPrefix(jsToInject, "http://") || strings.HasPrefix(jsToInject, "https://") {
p.jsHook = fmt.Sprintf("<script src=\"%s\" type=\"text/javascript\"></script></head>", jsToInject) p.jsHook = fmt.Sprintf("<script src=\"%s\" type=\"text/javascript\"></script></head>", jsToInject)
} else if fs.Exists(jsToInject) { } else if fs.Exists(jsToInject) {
if data, err := ioutil.ReadFile(jsToInject); err != nil { data, err := ioutil.ReadFile(jsToInject)
if err != nil {
return err return err
} else {
jsToInject = string(data)
} }
jsToInject = string(data)
} }
if p.jsHook == "" && jsToInject != "" { if p.jsHook == "" && jsToInject != "" {
@ -134,11 +134,11 @@ func (p *HTTPProxy) Configure(address string, proxyPort int, httpPort int, scrip
} }
if scriptPath != "" { if scriptPath != "" {
if err, p.Script = LoadHttpProxyScript(scriptPath, p.sess); err != nil { err, p.Script = LoadHttpProxyScript(scriptPath, p.sess)
if err != nil {
return err return err
} else {
log.Debug("Proxy script %s loaded.", scriptPath)
} }
log.Debug("Proxy script %s loaded.", scriptPath)
} }
p.Server = &http.Server{ p.Server = &http.Server{

View file

@ -24,12 +24,12 @@ func NewCookieTracker() *CookieTracker {
} }
func (t *CookieTracker) domainOf(req *http.Request) string { func (t *CookieTracker) domainOf(req *http.Request) string {
if parsed, err := tld.Parse(req.Host); err != nil { parsed, err := tld.Parse(req.Host)
if err != nil {
log.Warning("Could not parse host %s: %s", req.Host, err) log.Warning("Could not parse host %s: %s", req.Host, err)
return req.Host return req.Host
} else {
return fmt.Sprintf("%s.%s", parsed.Domain, parsed.TLD)
} }
return fmt.Sprintf("%s.%s", parsed.Domain, parsed.TLD)
} }
func (t *CookieTracker) keyOf(req *http.Request) string { func (t *CookieTracker) keyOf(req *http.Request) string {

View file

@ -43,7 +43,8 @@ func (p *HTTPProxy) onRequestFilter(req *http.Request, ctx *goproxy.ProxyCtx) (*
// the request has been changed by the script // the request has been changed by the script
p.logRequestAction(req, jsreq) p.logRequestAction(req, jsreq)
return jsreq.ToRequest(), nil return jsreq.ToRequest(), nil
} else if jsres != nil { }
if jsres != nil {
// a fake response has been returned by the script // a fake response has been returned by the script
p.logResponseAction(req, jsres) p.logResponseAction(req, jsres)
return req, jsres.ToResponse(req) return req, jsres.ToResponse(req)
@ -98,7 +99,8 @@ func (p *HTTPProxy) doScriptInjection(res *http.Response, cType string) (error,
raw, err := ioutil.ReadAll(res.Body) raw, err := ioutil.ReadAll(res.Body)
if err != nil { if err != nil {
return err, nil return err, nil
} else if html := string(raw); strings.Contains(html, "</head>") { }
if html := string(raw); strings.Contains(html, "</head>") {
log.Info("(%s) > injecting javascript (%d bytes) into %s (%d bytes) for %s", log.Info("(%s) > injecting javascript (%d bytes) into %s (%d bytes) for %s",
tui.Green(p.Name), tui.Green(p.Name),
len(p.jsHook), len(p.jsHook),

View file

@ -272,10 +272,9 @@ func (s *SSLStripper) isMaxRedirs(hostname string) bool {
// reset // reset
delete(s.redirs, hostname) delete(s.redirs, hostname)
return true return true
} else {
// increment
s.redirs[hostname]++
} }
// increment
s.redirs[hostname]++
} else { } else {
// start tracking redirections // start tracking redirections
s.redirs[hostname] = 1 s.redirs[hostname] = 1

View file

@ -65,10 +65,12 @@ func (j *JSResponse) WasModified() bool {
if j.bodyRead { if j.bodyRead {
// body was read // body was read
return true return true
} else if j.bodyClear { }
if j.bodyClear {
// body was cleared manually // body was cleared manually
return true return true
} else if j.Body != "" { }
if j.Body != "" {
// body was not read but just set // body was not read but just set
return true return true
} }

View file

@ -58,10 +58,12 @@ func (s *HttpProxyScript) OnRequest(original *http.Request) (jsreq *JSRequest, j
if _, err := s.Call("onRequest", jsreq, jsres); err != nil { if _, err := s.Call("onRequest", jsreq, jsres); err != nil {
log.Error("%s", err) log.Error("%s", err)
return nil, nil return nil, nil
} else if jsreq.WasModified() { }
if jsreq.WasModified() {
jsreq.UpdateHash() jsreq.UpdateHash()
return jsreq, nil return jsreq, nil
} else if jsres.WasModified() { }
if jsres.WasModified() {
jsres.UpdateHash() jsres.UpdateHash()
return nil, jsres return nil, jsres
} }
@ -89,10 +91,13 @@ func (s *HttpProxyScript) OnResponse(res *http.Response) (jsreq *JSRequest, jsre
func (s *HttpProxyScript) OnCommand(cmd string) bool { func (s *HttpProxyScript) OnCommand(cmd string) bool {
if s.doOnCommand { if s.doOnCommand {
if ret, err := s.Call("onCommand", cmd); err != nil { ret, err := s.Call("onCommand", cmd)
if err != nil {
log.Error("Error while executing onCommand callback: %+v", err) log.Error("Error while executing onCommand callback: %+v", err)
return false return false
} else if v, ok := ret.(bool); ok { }
v, ok := ret.(bool)
if ok {
return v return v
} }
} }

View file

@ -98,25 +98,35 @@ func (p *HttpsProxy) Configure() error {
if p.Running() { if p.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, address = p.StringParam("https.proxy.address"); err != nil { }
if err, address = p.StringParam("https.proxy.address"); err != nil {
return err return err
} else if err, proxyPort = p.IntParam("https.proxy.port"); err != nil { }
if err, proxyPort = p.IntParam("https.proxy.port"); err != nil {
return err return err
} else if err, httpPort = p.IntParam("https.port"); err != nil { }
if err, httpPort = p.IntParam("https.port"); err != nil {
return err return err
} else if err, stripSSL = p.BoolParam("https.proxy.sslstrip"); err != nil { }
if err, stripSSL = p.BoolParam("https.proxy.sslstrip"); err != nil {
return err return err
} else if err, certFile = p.StringParam("https.proxy.certificate"); err != nil { }
if err, certFile = p.StringParam("https.proxy.certificate"); err != nil {
return err return err
} else if certFile, err = fs.Expand(certFile); err != nil { }
if certFile, err = fs.Expand(certFile); err != nil {
return err return err
} else if err, keyFile = p.StringParam("https.proxy.key"); err != nil { }
if err, keyFile = p.StringParam("https.proxy.key"); err != nil {
return err return err
} else if keyFile, err = fs.Expand(keyFile); err != nil { }
if keyFile, err = fs.Expand(keyFile); err != nil {
return err return err
} else if err, scriptPath = p.StringParam("https.proxy.script"); err != nil { }
if err, scriptPath = p.StringParam("https.proxy.script"); err != nil {
return err return err
} else if err, jsToInject = p.StringParam("https.proxy.injectjs"); err != nil { }
if err, jsToInject = p.StringParam("https.proxy.injectjs"); err != nil {
return err return err
} }

View file

@ -68,7 +68,8 @@ func (mc *MacChanger) Configure() (err error) {
if err, mc.iface = mc.StringParam("mac.changer.iface"); err != nil { if err, mc.iface = mc.StringParam("mac.changer.iface"); err != nil {
return err return err
} else if err, changeTo = mc.StringParam("mac.changer.address"); err != nil { }
if err, changeTo = mc.StringParam("mac.changer.address"); err != nil {
return err return err
} }
@ -105,9 +106,11 @@ func (mc *MacChanger) setMac(mac net.HardwareAddr) error {
func (mc *MacChanger) Start() error { func (mc *MacChanger) Start() error {
if mc.Running() { if mc.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err := mc.Configure(); err != nil { }
if err := mc.Configure(); err != nil {
return err return err
} else if err := mc.setMac(mc.fakeMac); err != nil { }
if err := mc.setMac(mc.fakeMac); err != nil {
return err return err
} }

View file

@ -82,17 +82,23 @@ func (mysql *MySQLServer) Configure() error {
if mysql.Running() { if mysql.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, mysql.infile = mysql.StringParam("mysql.server.infile"); err != nil { }
if err, mysql.infile = mysql.StringParam("mysql.server.infile"); err != nil {
return err return err
} else if err, mysql.outfile = mysql.StringParam("mysql.server.outfile"); err != nil { }
if err, mysql.outfile = mysql.StringParam("mysql.server.outfile"); err != nil {
return err return err
} else if err, address = mysql.StringParam("mysql.server.address"); err != nil { }
if err, address = mysql.StringParam("mysql.server.address"); err != nil {
return err return err
} else if err, port = mysql.IntParam("mysql.server.port"); err != nil { }
if err, port = mysql.IntParam("mysql.server.port"); err != nil {
return err return err
} else if mysql.address, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", address, port)); err != nil { }
if mysql.address, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", address, port)); err != nil {
return err return err
} else if mysql.listener, err = net.ListenTCP("tcp", mysql.address); err != nil { }
if mysql.listener, err = net.ListenTCP("tcp", mysql.address); err != nil {
return err return err
} }
return nil return nil
@ -141,13 +147,16 @@ func (mysql *MySQLServer) Start() error {
if _, err := conn.Write(packets.MySQLFirstResponseOK); err != nil { if _, err := conn.Write(packets.MySQLFirstResponseOK); err != nil {
log.Warning("[%s] error while writing server first response ok: %s", tui.Green("mysql.server"), err) log.Warning("[%s] error while writing server first response ok: %s", tui.Green("mysql.server"), err)
continue continue
} else if _, err := reader.Read(readBuffer); err != nil { }
if _, err := reader.Read(readBuffer); err != nil {
log.Warning("[%s] error while reading client message: %s", tui.Green("mysql.server"), err) log.Warning("[%s] error while reading client message: %s", tui.Green("mysql.server"), err)
continue continue
} else if _, err := conn.Write(packets.MySQLGetFile(mysql.infile)); err != nil { }
if _, err := conn.Write(packets.MySQLGetFile(mysql.infile)); err != nil {
log.Warning("[%s] error while writing server get file request: %s", tui.Green("mysql.server"), err) log.Warning("[%s] error while writing server get file request: %s", tui.Green("mysql.server"), err)
continue continue
} else if read, err = reader.Read(readBuffer); err != nil { }
if read, err = reader.Read(readBuffer); err != nil {
log.Warning("[%s] error while readind buffer: %s", tui.Green("mysql.server"), err) log.Warning("[%s] error while readind buffer: %s", tui.Green("mysql.server"), err)
continue continue
} }

View file

@ -82,17 +82,20 @@ func (p *Prober) Configure() error {
var err error var err error
if err, p.throttle = p.IntParam("net.probe.throttle"); err != nil { if err, p.throttle = p.IntParam("net.probe.throttle"); err != nil {
return err return err
} else if err, p.probes.NBNS = p.BoolParam("net.probe.nbns"); err != nil {
return err
} else if err, p.probes.MDNS = p.BoolParam("net.probe.mdns"); err != nil {
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)
} }
if err, p.probes.NBNS = p.BoolParam("net.probe.nbns"); err != nil {
return err
}
if err, p.probes.MDNS = p.BoolParam("net.probe.mdns"); err != nil {
return err
}
if err, p.probes.UPNP = p.BoolParam("net.probe.upnp"); err != nil {
return err
}
if err, p.probes.WSD = p.BoolParam("net.probe.wsd"); err != nil {
return err
}
log.Debug("Throttling packets of %d ms.", p.throttle)
return nil return nil
} }
@ -136,10 +139,12 @@ func (p *Prober) Start() error {
for _, ip := range addresses { for _, ip := range addresses {
if !p.Running() { if !p.Running() {
return return
} else if p.Session.Skip(ip) { }
if p.Session.Skip(ip) {
log.Debug("skipping address %s from probing.", ip) log.Debug("skipping address %s from probing.", ip)
continue continue
} else if p.probes.NBNS { }
if p.probes.NBNS {
p.sendProbeNBNS(from, from_hw, ip) p.sendProbeNBNS(from, from_hw, ip)
} }
time.Sleep(throttle) time.Sleep(throttle)

View file

@ -12,7 +12,8 @@ func (p *Prober) sendProbeMDNS(from net.IP, from_hw net.HardwareAddr) {
if err != nil { if err != nil {
log.Error("error while sending mdns probe: %v", err) log.Error("error while sending mdns probe: %v", err)
return return
} else if err := p.Session.Queue.Send(raw); err != nil { }
if err := p.Session.Queue.Send(raw); err != nil {
log.Error("error sending mdns packet: %s", err) log.Error("error sending mdns packet: %s", err)
} else { } else {
log.Debug("sent %d bytes of MDNS probe", len(raw)) log.Debug("sent %d bytes of MDNS probe", len(raw))

View file

@ -88,7 +88,8 @@ func (d *Discovery) getRow(e *network.Endpoint, withMeta bool) [][]string {
if !withMeta { if !withMeta {
return [][]string{row} return [][]string{row}
} else if e.Meta.Empty() { }
if e.Meta.Empty() {
return [][]string{append(row, tui.Dim("-"))} return [][]string{append(row, tui.Dim("-"))}
} }
@ -120,13 +121,14 @@ func (d *Discovery) Show(by string, expr string) (err error) {
targets = d.Session.Lan.List() targets = d.Session.Lan.List()
} }
if by == "seen" { switch by {
case "seen" :
sort.Sort(BySeenSorter(targets)) sort.Sort(BySeenSorter(targets))
} else if by == "sent" { case "sent" :
sort.Sort(BySentSorter(targets)) sort.Sort(BySentSorter(targets))
} else if by == "rcvd" { case "rcvd" :
sort.Sort(ByRcvdSorter(targets)) sort.Sort(ByRcvdSorter(targets))
} else { default:
sort.Sort(ByAddressSorter(targets)) sort.Sort(ByAddressSorter(targets))
} }
@ -139,9 +141,11 @@ func (d *Discovery) Show(by string, expr string) (err error) {
} }
hasMeta := false hasMeta := false
if err, showMeta := d.BoolParam("net.show.meta"); err != nil { err, showMeta := d.BoolParam("net.show.meta")
if err != nil {
return err return err
} else if showMeta { }
if showMeta {
for _, t := range targets { for _, t := range targets {
if !t.Meta.Empty() { if !t.Meta.Empty() {
hasMeta = true hasMeta = true

View file

@ -112,7 +112,8 @@ func (s *Sniffer) Configure() error {
if s.Running() { if s.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, s.Ctx = s.GetContext(); err != nil { }
if err, s.Ctx = s.GetContext(); err != nil {
if s.Ctx != nil { if s.Ctx != nil {
s.Ctx.Close() s.Ctx.Close()
s.Ctx = nil s.Ctx = nil

View file

@ -17,11 +17,14 @@ func tcpParser(ip *layers.IPv4, pkt gopacket.Packet, verbose bool) {
if sniParser(ip, pkt, tcp) { if sniParser(ip, pkt, tcp) {
return return
} else if ntlmParser(ip, pkt, tcp) { }
if ntlmParser(ip, pkt, tcp) {
return return
} else if httpParser(ip, pkt, tcp) { }
if httpParser(ip, pkt, tcp) {
return return
} else if verbose { }
if verbose {
NewSnifferEvent( NewSnifferEvent(
pkt.Metadata().Timestamp, pkt.Metadata().Timestamp,
"tcp", "tcp",
@ -46,13 +49,17 @@ func udpParser(ip *layers.IPv4, pkt gopacket.Packet, verbose bool) {
if dnsParser(ip, pkt, udp) { if dnsParser(ip, pkt, udp) {
return return
} else if mdnsParser(ip, pkt, udp) { }
if mdnsParser(ip, pkt, udp) {
return return
} else if krb5Parser(ip, pkt, udp) { }
if krb5Parser(ip, pkt, udp) {
return return
} else if upnpParser(ip, pkt, udp) { }
if upnpParser(ip, pkt, udp) {
return return
} else if verbose { }
if verbose {
NewSnifferEvent( NewSnifferEvent(
pkt.Metadata().Timestamp, pkt.Metadata().Timestamp,
"udp", "udp",
@ -118,7 +125,8 @@ func mainParser(pkt gopacket.Packet, verbose bool) bool {
unkParser(ip, pkt, verbose) unkParser(ip, pkt, verbose)
} }
return true return true
} else if ok, radiotap, dot11 := packets.Dot11Parse(pkt); ok { }
if ok, radiotap, dot11 := packets.Dot11Parse(pkt); ok {
// are we sniffing in monitor mode? // are we sniffing in monitor mode?
dot11Parser(radiotap, dot11, pkt, verbose) dot11Parser(radiotap, dot11, pkt, verbose)
return true return true

View file

@ -13,7 +13,8 @@ import (
func vIP(ip net.IP) string { func vIP(ip net.IP) string {
if session.I.Interface.IP.Equal(ip) { if session.I.Interface.IP.Equal(ip) {
return tui.Dim("local") return tui.Dim("local")
} else if session.I.Gateway.IP.Equal(ip) { }
if session.I.Gateway.IP.Equal(ip) {
return "gateway" return "gateway"
} }

View file

@ -135,17 +135,21 @@ func (pp *PacketProxy) Configure() (err error) {
if err, pp.queueNum = pp.IntParam("packet.proxy.queue.num"); err != nil { if err, pp.queueNum = pp.IntParam("packet.proxy.queue.num"); err != nil {
return return
} else if err, pp.chainName = pp.StringParam("packet.proxy.chain"); err != nil { }
if err, pp.chainName = pp.StringParam("packet.proxy.chain"); err != nil {
return return
} else if err, pp.rule = pp.StringParam("packet.proxy.rule"); err != nil { }
if err, pp.rule = pp.StringParam("packet.proxy.rule"); err != nil {
return return
} else if err, pp.pluginPath = pp.StringParam("packet.proxy.plugin"); err != nil { }
if err, pp.pluginPath = pp.StringParam("packet.proxy.plugin"); err != nil {
return return
} }
if pp.pluginPath == "" { if pp.pluginPath == "" {
return fmt.Errorf("The parameter %s can not be empty.", tui.Bold("packet.proxy.plugin")) return fmt.Errorf("The parameter %s can not be empty.", tui.Bold("packet.proxy.plugin"))
} else if !fs.Exists(pp.pluginPath) { }
if !fs.Exists(pp.pluginPath) {
return fmt.Errorf("%s does not exist.", pp.pluginPath) return fmt.Errorf("%s does not exist.", pp.pluginPath)
} }
@ -156,26 +160,34 @@ func (pp *PacketProxy) Configure() (err error) {
if pp.plugin, err = plugin.Open(pp.pluginPath); err != nil { if pp.plugin, err = plugin.Open(pp.pluginPath); err != nil {
return return
} else if sym, err = pp.plugin.Lookup("OnPacket"); err != nil { }
if sym, err = pp.plugin.Lookup("OnPacket"); err != nil {
return return
} else if pp.queueCb, ok = sym.(func(*nfqueue.Payload) int); !ok { }
if pp.queueCb, ok = sym.(func(*nfqueue.Payload) int); !ok {
return fmt.Errorf("Symbol OnPacket is not a valid callback function.") return fmt.Errorf("Symbol OnPacket is not a valid callback function.")
} }
pp.queue = new(nfqueue.Queue) pp.queue = new(nfqueue.Queue)
if err = pp.queue.SetCallback(dummyCallback); err != nil { if err = pp.queue.SetCallback(dummyCallback); err != nil {
return return
} else if err = pp.queue.Init(); err != nil { }
if err = pp.queue.Init(); err != nil {
return return
} else if err = pp.queue.Unbind(syscall.AF_INET); err != nil { }
if err = pp.queue.Unbind(syscall.AF_INET); err != nil {
return return
} else if err = pp.queue.Bind(syscall.AF_INET); err != nil { }
if err = pp.queue.Bind(syscall.AF_INET); err != nil {
return return
} else if err = pp.queue.CreateQueue(pp.queueNum); err != nil { }
if err = pp.queue.CreateQueue(pp.queueNum); err != nil {
return return
} else if err = pp.queue.SetMode(nfqueue.NFQNL_COPY_PACKET); err != nil { }
if err = pp.queue.SetMode(nfqueue.NFQNL_COPY_PACKET); err != nil {
return return
} else if err = pp.runRule(true); err != nil { }
if err = pp.runRule(true); err != nil {
return return
} }

View file

@ -97,27 +97,38 @@ func (p *TcpProxy) Configure() error {
if p.Running() { if p.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, address = p.StringParam("tcp.address"); err != nil { }
if err, address = p.StringParam("tcp.address"); err != nil {
return err return err
} else if err, proxyAddress = p.StringParam("tcp.proxy.address"); err != nil { }
if err, proxyAddress = p.StringParam("tcp.proxy.address"); err != nil {
return err return err
} else if err, proxyPort = p.IntParam("tcp.proxy.port"); err != nil { }
if err, proxyPort = p.IntParam("tcp.proxy.port"); err != nil {
return err return err
} else if err, port = p.IntParam("tcp.port"); err != nil { }
if err, port = p.IntParam("tcp.port"); err != nil {
return err return err
} else if err, tunnelAddress = p.StringParam("tcp.tunnel.address"); err != nil { }
if err, tunnelAddress = p.StringParam("tcp.tunnel.address"); err != nil {
return err return err
} else if err, tunnelPort = p.IntParam("tcp.tunnel.port"); err != nil { }
if err, tunnelPort = p.IntParam("tcp.tunnel.port"); err != nil {
return err return err
} else if err, scriptPath = p.StringParam("tcp.proxy.script"); err != nil { }
if err, scriptPath = p.StringParam("tcp.proxy.script"); err != nil {
return err return err
} else if p.localAddr, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", proxyAddress, proxyPort)); err != nil { }
if p.localAddr, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", proxyAddress, proxyPort)); err != nil {
return err return err
} else if p.remoteAddr, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", address, port)); err != nil { }
if p.remoteAddr, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", address, port)); err != nil {
return err return err
} else if p.tunnelAddr, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", tunnelAddress, tunnelPort)); err != nil { }
if p.tunnelAddr, err = net.ResolveTCPAddr("tcp", fmt.Sprintf("%s:%d", tunnelAddress, tunnelPort)); err != nil {
return err return err
} else if p.listener, err = net.ListenTCP("tcp", p.localAddr); err != nil { }
if p.listener, err = net.ListenTCP("tcp", p.localAddr); err != nil {
return err return err
} }

View file

@ -61,9 +61,11 @@ func (t *Ticker) Configure() error {
if t.Running() { if t.Running() {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} else if err, commands = t.StringParam("ticker.commands"); err != nil { }
if err, commands = t.StringParam("ticker.commands"); err != nil {
return err return err
} else if err, period = t.IntParam("ticker.period"); err != nil { }
if err, period = t.IntParam("ticker.period"); err != nil {
return err return err
} }

View file

@ -72,7 +72,9 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
bssid, err := net.ParseMAC(args[0]) bssid, err := net.ParseMAC(args[0])
if err != nil { if err != nil {
return err return err
} else if ap, found := w.Session.WiFi.Get(bssid.String()); found { }
ap, found := w.Session.WiFi.Get(bssid.String())
if found {
w.ap = ap w.ap = ap
w.stickChan = ap.Channel() w.stickChan = ap.Channel()
return nil return nil
@ -104,9 +106,8 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
func(args []string) error { func(args []string) error {
if err := w.parseApConfig(); err != nil { if err := w.parseApConfig(); err != nil {
return err return err
} else {
return w.startAp()
} }
return w.startAp()
})) }))
w.AddParam(session.NewStringParameter("wifi.ap.ssid", w.AddParam(session.NewStringParameter("wifi.ap.ssid",
@ -150,11 +151,11 @@ func NewWiFiModule(s *session.Session) *WiFiModule {
} }
} else { } else {
// No channels setted, retrieve frequencies supported by the card // No channels setted, retrieve frequencies supported by the card
if frequencies, err := network.GetSupportedFrequencies(w.Session.Interface.Name()); err != nil { frequencies, err := network.GetSupportedFrequencies(w.Session.Interface.Name())
if err != nil {
return err return err
} else {
newfrequencies = frequencies
} }
newfrequencies = frequencies
} }
w.frequencies = newfrequencies w.frequencies = newfrequencies
@ -211,18 +212,22 @@ func (w *WiFiModule) Configure() error {
if err = ihandle.SetRFMon(true); err != nil { if err = ihandle.SetRFMon(true); err != nil {
return fmt.Errorf("Error while setting interface %s in monitor mode: %s", tui.Bold(w.Session.Interface.Name()), err) return fmt.Errorf("Error while setting interface %s in monitor mode: %s", tui.Bold(w.Session.Interface.Name()), err)
} else if err = ihandle.SetSnapLen(65536); err != nil { }
if err = ihandle.SetSnapLen(65536); err != nil {
return err return err
} else if err = ihandle.SetTimeout(pcap.BlockForever); err != nil { }
if err = ihandle.SetTimeout(pcap.BlockForever); err != nil {
return err return err
} else if w.handle, err = ihandle.Activate(); err != nil { }
if w.handle, err = ihandle.Activate(); err != nil {
return err return err
} }
} }
if err, w.skipBroken = w.BoolParam("wifi.skip-broken"); err != nil { if err, w.skipBroken = w.BoolParam("wifi.skip-broken"); err != nil {
return err return err
} else if err, hopPeriod = w.IntParam("wifi.hop.period"); err != nil { }
if err, hopPeriod = w.IntParam("wifi.hop.period"); err != nil {
return err return err
} }
@ -295,7 +300,8 @@ func (w *WiFiModule) Start() error {
for packet := range w.pktSourceChan { for packet := range w.pktSourceChan {
if !w.Running() { if !w.Running() {
break break
} else if packet == nil { }
if packet == nil {
continue continue
} }

View file

@ -19,13 +19,17 @@ func (w *WiFiModule) parseApConfig() (err error) {
var bssid string var bssid string
if err, w.apConfig.SSID = w.StringParam("wifi.ap.ssid"); err != nil { if err, w.apConfig.SSID = w.StringParam("wifi.ap.ssid"); err != nil {
return return
} else if err, bssid = w.StringParam("wifi.ap.bssid"); err != nil { }
if err, bssid = w.StringParam("wifi.ap.bssid"); err != nil {
return return
} else if w.apConfig.BSSID, err = net.ParseMAC(network.NormalizeMac(bssid)); err != nil { }
if w.apConfig.BSSID, err = net.ParseMAC(network.NormalizeMac(bssid)); err != nil {
return return
} else if err, w.apConfig.Channel = w.IntParam("wifi.ap.channel"); err != nil { }
if err, w.apConfig.Channel = w.IntParam("wifi.ap.channel"); err != nil {
return return
} else if err, w.apConfig.Encryption = w.BoolParam("wifi.ap.encryption"); err != nil { }
if err, w.apConfig.Encryption = w.BoolParam("wifi.ap.encryption"); err != nil {
return return
} }
return return
@ -35,7 +39,8 @@ func (w *WiFiModule) startAp() error {
// we need channel hopping and packet injection for this // we need channel hopping and packet injection for this
if !w.Running() { if !w.Running() {
return errNoRecon return errNoRecon
} else if w.apRunning { }
if w.apRunning {
return session.ErrAlreadyStarted return session.ErrAlreadyStarted
} }

View file

@ -84,30 +84,29 @@ func (w *WiFiModule) getRow(station *network.Station) ([]string, bool) {
recvd, recvd,
seen, seen,
}, include }, include
} else {
// this is ugly, but necessary in order to have this
// method handle both access point and clients
// transparently
clients := ""
if ap, found := w.Session.WiFi.Get(station.HwAddress); found {
if ap.NumClients() > 0 {
clients = strconv.Itoa(ap.NumClients())
}
}
return []string{
fmt.Sprintf("%d dBm", station.RSSI),
bssid,
ssid,
/* station.Vendor, */
encryption,
strconv.Itoa(station.Channel()),
clients,
sent,
recvd,
seen,
}, include
} }
// this is ugly, but necessary in order to have this
// method handle both access point and clients
// transparently
clients := ""
if ap, found := w.Session.WiFi.Get(station.HwAddress); found {
if ap.NumClients() > 0 {
clients = strconv.Itoa(ap.NumClients())
}
}
return []string{
fmt.Sprintf("%d dBm", station.RSSI),
bssid,
ssid,
/* station.Vendor, */
encryption,
strconv.Itoa(station.Channel()),
clients,
sent,
recvd,
seen,
}, include
} }
func (w *WiFiModule) Show(by string) error { func (w *WiFiModule) Show(by string) error {
@ -123,14 +122,14 @@ func (w *WiFiModule) Show(by string) error {
} else { } else {
stations = w.Session.WiFi.Stations() stations = w.Session.WiFi.Stations()
} }
switch by {
if by == "seen" { case "seen":
sort.Sort(ByWiFiSeenSorter(stations)) sort.Sort(ByWiFiSeenSorter(stations))
} else if by == "essid" { case "essid":
sort.Sort(ByEssidSorter(stations)) sort.Sort(ByEssidSorter(stations))
} else if by == "channel" { case "channel":
sort.Sort(ByChannelSorter(stations)) sort.Sort(ByChannelSorter(stations))
} else { default:
sort.Sort(ByRSSISorter(stations)) sort.Sort(ByRSSISorter(stations))
} }

View file

@ -31,21 +31,21 @@ func NewWOL(s *session.Session) *WOL {
w.AddHandler(session.NewModuleHandler("wol.eth MAC", "wol.eth(\\s.+)?", w.AddHandler(session.NewModuleHandler("wol.eth MAC", "wol.eth(\\s.+)?",
"Send a WOL as a raw ethernet packet of type 0x0847 (if no MAC is specified, ff:ff:ff:ff:ff:ff will be used).", "Send a WOL as a raw ethernet packet of type 0x0847 (if no MAC is specified, ff:ff:ff:ff:ff:ff will be used).",
func(args []string) error { func(args []string) error {
if mac, err := parseMAC(args); err != nil { mac, err := parseMAC(args)
if err != nil {
return err return err
} else {
return w.wolETH(mac)
} }
return w.wolETH(mac)
})) }))
w.AddHandler(session.NewModuleHandler("wol.udp MAC", "wol.udp(\\s.+)?", w.AddHandler(session.NewModuleHandler("wol.udp MAC", "wol.udp(\\s.+)?",
"Send a WOL as an IPv4 broadcast packet to UDP port 9 (if no MAC is specified, ff:ff:ff:ff:ff:ff will be used).", "Send a WOL as an IPv4 broadcast packet to UDP port 9 (if no MAC is specified, ff:ff:ff:ff:ff:ff will be used).",
func(args []string) error { func(args []string) error {
if mac, err := parseMAC(args); err != nil { mac, err := parseMAC(args)
if err != nil {
return err return err
} else {
return w.wolUDP(mac)
} }
return w.wolUDP(mac)
})) }))
return w return w
@ -58,9 +58,8 @@ func parseMAC(args []string) (string, error) {
if tmp != "" { if tmp != "" {
if !reMAC.MatchString(tmp) { if !reMAC.MatchString(tmp) {
return "", fmt.Errorf("%s is not a valid MAC address.", tmp) return "", fmt.Errorf("%s is not a valid MAC address.", tmp)
} else {
mac = tmp
} }
mac = tmp
} }
} }

View file

@ -19,11 +19,10 @@ func cleanESSID(essid string) string {
res := "" res := ""
for _, c := range essid { for _, c := range essid {
if strconv.IsPrint(c) { if !strconv.IsPrint(c) {
res += string(c)
} else {
break break
} }
res += string(c)
} }
return res return res
} }