
Обнаружение процессов Linux. C-библиотека, привязки Go, среда выполнения.
Это nmap, но для pid. 🤓
Пожалуйста, помогите мне стать независимым программистом, пожертвовав ниже.
xpid дает пользователю возможность «исследовать» сведения о процессах в Linux-системе.
Например, спящий поток будет иметь каталог /proc/[pid], в который можно перейти, но содержимое не отображается.
xpid будет проверять множество различных мест в ядре для получения сведений о pid.
Путем поиска подмножеств возможных pid xpid сможет проверять сведения о pid во многих местах ядра.
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 будет искать процессы контейнеров во время выполнения. 🎉
Это работает путем чтения ссылки в /proc/[pid]/ns/@cgroup и сопоставления со значением в /proc/1/[pid]/ns/@cgroup.
Независимо от контекста пространства имен pid, если есть «контейнер», отличный от текущего pid 1, xpid найдет его.
xpid найдет pid, у которых загружены программы eBPF во время выполнения.
Это работает путем сопоставления информации о файловых дескрипторах из /proc/[pid]/fdinfo/* с /sys/fs/bpf/progs.debug.
Если у pid загружена программа eBPF, xpid найдет ее.
Из-за гибкости модулей ядра и eBPF в ядре может быть возможно предотвратить перечисление сведений о pid традиционными способами в файловой системе proc(5).
xpid использует различные тактики для поиска pid так же, как nmap использует различные тактики для сканирования портов цели.
xpid - это утилита времени выполнения Go, которая зависит от libxpid.
Сначала установите libxpid (ниже), а затем скомпилируйте среду выполнения Go.
git clone https://github.com/kris-nova/xpid.git
cd xpid
make
sudo make install
libxpid написан на C, так как он будет напрямую использовать код ptrace(2) и eBPF.
Это означает, что исполняемый файл xpid НЕ полностью статически слинкован.
Перед запуском программы Go xpid необходимо сначала установить libxpid в вашей системе.
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install