| 218 | } |
| 219 | |
| 220 | func uidFromSockstatReader(lip net.IP, lport int, rip net.IP, rport int, r io.Reader) (uid int, err error) { |
| 221 | pat, err := regexp.Compile(fmt.Sprintf(`^([^ ]+).*%s:%d *%s:%d$`, |
| 222 | lip.String(), lport, rip.String(), rport)) |
| 223 | if err != nil { |
| 224 | return 0, err |
| 225 | } |
| 226 | scanner := bufio.NewScanner(r) |
| 227 | for scanner.Scan() { |
| 228 | l := scanner.Text() |
| 229 | m := pat.FindStringSubmatch(l) |
| 230 | if len(m) == 2 { |
| 231 | return uidFromUsername(m[1]) |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | if err := scanner.Err(); err != nil { |
| 236 | return 0, err |
| 237 | } |
| 238 | |
| 239 | return 0, ErrNotFound |
| 240 | } |
| 241 | |
| 242 | func uidFromProcReader(lip net.IP, lport int, rip net.IP, rport int, r io.Reader) (uid int, err error) { |
| 243 | buf := bufio.NewReader(r) |