|
|
@ -111,12 +111,60 @@ func findUDPSocketAll(srcAddr net.IP, srcPort uint16, dstAddr net.IP, dstPort ui
|
|
|
|
if custdata == nil {
|
|
|
|
if custdata == nil {
|
|
|
|
if strictness == MATCH_STRICT {
|
|
|
|
if strictness == MATCH_STRICT {
|
|
|
|
return findSocket(proto, func(ss socketStatus) bool {
|
|
|
|
return findSocket(proto, func(ss socketStatus) bool {
|
|
|
|
|
|
|
|
fmt.Println("Match strict")
|
|
|
|
return ss.remote.ip.Equal(dstAddr) && ss.local.port == srcPort && ss.local.ip.Equal(srcAddr)
|
|
|
|
return ss.remote.ip.Equal(dstAddr) && ss.local.port == srcPort && ss.local.ip.Equal(srcAddr)
|
|
|
|
|
|
|
|
//return ss.local.port == srcPort && ss.local.ip.Equal(srcAddr)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
} else if strictness == MATCH_LOOSE {
|
|
|
|
} else if strictness == MATCH_LOOSE {
|
|
|
|
return findSocket(proto, func(ss socketStatus) bool {
|
|
|
|
return findSocket(proto, func(ss socketStatus) bool {
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
fmt.Println("Match loose")
|
|
|
|
|
|
|
|
fmt.Printf("sock dst = %v pkt dst = %v\n", ss.remote.ip, dstAddr)
|
|
|
|
|
|
|
|
fmt.Printf("sock port = %d pkt port = %d\n", ss.local.port, srcPort)
|
|
|
|
|
|
|
|
fmt.Printf("local ip: %v\n source ip: %v\n", ss.local.ip, srcAddr)
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ss.local.port == srcPort && (ss.local.ip.Equal(net.IPv4(0,0,0,0)) && ss.remote.ip.Equal(net.IPv4(0,0,0,0)))) {
|
|
|
|
|
|
|
|
fmt.Printf("Matching for UDP socket bound to *:%d\n",ss.local.port)
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
} else if (ss.remote.ip.Equal(dstAddr) && ss.local.port == srcPort && ss.local.ip.Equal(srcAddr)) {
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Finally, loop through all interfaces if src port matches
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ss.local.port == srcPort {
|
|
|
|
|
|
|
|
ifs, err := net.Interfaces()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Warningf("Error on net.Interfaces(): %v", err)
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, i := range ifs {
|
|
|
|
|
|
|
|
addrs, err := i.Addrs()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Warningf("Error on Interface.Addrs(): %v", err)
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, addr := range addrs {
|
|
|
|
|
|
|
|
var ifip net.IP
|
|
|
|
|
|
|
|
switch x := addr.(type) {
|
|
|
|
|
|
|
|
case *net.IPNet:
|
|
|
|
|
|
|
|
ifip = x.IP
|
|
|
|
|
|
|
|
case *net.IPAddr:
|
|
|
|
|
|
|
|
ifip = x.IP
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if ss.local.ip.Equal(ifip) {
|
|
|
|
|
|
|
|
fmt.Printf("Matched on UDP socket bound to %v:%d\n",ifip,srcPort)
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
//return (ss.remote.ip.Equal(dstAddr) || ss.remote.ip.Equal(net.IPv4(0,0,0,0))) && ss.local.port == srcPort && (ss.local.ip.Equal(srcAddr) || ss.local.ip.Equal(net.IPv4(0,0,0,0)))
|
|
|
|
|
|
|
|
/*
|
|
|
|
return (ss.remote.ip.Equal(dstAddr) || addrMatchesAny(ss.remote.ip)) && ss.local.port == srcPort && ss.local.ip.Equal(srcAddr) ||
|
|
|
|
return (ss.remote.ip.Equal(dstAddr) || addrMatchesAny(ss.remote.ip)) && ss.local.port == srcPort && ss.local.ip.Equal(srcAddr) ||
|
|
|
|
(ss.local.ip.Equal(dstAddr) || addrMatchesAny(ss.local.ip)) && ss.remote.port == srcPort && ss.remote.ip.Equal(srcAddr)
|
|
|
|
(ss.local.ip.Equal(dstAddr) || addrMatchesAny(ss.local.ip)) && ss.remote.port == srcPort && ss.remote.ip.Equal(srcAddr) */
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return findSocket(proto, func(ss socketStatus) bool {
|
|
|
|
return findSocket(proto, func(ss socketStatus) bool {
|
|
|
|