diff --git a/common/lsof/lsof.go b/common/lsof/lsof.go index c6d07bd..d817af9 100644 --- a/common/lsof/lsof.go +++ b/common/lsof/lsof.go @@ -11,14 +11,39 @@ var ( ErrNotImplemented = errors.New("not implemented") ) +func isLocalIP(ip net.IP) bool { + interfaces, _ := net.Interfaces() + // all ip addresses + for _, i := range interfaces { + addrs, _ := i.Addrs() + for _, addr := range addrs { + var ifIP net.IP + switch v := addr.(type) { + case *net.IPNet: + ifIP = v.IP + case *net.IPAddr: + ifIP = v.IP + } + if ifIP != nil && ip.Equal(ifIP) { + return true + } + } + } + return false +} + func GetProcessName(addr net.Addr) string { // set default value var process = "N/A" if addr != nil { - localHost, localPortStr, _ := net.SplitHostPort(addr.String()) - localPortInt, _ := strconv.Atoi(localPortStr) - if cmd, _ := GetCommandNameBySocket(addr.Network(), localHost, uint16(localPortInt)); cmd != "" { - process = cmd + localIP, localPort, _ := net.SplitHostPort(addr.String()) + ip := net.ParseIP(localIP) + // ignore non-local IP + if ip.IsUnspecified() || ip.IsLoopback() || isLocalIP(ip) { + port, _ := strconv.Atoi(localPort) + if cmd, _ := GetCommandNameBySocket(addr.Network(), localIP, uint16(port)); cmd != "" { + process = cmd + } } } return process