Você deve conseguir encontrar todas as portas abertas em /proc/net/tcp e /proc/net/udp . Cada um desses arquivos tem uma coluna inode , que pode ser usada para encontrar o processo que possui esse soquete.
Quando tiver um número de inode, você poderá executar um comando ls, como ls -l /proc/*/fd/* | grep socket:.$INODE , para localizar os processos que usam esse soquete. Caso um processo tenha sido configurado com diferentes descritores de arquivo para diferentes threads, você pode precisar estender o comando para ls -l /proc/*/task/*/fd/* | grep socket:.$INODE para encontrá-los todos.