func()

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
}