
Descubrimiento de procesos en Linux. Librería C, enlaces Go, Runtime.
Es nmap pero para pids. 🤓
Por favor, ayúdame a convertirme en un programador independiente donando directamente a continuación.
xpid le da a un usuario la capacidad de "investigar" detalles de procesos en un sistema Linux.
Por ejemplo, un hilo en reposo tendrá un directorio /proc/[pid] al que se puede navegar, pero no listar.
xpid revisará muchos lugares diferentes en el kernel para obtener detalles sobre un pid.
Al buscar subconjuntos de posibles pids, xpid podrá verificar detalles de pid en muchos lugares del kernel.
xpid [flags] -o [output] <query>
Investigate all pids
xpid
Investigate pid 1
xpid 1
Find all container processes on a system
xpid -c
Find all processes in the same namespace(s) as pid 1
xpid --ns-in [mnt, net, pid, ipc, cgroup]
Find all processes not in the same namespace(s) as current user
xpid --ns-out-user [mnt, net, pid, ipc, cgroup]
Find all processes running with eBPF programs as JSON
xpid --ebpf -o json <pid-query>
Find all processes running with eBPF programs, in a container, in /proc
xpid -b -c -p
Find all processes between specific values (Query syntax)
xpid <flags> +100 # Search pids up to 100
xpid <flags> 100-2000 # Search pids between 100-2000
xpid <flags> 65000+ # Search pids 65000 or above
Find all hidden processes on a system (slow)
xpid -x <pid-query>
xpid buscará procesos de contenedores en tiempo de ejecución. 🎉
Esto funciona leyendo el enlace en /proc/[pid]/ns/@cgroup y correlacionándolo con el valor en /proc/1/[pid]/ns/@cgroup.
Independientemente del contexto del espacio de nombres de pid, si hay un "contenedor" que es único del pid 1 actual, xpid lo encontrará.
xpid encontrará pids que tengan programas eBPF cargados en tiempo de ejecución.
Esto funciona correlacionando la información del descriptor de archivo de /proc/[pid]/fdinfo/* con /sys/fs/bpf/progs.debug.
Si un pid tiene un programa eBPF cargado, xpid lo encontrará.
Debido a la flexibilidad de los módulos del kernel y eBPF en el kernel, puede ser posible evitar que el sistema de archivos proc(5) liste detalles de pid de formas tradicionales.
xpid utiliza una variedad de tácticas para buscar pids de la misma manera que nmap utiliza diferentes tácticas para escanear puertos de un objetivo.
xpid es una utilidad de entorno de ejecución Go que depende de libxpid.
Instala libxpid primero (abajo), y luego compila el entorno de ejecución Go.
git clone https://github.com/kris-nova/xpid.git
cd xpid
make
sudo make install
libxpid está escrito en C, ya que aprovechará directamente ptrace(2) y código eBPF.
Esto significa que el ejecutable xpid NO está completamente enlazado estáticamente.
Debes tener libxpid instalado en tu sistema primero, antes de que el programa Go xpid se ejecute.
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install