Update lsof.go

This commit is contained in:
Jason
2020-05-04 14:04:24 +08:00
parent a04584ca38
commit d832083242
+29 -4
View File
@@ -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