Puedo leer el archivo /proc/$PID/net/tcp, por ejemplo, y obtener información sobre los puertos TCP abiertos por el proceso.
Ese archivo no es una lista de puertos tcp abiertos por el proceso . Es una lista de todos los puertos tcp abiertos en el espacio de nombres de red actual, y para los procesos que se ejecutan en el mismo espacio de nombres de red es idéntico al contenido de /proc/net/tcp
.
Para encontrar puertos abiertos por su proceso, necesitaría obtener una lista de descriptores de socket de /proc/<pid>/fd
y luego haga coincidir esos descriptores con el inode
campo de /proc/net/tcp
.
Por favor
cat /proc/$PID/net/tcp
y obtendrá un resultado como este
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 2891985097 1 0000000000000000 100 0 0 10 0
La segunda columna (dirección_local) de la salida muestra el puerto en hexadecimal. Usa tu calculadora de programación para convertir el código hexadecimal a decimal.
Por ejemplo aquí, el puerto:01BB (en hexadecimal) es igual a 433 (en decimal), que es el puerto predeterminado de HTTPS.