|
|
|
@ -37,11 +37,7 @@ func addProcesses(pl []Port) ([]Port, error) {
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, fmt.Errorf("lsof: lookup: %v", err)
|
|
|
|
|
}
|
|
|
|
|
c := exec.Cmd{
|
|
|
|
|
Path: exe,
|
|
|
|
|
Args: []string{exe, "-F", "-n", "-P", "-O", "-S2", "-T", "-i4", "-i6"},
|
|
|
|
|
}
|
|
|
|
|
output, err := c.Output()
|
|
|
|
|
output, err := exec.Command(exe, "-F", "-n", "-P", "-O", "-S2", "-T", "-i4", "-i6").Output()
|
|
|
|
|
if err != nil {
|
|
|
|
|
xe, ok := err.(*exec.ExitError)
|
|
|
|
|
stderr := ""
|
|
|
|
@ -69,28 +65,32 @@ func addProcesses(pl []Port) ([]Port, error) {
|
|
|
|
|
var cmd, proto string
|
|
|
|
|
for scanner.Scan() {
|
|
|
|
|
line := scanner.Text()
|
|
|
|
|
if line[0] == 'p' {
|
|
|
|
|
if line == "" {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
field, val := line[0], line[1:]
|
|
|
|
|
switch field {
|
|
|
|
|
case 'p':
|
|
|
|
|
// starting a new process
|
|
|
|
|
cmd = ""
|
|
|
|
|
proto = ""
|
|
|
|
|
} else if line[0] == 'c' {
|
|
|
|
|
cmd = line[1:len(line)]
|
|
|
|
|
} else if line[0] == 'P' {
|
|
|
|
|
proto = strings.ToLower(line[1:len(line)])
|
|
|
|
|
} else if line[0] == 'n' {
|
|
|
|
|
rest := line[1:len(line)]
|
|
|
|
|
i := strings.Index(rest, "->")
|
|
|
|
|
if i < 0 {
|
|
|
|
|
// a listening port
|
|
|
|
|
port := parsePort(rest)
|
|
|
|
|
if port > 0 {
|
|
|
|
|
pp := ProtoPort{proto, uint16(port)}
|
|
|
|
|
p := m[pp]
|
|
|
|
|
if p != nil {
|
|
|
|
|
p.Process = cmd
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Fprintf(os.Stderr, "weird: missing %v\n", pp)
|
|
|
|
|
}
|
|
|
|
|
case 'c':
|
|
|
|
|
cmd = val
|
|
|
|
|
case 'P':
|
|
|
|
|
proto = strings.ToLower(val)
|
|
|
|
|
case 'n':
|
|
|
|
|
if strings.Contains(val, "->") {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
// a listening port
|
|
|
|
|
port := parsePort(val)
|
|
|
|
|
if port > 0 {
|
|
|
|
|
pp := ProtoPort{proto, uint16(port)}
|
|
|
|
|
p := m[pp]
|
|
|
|
|
if p != nil {
|
|
|
|
|
p.Process = cmd
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Fprintf(os.Stderr, "weird: missing %v\n", pp)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|