Cloudflare xdpcap را منتشر کرده است، یک تحلیلگر ترافیک مبتنی بر زیرسیستم XDP

شرکت Cloudflare ارایه شده پروژه باز xdpcap، که در آن یک تحلیلگر بسته شبکه مشابه tcpdump در حال توسعه است که بر اساس زیر سیستم ساخته شده است. XDP (مسیر داده eXpress). کد پروژه در Go and نوشته شده است توزیع شده توسط تحت مجوز BSD پروژه نیز تهیه شده کتابخانه ای برای اتصال کنترل کننده های ترافیک eBPF از برنامه های Go.

ابزار xdpcap با عبارات فیلتر tcpdump/libpcap سازگار است و به شما امکان می دهد حجم قابل توجهی از ترافیک را روی همان سخت افزار پردازش کنید. Xdpcap همچنین می‌تواند برای اشکال‌زدایی در محیط‌هایی استفاده شود که tcpdump معمولی قابل اجرا نیست، مانند فیلتر کردن، حفاظت از DoS، و سیستم‌های متعادل کننده بار که از زیرسیستم XDP هسته لینوکس استفاده می‌کنند، که بسته‌ها را قبل از پردازش توسط پشته شبکه هسته لینوکس پردازش می‌کند (tcpdump بسته هایی را که توسط کنترل کننده XDP رها شده اند نمی بیند.

عملکرد بالا با استفاده از زیرسیستم های eBPF و XDP به دست می آید. eBPF یک مفسر بایت کد است که در هسته لینوکس تعبیه شده است که به شما امکان می دهد کنترل کننده های با کارایی بالا بسته های ورودی/خروجی را با تصمیم گیری در مورد ارسال یا دور انداختن آنها ایجاد کنید. با استفاده از یک کامپایلر JIT، بایت کد eBPF به سرعت به دستورالعمل های ماشین ترجمه شده و با عملکرد کد اصلی اجرا می شود. زیرسیستم XDP (eXpress Data Path) مکمل eBPF با قابلیت اجرای برنامه های BPF در سطح درایور شبکه، با پشتیبانی از دسترسی مستقیم به بافر بسته DMA و کار در مرحله قبل از تخصیص بافر skbuff توسط پشته شبکه است.

مانند tcpdump، ابزار xdpcap ابتدا قوانین فیلترینگ ترافیک سطح بالا را با استفاده از کتابخانه استاندارد libpcap به نمایش کلاسیک BPF (cBPF) ترجمه می کند و سپس با استفاده از یک کامپایلر آنها را به شکل روتین های eBPF تبدیل می کند. cbpfc، با استفاده از پیشرفت های LLVM/Clang. در خروجی، اطلاعات ترافیک در قالب استاندارد pcap ذخیره می شود، که به شما امکان می دهد از یک تخلیه ترافیکی آماده شده در xdpcap برای مطالعه بعدی در tcpdump و دیگر تحلیلگرهای ترافیک موجود استفاده کنید. به عنوان مثال، برای گرفتن اطلاعات ترافیک DNS، به جای استفاده از دستور "tcpdump ip and udp port 53"، می توانید "xdpcap /path/to/hook capture.pcap 'ip and udp port 53'" را اجرا کنید و سپس از capture استفاده کنید. فایل pcap.، به عنوان مثال با دستور "tcpdump -r" یا در Wireshark.

منبع: opennet.ru

اضافه کردن نظر