Las respuestas cortas son no y no fácilmente.
En Linux, lsof se basa /proc/net/unix
para recuperar la información sobre los sockets de dominio UNIX. Esta interfaz se enumeran todos los sockets, pero lo hace sin perder de vista los puntos finales. Entonces puede ver qué sockets existen, pero no puede ver qué está conectado a ellos. En algún lugar se rastrea esta información , se debe rastrear o de lo contrario las conexiones de sockets no funcionarían. Todavía tengo que encontrar algún mecanismo para recuperar la información de conexión.
La pregunta olfativa es un poco más interesante, pero no menos decepcionante. Lo que quise decir con "no fácilmente" es que no existe ningún gancho para colarse y obtener esos datos. El análogo más cercano está usando tcpdump o Wireshark, los cuales usan libpcap para hacer el trabajo pesado. Si bien la red (AF_INET) y el dominio UNIX (AF_UNIX) se crean utilizando la socket()
llamada a la función, ambos se usan connect()
para conectarse, usar read()
y write()
procesar datos, son manejados por diferentes subsistemas del kernel. Esto tiene el desafortunado efecto secundario de que libpcap no está diseñado para funcionar con sockets de dominio UNIX.
Hay un lado un poco menos oscuro del problema. Echa un vistazo a la página del manual para recv(2)
. Esta es una llamada de sistema de nivel inferior que read()
hace uso de. Existe una bandera para recv()
llamado MSG_PEEK
. Esto le permitiría detectar el tráfico que pasa a través de un socket de dominio UNIX. Así que ese es el lado positivo, el lado oscuro es que, hasta donde sé, no existe ninguna aplicación actual diseñada para hacer esto. Entonces estás viendo un esfuerzo de desarrollo.
Realmente deseo que no era una buena respuesta simple de F'YEAH a ambas partes de su pregunta.
socat -t100 UNIX-LISTEN: /tmp/file.sock,mode=777,reuseaddr,fork STDOUT
No hay duplicación de salida, no hay salida cíclica. Error del comentario anterior ".sock.socat"
fuente