
Linux-Prozesserkennung. C-Bibliothek, Go-Bindings, Laufzeit.
Es ist nmap aber für PIDs. 🤓
Bitte helfen Sie mir, ein unabhängiger Programmierer zu werden, indem Sie direkt unten spenden.
xpid gibt einem Benutzer die Möglichkeit, Prozessdetails auf einem Linux-System zu „untersuchen“.
Zum Beispiel hat ein schlafender Thread ein Verzeichnis /proc/[pid], das zwar aufgerufen, aber nicht aufgelistet werden kann.
xpid überprüft viele verschiedene Stellen im Kernel auf Details zu einer PID.
Durch die Suche in Teilmengen möglicher PIDs kann xpid PID-Details an vielen Stellen im Kernel überprüfen.
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 sucht zur Laufzeit Container-Prozesse. 🎉
Dies funktioniert, indem der Link in /proc/[pid]/ns/@cgroup gelesen und mit dem Wert in /proc/1/[pid]/ns/@cgroup korreliert wird.
Unabhängig vom PID-Namespace-Kontext, wenn es einen „Container“ gibt, der sich von der aktuellen PID 1 unterscheidet, wird xpid ihn finden.
xpid findet PIDs, die zur Laufzeit eBPF-Programme geladen haben.
Dies funktioniert, indem die Dateideskriptor-Informationen aus /proc/[pid]/fdinfo/* mit /sys/fs/bpf/progs.debug korreliert werden.
Wenn eine PID ein eBPF-Programm geladen hat, wird xpid sie finden.
Aufgrund der Flexibilität von Kernel-Modulen und eBPF im Kernel kann es möglich sein, das proc(5)-Dateisystem daran zu hindern, PID-Details auf traditionelle Weise aufzulisten.
xpid verwendet eine Vielzahl von Taktiken, um nach PIDs zu suchen, ähnlich wie nmap verschiedene Taktiken zum Portscannen eines Ziels verwendet.
xpid ist ein Go-Laufzeit-Dienstprogramm, das von libxpid abhängt.
Installieren Sie zuerst libxpid (unten) und kompilieren Sie dann die Go-Laufzeit.
git clone https://github.com/kris-nova/xpid.git
cd xpid
make
sudo make install
libxpid ist in C geschrieben, da es direkt ptrace(2) und eBPF-Code nutzt.
Dies bedeutet, dass die xpid-Binärdatei NICHT vollständig statisch gelinkt ist.
Sie müssen zuerst libxpid auf Ihrem System installiert haben, bevor das xpid-Go-Programm ausgeführt wird.
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install