Monitoreo de socket en vivo con netlink inet_diag

Mi objetivo es monitorear los sockets y relacionarlos con las aplicaciones que los crearon.
Soy consciente de netstat, ss, lsof, etc. y de que pueden enumerar todos los sockets con su aplicación.
Y también sé que puedo analizar./proc/net/tcp para obtener las tomas y relacionarlas con las aplicaciones con/proc/(PID), que es exactamente lo que hacen estas herramientas o usan sockets de enlace de red.

Mis investigaciones me llevaron a unartículo lo que explica cómo obtener todos los sockets del kernel con netlink a través del protocolo inet_diag. El programa de espacio de usuario configura un socket de enlace de red del tipo inet_diag y envía una solicitud al kernel. La respuesta consta de varios mensajes que contienen los sockets e información adicional relacionada.
Esto es realmente bueno, pero desafortunadamente el kernel envía esta información solo una vez por solicitud. Así que tengo que "encuestar" continuamente.

Investigaciones posteriores me llevaron a otroartículo que supervisa los cambios de IP de las interfaces con sockets de ruta de enlace continuo. El socket está enlazado a un grupo de multidifusión y luego los mensajes se leen en un bucle sin fin.

Así que investigué si existe la misma posibilidad con los sockets inet_diag. Desafortunadamente no soy capaz de entender el código del kernel. Pero por lo que puedo decir, no hay grupos de multidifusión para esta familia de sockets.

En este punto, estoy atascado y necesito saber si este enfoque es de alguna manera factible o si alguien sabe algún otro consejo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta