
それは 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 は、nmap がターゲットのポートスキャンに異なる戦術を使用するのと同じように、さまざまな戦術を使用して PID を検索します。
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