
Descoberta de Processos Linux. Biblioteca C, Bindings Go, Runtime.
É nmap mas para pids. 🤓
Por favor, ajude-me a tornar-me um programador independente doando diretamente abaixo.
xpid dá ao utilizador a capacidade de "investigar" detalhes de processos num sistema Linux.
Por exemplo, uma thread em espera terá um diretório /proc/[pid] que pode ser navegado, mas não listado.
xpid verificará muitos lugares diferentes no kernel para obter detalhes sobre um pid.
Ao pesquisar subconjuntos de pids possíveis, xpid será capaz de verificar detalhes de pid em muitos lugares no 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 irá pesquisar processos de container em tempo de execução. 🎉
Isto funciona lendo o link em /proc/[pid]/ns/@cgroup e correlacionando-o com o valor em /proc/1/[pid]/ns/@cgroup.
Independentemente do contexto do namespace do pid, se existir um "container" que seja único em relação ao pid 1 atual, o xpid irá encontrá-lo.
xpid irá encontrar pids que tenham programas eBPF carregados em tempo de execução.
Isto funciona correlacionando as informações do descritor de ficheiro de /proc/[pid]/fdinfo/* de volta para /sys/fs/bpf/progs.debug.
Se um pid tiver um programa eBPF carregado, o xpid irá encontrá-lo.
Devido à flexibilidade com módulos do kernel e eBPF no kernel, pode ser possível impedir que o sistema de ficheiros proc(5) liste detalhes de pid de formas tradicionais.
O xpid usa uma variedade de táticas para procurar pids da mesma forma que o nmap usa diferentes táticas para escanear portas de um alvo.
xpid é uma utilidade de runtime Go que depende de libxpid.
Instale o libxpid primeiro (abaixo), e depois compile o runtime Go.
git clone https://github.com/kris-nova/xpid.git
cd xpid
make
sudo make install
libxpid é escrita em C, pois irá utilizar diretamente o ptrace(2) e o código eBPF.
Isto significa que o executável xpid NÃO está totalmente ligado estaticamente.
Deve primeiro ter o libxpid instalado no seu sistema, antes do programa Go xpid ser executado.
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install