
اكتشاف العمليات في لينكس. مكتبة C، روابط Go، وقت التشغيل.
إنه nmap لكن من أجل pids. 🤓
من فضلك ساعدني لأصبح مبرمجًا مستقلاً عن طريق التبرع أدناه مباشرة.
xpid يمنح المستخدم القدرة على "التحقيق" في تفاصيل العمليات على نظام لينكس.
على سبيل المثال، سيحتوي خيط نائم على دليل /proc/[pid] يمكن التنقل إليه، ولكن لا يمكن عرض محتوياته.
xpid سيتحقق من العديد من الأماكن المختلفة في النواة للحصول على تفاصيل حول معرف العملية (pid).
من خلال البحث في مجموعات فرعية من الـ pids الممكنة، سيكون 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 سيعثر على الـ pids التي تحتوي على برامج eBPF محملة في وقت التشغيل.
يعمل ذلك عن طريق ربط معلومات واصف الملف من /proc/[pid]/fdinfo/* بـ /sys/fs/bpf/progs.debug.
إذا كان لدى pid برنامج eBPF محمل، فسيعثر عليه xpid.
بسبب المرونة مع وحدات النواة و eBPF في النواة، يمكن أن يكون من الممكن منع نظام الملفات proc(5) من عرض تفاصيل pid بالطرق التقليدية.
يستخدم xpid مجموعة متنوعة من التكتيكات للبحث عن الـ pids بنفس الطريقة التي يستخدم بها 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 ليس مرتبطًا بشكل ثابت بالكامل.
يجب أن يكون لديك libxpid مثبتًا على نظامك أولاً، قبل أن يعمل برنامج Go xpid.
git clone https://github.com/kris-nova/xpid.git
cd xpid/libxpid
./configure
cd build
make
sudo make install