new: added debug callback to the network package

This commit is contained in:
evilsocket 2018-10-12 13:24:13 +02:00
parent 058a6865ff
commit e50eaad7e6
3 changed files with 18 additions and 0 deletions

7
network/debug.go Normal file
View file

@ -0,0 +1,7 @@
package network
type DebugFunc func(format string, args ...interface{})
var Debug = func(format string, args ...interface{}) {
}

View file

@ -9,18 +9,24 @@ import (
) )
func FindGateway(iface *Endpoint) (*Endpoint, error) { func FindGateway(iface *Endpoint) (*Endpoint, error) {
Debug("FindGateway(%s) [cmd=%v opts=%v parser=%v]", iface.Name(), IPv4RouteCmd, IPv4RouteCmdOpts, IPv4RouteParser)
output, err := core.Exec(IPv4RouteCmd, IPv4RouteCmdOpts) output, err := core.Exec(IPv4RouteCmd, IPv4RouteCmdOpts)
if err != nil { if err != nil {
return nil, err return nil, err
} }
Debug("FindGateway(%s) output:\n%s", iface.Name(), output)
ifName := iface.Name() ifName := iface.Name()
for _, line := range strings.Split(output, "\n") { for _, line := range strings.Split(output, "\n") {
if strings.Contains(line, ifName) { if strings.Contains(line, ifName) {
m := IPv4RouteParser.FindStringSubmatch(line) m := IPv4RouteParser.FindStringSubmatch(line)
if len(m) == IPv4RouteTokens { if len(m) == IPv4RouteTokens {
Debug("FindGateway(%s) line '%s' matched with %v", iface.Name(), line, m)
return IPv4RouteIsGateway(ifName, m, func(gateway string) (*Endpoint, error) { return IPv4RouteIsGateway(ifName, m, func(gateway string) (*Endpoint, error) {
if gateway == iface.IpAddress { if gateway == iface.IpAddress {
Debug("gateway is the interface")
return iface, nil return iface, nil
} else { } else {
// we have the address, now we need its mac // we have the address, now we need its mac
@ -28,6 +34,7 @@ func FindGateway(iface *Endpoint) (*Endpoint, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
Debug("gateway is %s[%s]", gateway, mac)
return NewEndpoint(gateway, mac), nil return NewEndpoint(gateway, mac), nil
} }
}) })

View file

@ -209,6 +209,10 @@ func (s *Session) Register(mod Module) error {
func (s *Session) Start() error { func (s *Session) Start() error {
var err error var err error
network.Debug = func(format string, args ...interface{}) {
s.Events.Log(log.DEBUG, format, args...)
}
// make sure modules are always sorted by name // make sure modules are always sorted by name
sort.Slice(s.Modules, func(i, j int) bool { sort.Slice(s.Modules, func(i, j int) bool {
return s.Modules[i].Name() < s.Modules[j].Name() return s.Modules[i].Name() < s.Modules[j].Name()