它是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 将找到在运行时加载了 eBPF 程序的 pid。
这通过将来自 /proc/[pid]/fdinfo/* 的文件描述符信息关联回 /sys/fs/bpf/progs.debug 来工作。
如果一个 pid 加载了 eBPF 程序,xpid 将找到它。
由于内核模块和 eBPF 在内核中的灵活性,有可能阻止 proc(5) 文件系统以传统方式列出 pid 详细信息。
xpid 使用多种策略来搜索 pid,就像 nmap 使用不同策略对目标进行端口扫描一样。
xpid 是一个依赖于 libxpid 的 Go 运行时工具。
先安装 libxpid(如下),然后编译 Go 运行时。
git clone https://github.com/kris-nova/xpid.git
cd xpid
make
sudo make install
libxpid 用 C 编写,因为它将直接利用 ptrace(2) 和 eBPF 代码。
这意味着 xpid 可执行文件并非完全静态链接。
在运行 xpid Go 程序之前,你必须先在系统上安装 libxpid。
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install