|
|
|
@ -32,6 +32,8 @@ type socketStatus struct {
|
|
|
|
|
uid int
|
|
|
|
|
inode uint64
|
|
|
|
|
pid int
|
|
|
|
|
// XXX debugging
|
|
|
|
|
line string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func findProcessForPacket(pkt *nfqueue.Packet) *ProcInfo {
|
|
|
|
@ -142,24 +144,29 @@ func getSocketForPacket(pkt *nfqueue.Packet) *socketStatus {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
pid := findPidForInode(ss.inode)
|
|
|
|
|
if pid == -1 {
|
|
|
|
|
return nil
|
|
|
|
|
if pid > 0 {
|
|
|
|
|
ss.pid = pid
|
|
|
|
|
return ss
|
|
|
|
|
}
|
|
|
|
|
ss.pid = pid
|
|
|
|
|
return ss
|
|
|
|
|
log.Info("Unable to find socket link socket:[%d] %s", ss.inode, printPacket(pkt, ""))
|
|
|
|
|
log.Info("Line was %s", ss.line)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func findSocket(pkt *nfqueue.Packet) *socketStatus {
|
|
|
|
|
var status socketStatus
|
|
|
|
|
for _, line := range getSocketLinesForPacket(pkt) {
|
|
|
|
|
if len(line) == 0 {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
if err := status.parseLine(line); err != nil {
|
|
|
|
|
log.Warning("Unable to parse line [%s]: %v", line, err)
|
|
|
|
|
} else {
|
|
|
|
|
if status.remote.ip.Equal(pkt.Dst) && status.remote.port == pkt.DstPort {
|
|
|
|
|
return &status
|
|
|
|
|
}
|
|
|
|
|
} else if status.remote.ip.Equal(pkt.Dst) && status.remote.port == pkt.DstPort && status.local.ip.Equal(pkt.Src) && status.local.port == pkt.SrcPort {
|
|
|
|
|
status.line = line
|
|
|
|
|
return &status
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.Info("Failed to find socket for packet: %s", printPacket(pkt, ""))
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|