| 1234567891011121314151617181920212223242526272829303132333435 | 
							- //go:build linux && !android
 
- package process
 
- import (
 
- 	"context"
 
- 	"net/netip"
 
- 	"github.com/sagernet/sing-box/log"
 
- )
 
- var _ Searcher = (*linuxSearcher)(nil)
 
- type linuxSearcher struct {
 
- 	logger log.ContextLogger
 
- }
 
- func NewSearcher(config Config) (Searcher, error) {
 
- 	return &linuxSearcher{config.Logger}, nil
 
- }
 
- func (s *linuxSearcher) FindProcessInfo(ctx context.Context, network string, source netip.AddrPort, destination netip.AddrPort) (*Info, error) {
 
- 	inode, uid, err := resolveSocketByNetlink(network, source, destination)
 
- 	if err != nil {
 
- 		return nil, err
 
- 	}
 
- 	processPath, err := resolveProcessNameByProcSearch(inode, uid)
 
- 	if err != nil {
 
- 		s.logger.DebugContext(ctx, "find process path: ", err)
 
- 	}
 
- 	return &Info{
 
- 		UserId:      int32(uid),
 
- 		ProcessPath: processPath,
 
- 	}, nil
 
- }
 
 
  |