in tcpdumpw/pkg/filter/process_filter_provider.go [170:202]
func (p *ProcessFilterProvider) getTCPsockets(
ctx context.Context,
process *processInfo,
) ([]*tcpSocket, error) {
pid := strconv.Itoa(process.id)
// REQUIRES: [netstat](https://man7.org/linux/man-pages/man8/netstat.8.html)
output, err := p.execScript(ctx, socketsScript, *process.name, pid, requiredSocketState)
if err != nil {
socketsScriptErr := fmt.Errorf(sf.Format("script[{0}] | %v", socketsScript), err)
p.logProcessFilterError(process, socketsScriptErr)
return nil, err
}
var sockets []*tcpSocket
lines := strings.Split(output, "\n")
for _, line := range lines {
if line == "" {
continue
}
socket := new(tcpSocket)
if err := json.Unmarshal([]byte(line), socket); err == nil {
sockets = append(sockets, socket)
p.logSocketFilterInfo(socket, line)
} else if p.debug {
jsonErr := fmt.Errorf("%s | %v", line, err)
p.logProcessFilterError(process, jsonErr)
}
}
return sockets, err
}