
Découverte de processus Linux. Bibliothèque C, Liaisons Go, Runtime.
C'est nmap mais pour les pids. 🤓
Aidez-moi à devenir un programmeur indépendant en faisant un don ci-dessous.
xpid donne à un utilisateur la capacité d'« enquêter » sur les détails des processus sur un système Linux.
Par exemple, un thread en sommeil aura un répertoire /proc/[pid] qui peut être parcouru, mais pas listé.
xpid vérifiera de nombreux endroits différents dans le noyau pour obtenir des détails sur un pid.
En recherchant des sous-ensembles de pids possibles, xpid pourra vérifier les détails des pids dans de nombreux endroits du noyau.
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 recherchera les processus de conteneur à l'exécution. 🎉
Cela fonctionne en lisant le lien dans /proc/[pid]/ns/@cgroup et en le corrélant avec la valeur dans /proc/1/[pid]/ns/@cgroup.
Quel que soit le contexte de l'espace de noms pid, s'il existe un « conteneur » qui est unique par rapport au pid 1 actuel, xpid le trouvera.
xpid trouvera les pids qui ont des programmes eBPF chargés à l'exécution.
Cela fonctionne en corrélant les informations du descripteur de fichier depuis /proc/[pid]/fdinfo/* vers /sys/fs/bpf/progs.debug.
Si un pid a un programme eBPF chargé, xpid le trouvera.
En raison de la flexibilité des modules du noyau et d'eBPF dans le noyau, il est possible d'empêcher le système de fichiers proc(5) de lister les détails des pids de manière traditionnelle.
xpid utilise une variété de tactiques pour rechercher des pids de la même manière que nmap utilise différentes tactiques pour scanner les ports d'une cible.
xpid est un utilitaire d'exécution Go qui dépend de libxpid.
Installez d'abord libxpid (ci-dessous), puis compilez l'environnement d'exécution Go.
git clone https://github.com/kris-nova/xpid.git
cd xpid
make
sudo make install
libxpid est écrit en C, car il utilisera directement le code ptrace(2) et eBPF.
Cela signifie que l'exécutable xpid n'est PAS entièrement lié statiquement.
Vous devez d'abord avoir libxpid installé sur votre système, avant que le programme Go xpid ne s'exécute.
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install