diff --git a/session/module_handler.go b/session/module_handler.go index 228f8e5e..29c8fe03 100644 --- a/session/module_handler.go +++ b/session/module_handler.go @@ -15,12 +15,18 @@ type ModuleHandler struct { } func NewModuleHandler(name string, expr string, desc string, exec func(args []string) error) ModuleHandler { - return ModuleHandler{ + h := ModuleHandler{ Name: name, Description: desc, - Parser: regexp.MustCompile(expr), + Parser: nil, Exec: exec, } + + if expr != "" { + h.Parser = regexp.MustCompile(expr) + } + + return h } func (h *ModuleHandler) Help(padding int) string { @@ -28,10 +34,18 @@ func (h *ModuleHandler) Help(padding int) string { } func (h *ModuleHandler) Parse(line string) (bool, []string) { - result := h.Parser.FindStringSubmatch(line) - if len(result) == h.Parser.NumSubexp()+1 { - return true, result[1:len(result)] + if h.Parser == nil { + if line == h.Name { + return true, nil + } else { + return false, nil + } } else { - return false, nil + result := h.Parser.FindStringSubmatch(line) + if len(result) == h.Parser.NumSubexp()+1 { + return true, result[1:len(result)] + } else { + return false, nil + } } } diff --git a/session/modules/arp_spoof.go b/session/modules/arp_spoof.go index e8f328d4..68b5e0b2 100644 --- a/session/modules/arp_spoof.go +++ b/session/modules/arp_spoof.go @@ -23,14 +23,16 @@ func NewArpSpoofer(s *session.Session) *ArpSpoofer { p.AddParam(session.NewStringParameter("arp.spoof.targets", "", "", "IP addresses to spoof.")) - p.AddHandler(session.NewModuleHandler("arp.spoof (on|off)", "^arp\\.spoof\\s+(on|off)$", - "Start/stop ARP spoofer.", + p.AddHandler(session.NewModuleHandler("arp.spoof on", "", + "Start ARP spoofer.", func(args []string) error { - if args[0] == "on" { - return p.Start() - } else { - return p.Stop() - } + return p.Start() + })) + + p.AddHandler(session.NewModuleHandler("arp.spoof off", "", + "Stop ARP spoofer.", + func(args []string) error { + return p.Stop() })) return p diff --git a/session/modules/http_proxy.go b/session/modules/http_proxy.go index 13a42192..0d779827 100644 --- a/session/modules/http_proxy.go +++ b/session/modules/http_proxy.go @@ -99,14 +99,16 @@ func NewHttpProxy(s *session.Session) *HttpProxy { p.AddParam(session.NewStringParameter("http.proxy.address", "", `^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$`, "Address to bind the HTTP proxy to.")) p.AddParam(session.NewStringParameter("http.proxy.post.filter", "", "", "SED like syntax to replace things in the response ( example ||| ).")) - p.AddHandler(session.NewModuleHandler("http.proxy (on|off)", "^http\\.proxy (on|off)$", - "Start/stop HTTP proxy.", + p.AddHandler(session.NewModuleHandler("http.proxy on", "", + "Start HTTP proxy.", func(args []string) error { - if args[0] == "on" { - return p.Start() - } else { - return p.Stop() - } + return p.Start() + })) + + p.AddHandler(session.NewModuleHandler("http.proxy off", "", + "Stop HTTP proxy.", + func(args []string) error { + return p.Stop() })) p.proxy.NonproxyHandler = http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { diff --git a/session/modules/net_probe.go b/session/modules/net_probe.go index ac30f435..09eee2e2 100644 --- a/session/modules/net_probe.go +++ b/session/modules/net_probe.go @@ -20,14 +20,16 @@ func NewProber(s *session.Session) *Prober { p.AddParam(session.NewIntParameter("net.probe.throttle", "10", "", "If greater than 0, probe packets will be throttled by this value in milliseconds.")) - p.AddHandler(session.NewModuleHandler("net.probe (on|off)", "^net\\.probe\\s+(on|off)$", - "Start/stop network hosts probing in background.", + p.AddHandler(session.NewModuleHandler("net.probe on", "", + "Start network hosts probing in background.", func(args []string) error { - if args[0] == "on" { - return p.Start() - } else { - return p.Stop() - } + return p.Start() + })) + + p.AddHandler(session.NewModuleHandler("net.probe off", "", + "Stop network hosts probing in background.", + func(args []string) error { + return p.Stop() })) return p diff --git a/session/modules/net_recon.go b/session/modules/net_recon.go index db515520..0d06169b 100644 --- a/session/modules/net_recon.go +++ b/session/modules/net_recon.go @@ -26,17 +26,19 @@ func NewDiscovery(s *session.Session) *Discovery { quit: make(chan bool), } - d.AddHandler(session.NewModuleHandler("net.recon (on|off)", "^net\\.recon\\s+(on|off)$", - "Start/stop network hosts discovery in background.", + d.AddHandler(session.NewModuleHandler("net.recon on", "", + "Start network hosts discovery.", func(args []string) error { - if args[0] == "on" { - return d.Start() - } else { - return d.Stop() - } + return d.Start() })) - d.AddHandler(session.NewModuleHandler("net.show", "^net\\.show$", + d.AddHandler(session.NewModuleHandler("net.recon off", "", + "Stop network hosts discovery.", + func(args []string) error { + return d.Stop() + })) + + d.AddHandler(session.NewModuleHandler("net.show", "", "Show current hosts list.", func(args []string) error { return d.Show() diff --git a/session/modules/net_sniff.go b/session/modules/net_sniff.go index 1e8e3444..3fc40027 100644 --- a/session/modules/net_sniff.go +++ b/session/modules/net_sniff.go @@ -101,14 +101,16 @@ func NewSniffer(s *session.Session) *Sniffer { sniff.AddParam(session.NewStringParameter("net.sniffer.regexp", "", "", "If filled, only packets matching this regular expression will be considered.")) sniff.AddParam(session.NewStringParameter("net.sniffer.output", "", "", "If set, the sniffer will write captured packets to this file.")) - sniff.AddHandler(session.NewModuleHandler("net.sniffer (on|off)", "^net\\.sniffer\\s+(on|off)$", - "Start/stop network sniffer in background.", + sniff.AddHandler(session.NewModuleHandler("net.sniffer on", "", + "Start network sniffer in background.", func(args []string) error { - if args[0] == "on" { - return sniff.Start() - } else { - return sniff.Stop() - } + return sniff.Start() + })) + + sniff.AddHandler(session.NewModuleHandler("net.sniffer off", "", + "Stop network sniffer in background.", + func(args []string) error { + return sniff.Stop() })) return sniff