1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package process
- import (
- "context"
- "net/netip"
- "os/user"
- "github.com/sagernet/sing-box/log"
- "github.com/sagernet/sing-tun"
- E "github.com/sagernet/sing/common/exceptions"
- F "github.com/sagernet/sing/common/format"
- )
- type Searcher interface {
- FindProcessInfo(ctx context.Context, network string, source netip.AddrPort, destination netip.AddrPort) (*Info, error)
- }
- var ErrNotFound = E.New("process not found")
- type Config struct {
- Logger log.ContextLogger
- PackageManager tun.PackageManager
- }
- type Info struct {
- ProcessPath string
- PackageName string
- User string
- UserId int32
- }
- func FindProcessInfo(searcher Searcher, ctx context.Context, network string, source netip.AddrPort, destination netip.AddrPort) (*Info, error) {
- info, err := searcher.FindProcessInfo(ctx, network, source, destination)
- if err != nil {
- return nil, err
- }
- if info.UserId != -1 {
- osUser, _ := user.LookupId(F.ToString(info.UserId))
- if osUser != nil {
- info.User = osUser.Username
- }
- }
- return info, nil
- }
|