GNU/Linux >> Tutoriales Linux >  >> Linux

Toma de dominio Sniff UNIX

Sí, usted puede hacer esto. Todo lo que necesitas es systemtap.

Considere uno de los scripts systemtap de ejemplo que imprimirá el PID y el nombre del proceso de cualquier programa que lea o escriba un inodo específico (y su socket de dominio Unix es exactamente eso).

Puede modificar trivialmente este script para imprimir los datos reales que se están leyendo/escribiendo; Lo dejaré como ejercicio para el lector.


Las respuestas cortas son no y no fácilmente.

En Linux, lsof se basa en /proc/net/unix para recuperar la información sobre los sockets de dominio UNIX. Esta interfaz enumera todos los sockets enlazados, pero no realizar un seguimiento de los puntos finales. Así que puedes ver qué enchufes existen, pero no puede ver qué está conectado a ellos. En algún lugar esta información está rastreado, debe ser rastreado o de lo contrario las conexiones de los sockets no funcionarían. Todavía tengo que encontrar algún mecanismo para recuperar la información de conexión.

La cuestión del olfato 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 capturar esos datos. El análogo más cercano es usar tcpdump o Wireshark, los cuales usan libpcap para hacer el trabajo pesado. Mientras que la red (AF_INET) y el dominio UNIX (AF_UNIX) se crean utilizando el socket() llamada de función, ambas usan connect() para conectarse, ambos usan read() y write() para 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. Eche un vistazo a la página man de recv(2) . Esta es una llamada al sistema de nivel inferior que read() hace uso de. Existe una bandera para recv() llamado MSG_PEEK . Esto le permitiría rastrear 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 yo sé, no existe ninguna aplicación actual diseñada para hacer esto. Así que estás viendo algún esfuerzo de desarrollo.

Realmente desearía que hubiera una buena respuesta simple de F'YEAH a ambas partes de su pregunta.


Sé que esto no responde a la pregunta principal, pero terminé aquí, buscando solo una comunicación de rastreo en un socket. Decidí publicar para otros como yo. Así es como lo hice:

$> sudo socat -t100 -x -v UNIX-LISTEN:/var/run/php5-fpm.sock.socat,mode=777,reuseaddr,fork UNIX-CONNECT:/var/run/php5-fpm.sock

Puede eliminar -x y simplemente dejar -v para la comunicación ascii. Espero que ayude a alguien.


Linux
  1. ¿Quién tiene el otro extremo de este par de sockets de Unix?

  2. Matrices en Unix Bourne Shell?

  3. ¿Es Mac OS X Unix?

  4. Regex de caso de Unix?

  5. ¿Api del zócalo de Tmux?

Cómo cambiar la escucha de PHP-FPM en un zócalo de Unix

Cómo conectar NGINX a PHP-FPM usando UNIX o TCP/IP Socket

Linux frente a Unix

¿Cómo acceder a los sockets de dominio de Unix desde la línea de comandos?

¿Qué denota el símbolo @ al comienzo de una ruta de socket de dominio unix en Linux?

SSH se conecta a un socket UNIX en lugar de un nombre de host