Debería poder encontrar todos los puertos abiertos en /proc/net/tcp y /proc/net/udp . Cada uno de esos archivos tiene un inode columna, que se puede usar para encontrar el proceso que posee ese socket.
Una vez que tenga un número de inodo, puede ejecutar un comando ls como ls -l /proc/*/fd/* | grep socket:.$INODE para encontrar los procesos que usan ese socket. En caso de que se haya configurado un proceso con diferentes descriptores de archivo para diferentes subprocesos, es posible que deba extender el comando a ls -l /proc/*/task/*/fd/* | grep socket:.$INODE para encontrarlos a todos.