mirror of
https://github.com/evilsocket/opensnitch.git
synced 2025-03-04 08:34:40 +01:00
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package netstat
|
|
|
|
import (
|
|
"net"
|
|
"strings"
|
|
|
|
"github.com/evilsocket/opensnitch/daemon/core"
|
|
"github.com/evilsocket/opensnitch/daemon/log"
|
|
)
|
|
|
|
// FindEntry looks for the connection in the list of known connections in ProcFS.
|
|
func FindEntry(proto string, srcIP net.IP, srcPort uint, dstIP net.IP, dstPort uint) *Entry {
|
|
if entry := findEntryForProtocol(proto, srcIP, srcPort, dstIP, dstPort); entry != nil {
|
|
return entry
|
|
}
|
|
|
|
ipv6Suffix := "6"
|
|
if core.IPv6Enabled && strings.HasSuffix(proto, ipv6Suffix) == false {
|
|
otherProto := proto + ipv6Suffix
|
|
log.Debug("Searching for %s netstat entry instead of %s", otherProto, proto)
|
|
if entry := findEntryForProtocol(otherProto, srcIP, srcPort, dstIP, dstPort); entry != nil {
|
|
return entry
|
|
}
|
|
}
|
|
|
|
return &Entry{
|
|
Proto: proto,
|
|
SrcIP: srcIP,
|
|
SrcPort: srcPort,
|
|
DstIP: dstIP,
|
|
DstPort: dstPort,
|
|
UserId: -1,
|
|
INode: -1,
|
|
}
|
|
}
|
|
|
|
func findEntryForProtocol(proto string, srcIP net.IP, srcPort uint, dstIP net.IP, dstPort uint) *Entry {
|
|
entries, err := Parse(proto)
|
|
if err != nil {
|
|
log.Warning("Error while searching for %s netstat entry: %s", proto, err)
|
|
return nil
|
|
}
|
|
|
|
for _, entry := range entries {
|
|
if srcIP.Equal(entry.SrcIP) && srcPort == entry.SrcPort && dstIP.Equal(entry.DstIP) && dstPort == entry.DstPort {
|
|
return &entry
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|