searcher_android.go 939 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package process
  2. import (
  3. "context"
  4. "net/netip"
  5. "github.com/sagernet/sing-tun"
  6. )
  7. var _ Searcher = (*androidSearcher)(nil)
  8. type androidSearcher struct {
  9. packageManager tun.PackageManager
  10. }
  11. func NewSearcher(config Config) (Searcher, error) {
  12. return &androidSearcher{config.PackageManager}, nil
  13. }
  14. func (s *androidSearcher) FindProcessInfo(ctx context.Context, network string, source netip.AddrPort, destination netip.AddrPort) (*Info, error) {
  15. _, uid, err := resolveSocketByNetlink(network, source, destination)
  16. if err != nil {
  17. return nil, err
  18. }
  19. if sharedPackage, loaded := s.packageManager.SharedPackageByID(uid % 100000); loaded {
  20. return &Info{
  21. UserId: int32(uid),
  22. PackageName: sharedPackage,
  23. }, nil
  24. }
  25. if packageName, loaded := s.packageManager.PackageByID(uid % 100000); loaded {
  26. return &Info{
  27. UserId: int32(uid),
  28. PackageName: packageName,
  29. }, nil
  30. }
  31. return &Info{UserId: int32(uid)}, nil
  32. }