func sockCollector()

in pkg/skoop/collector/podcollector/collector.go [604:659]


func sockCollector(sandboxInfo *netstack.NetNSInfo) error {
	netstat.ProcRoot = fmt.Sprintf("/proc/%d/", sandboxInfo.PID)
	tcpConns, err := netstat.TCP.Connections()
	if err != nil {
		return fmt.Errorf("error get tcp connections: %v", err)
	}
	tcp6Conns, err := netstat.TCP6.Connections()
	if err != nil {
		return fmt.Errorf("error get tcp6 connections: %v", err)
	}
	tcpConns = append(tcpConns, tcp6Conns...)
	udpConns, err := netstat.UDP.Connections()
	if err != nil {
		return fmt.Errorf("error get udp connections: %v", err)
	}
	udp6Conns, err := netstat.UDP6.Connections()
	if err != nil {
		return fmt.Errorf("error get udp6 connections: %v", err)
	}
	udpConns = append(udpConns, udp6Conns...)
	for _, tc := range tcpConns {
		conn := netstack.ConnStat{
			LocalIP:    tc.IP.String(),
			LocalPort:  uint16(tc.Port),
			RemoteIP:   tc.RemoteIP.String(),
			RemotePort: uint16(tc.RemotePort),
			Protocol:   model.TCP,
		}
		conn.State = netstack.SockStatUnknown
		if tc.State == netstat.TCPEstablished {
			conn.State = netstack.SockStatEstablish
		}
		if tc.State == netstat.TCPListen {
			conn.State = netstack.SockStatListen
		}
		sandboxInfo.ConnStats = append(sandboxInfo.ConnStats, conn)
	}
	for _, tc := range udpConns {
		conn := netstack.ConnStat{
			LocalIP:    tc.IP.String(),
			LocalPort:  uint16(tc.Port),
			RemoteIP:   tc.RemoteIP.String(),
			RemotePort: uint16(tc.RemotePort),
			Protocol:   model.UDP,
		}
		conn.State = netstack.SockStatUnknown
		if tc.State == netstat.TCPEstablished {
			conn.State = netstack.SockStatEstablish
		}
		if slices.Contains([]string{"0.0.0.0", "::"}, tc.RemoteIP.String()) {
			conn.State = netstack.SockStatListen
		}
		sandboxInfo.ConnStats = append(sandboxInfo.ConnStats, conn)
	}
	return nil
}