Feature: remove pre resolve process name

This commit is contained in:
yaling888 2022-06-23 15:13:32 +08:00
parent 7731a684b1
commit b9ee4b902f
2 changed files with 24 additions and 15 deletions

View File

@ -28,6 +28,9 @@ func ShouldFindProcess(metadata *C.Metadata) bool {
if metadata.Process != "" { if metadata.Process != "" {
return false return false
} }
if metadata.SrcIP.IsUnspecified() {
return true
}
for _, ip := range localIPs { for _, ip := range localIPs {
if ip == metadata.SrcIP { if ip == metadata.SrcIP {
return true return true
@ -41,7 +44,7 @@ func AppendLocalIPs(ip ...netip.Addr) {
} }
func getLocalIPs() []netip.Addr { func getLocalIPs() []netip.Addr {
ips := []netip.Addr{netip.IPv4Unspecified(), netip.IPv6Unspecified()} var ips []netip.Addr
netInterfaces, err := net.Interfaces() netInterfaces, err := net.Interfaces()
if err != nil { if err != nil {

View File

@ -190,19 +190,6 @@ func preHandleMetadata(metadata *C.Metadata) error {
} }
} }
// pre resolve process name
srcPort, err := strconv.ParseUint(metadata.SrcPort, 10, 16)
if err == nil && P.ShouldFindProcess(metadata) {
path, err := P.FindProcessName(metadata.NetWork.String(), metadata.SrcIP, int(srcPort))
if err != nil {
log.Debugln("[Process] find process %s: %v", metadata.String(), err)
} else {
log.Debugln("[Process] %s from process %s", metadata.String(), path)
metadata.Process = filepath.Base(path)
metadata.ProcessPath = path
}
}
return nil return nil
} }
@ -385,7 +372,10 @@ func match(metadata *C.Metadata) (C.Proxy, C.Rule, error) {
configMux.RLock() configMux.RLock()
defer configMux.RUnlock() defer configMux.RUnlock()
var resolved bool var (
resolved bool
processFound bool
)
if node := resolver.DefaultHosts.Search(metadata.Host); node != nil { if node := resolver.DefaultHosts.Search(metadata.Host); node != nil {
metadata.DstIP = node.Data metadata.DstIP = node.Data
@ -404,6 +394,22 @@ func match(metadata *C.Metadata) (C.Proxy, C.Rule, error) {
resolved = true resolved = true
} }
if !processFound && rule.ShouldFindProcess() && P.ShouldFindProcess(metadata) {
processFound = true
srcPort, err := strconv.ParseUint(metadata.SrcPort, 10, 16)
if err == nil {
path, err := P.FindProcessName(metadata.NetWork.String(), metadata.SrcIP, int(srcPort))
if err != nil {
log.Debugln("[Process] find process %s: %v", metadata.String(), err)
} else {
log.Debugln("[Process] %s from process %s", metadata.String(), path)
metadata.Process = filepath.Base(path)
metadata.ProcessPath = path
}
}
}
if rule.Match(metadata) { if rule.Match(metadata) {
adapter, ok := proxies[rule.Adapter()] adapter, ok := proxies[rule.Adapter()]
if !ok { if !ok {