tcpconnect(8) System Manager's Manual tcpconnect(8)

tcpconnect - ردیابی اتصال‌های فعال TCP (فراخوانی ()connect). استفاده از eBPF/bcc در لینوکس

tcpconnect [-h] [-c] [-t] [-p PID] [-P PORT] [-4 | -6] [-L] [-u UID] [-U] [--cgroupmap MAPPATH] [--mntnsmap MAPPATH] [-d]

این ابزار اتصال‌های فعال TCP را ردیابی می‌کند (برای نمونه از طریق فراخوانی سیستمی ()connect؛ اتصالات ()accept از نوع غیرفعال هستند). این ابزار می‌تواند برای عیب‌یابی عمومی جهت مشاهده اتصالاتی که توسط کارساز محلی برقرار می‌شوند مفید باشد.

تمام تلاش‌های برقراری اتصال ردیابی می‌شوند، حتی اگر در نهایت با شکست مواجه شوند.

این ابزار با ردیابی پویای توابع هسته tcp_v4_connect() و tcp_v6_connect() کار می‌کند و برای هماهنگی با هرگونه تغییر در این توابع نیازمند به‌روزرسانی خواهد بود.

در صورت استفاده از گزینه -d یا --dns، این ابزار همچنین فراخوانی‌های connect را با جدیدترین پرس‌وجوی DNS که با IP متصل‌شده مطابقت دارد همبسته می‌کند. این قابلیت با ردیابی تابع هسته udp_recvmsg() برای جمع‌آوری پاسخ‌های DNS کار می‌کند.

از آنجا که این ابزار از BPF استفاده می‌کند، تنها کاربر ریشه (root) می‌تواند از آن استفاده کند.

CONFIG_BPF و bcc.

در صورت استفاده از گزینه -d یا --dns، باید بسته‌های پایتون dnslib و cachetools نصب باشند. می‌توانید آن‌ها را با pip3 یا در اوبونتو +18.04 از طریق apt با استفاده از بسته‌های python3-dnslib و python3-cachetools نصب کنید.

نمایش پیام راهنمای نحوه استفاده.
افزودن ستون برچسب زمان (timestamp).
شمارش اتصال‌ها به تفکیک IP مبدأ و IP/درگاه مقصد.
فقط ردیابی این شناسه فرآیند (فیلتر شده درون هسته).
فهرست پورت‌های مقصد جدا شده با کاما برای ردیابی (فیلتر شده درون هسته).
-4
فقط ردیابی پروتکل IPv4.
-6
فقط ردیابی پروتکل IPv6.
افزودن ستون LPORT (درگاه محلی).
افزودن ستون UID (شناسه کاربر).
فقط ردیابی این شناسه کاربر (فیلتر شده درون هسته).
فقط ردیابی cgroupهای موجود در این نگاشت BPF (فیلتر شده درون هسته).
فقط ردیابی فضای نام‌های مونت (mount namespaces) موجود در این نگاشت BPF (فیلتر شده درون هسته).
نمایش جدیدترین پرس‌وجوی DNS برای نشانی IP در فراخوانی connect. این مقدار احتمالاً به جزئیات اتصال TCP در ستون‌های دیگر مرتبط است، اما قطعی و تضمین‌شده نیست. این قابلیت با ردیابی تابع هسته udp_recvmsg و ردگیری پاسخ‌های DNS دریافت‌شده توسط سرور کار می‌کند. این قابلیت فقط از بسته‌های UDP DNS با طول حداکثر ۵۱۲ بایت پشتیبانی می‌کند. کد پایتون حافظه نهانی از ۱۰ هزار پاسخ DNS را به مدت حداکثر ۲۴ ساعت در حافظه نگه می‌دارد.
اگر اختلاف زمانی بر حسب میلی‌ثانیه بین دریافت پاسخ DNS توسط سیستم و ردیابی یک فراخوانی سیستمی connect با استفاده از IP در آن پاسخ DNS بیشتر از ۱۰۰ میلی‌ثانیه باشد، این ابزار این اختلاف زمانی (delta) را پس از پرس‌وجو گزارش می‌کند. این اختلاف‌ها برای اکثر برنامه‌ها باید نسبتاً کوتاه باشند. تأخیر طولانی بین پاسخ و connect می‌تواند فعالیت غیرعادی باشد یا نشان‌دهنده نسبت‌دادن نادرست میان نام DNS درخواستی و نشانی IP مورد استفاده توسط فراخوانی سیستمی connect باشد.
گزینه -d نمی‌تواند همراه با قابلیت شمارش (گزینه -c) استفاده شود.

ردیابی تمام اتصال‌های فعال TCP:
# tcpconnect
ردیابی تمام اتصالات TCP و افزودن برچسب‌های زمانی:
# tcpconnect -t
ردیابی تمام اتصالات TCP و افزودن جدیدترین پرس‌وجوی متناظر DNS برای هر IP متصل‌شده:
# tcpconnect -d
فقط ردیابی فرآیند با شناسه ۱۸۱:
# tcpconnect -p 181
فقط ردیابی درگاه‌های ۸۰ و ۸۱:
# tcpconnect -P 80,81
فقط ردیابی خانواده IPv4:
# tcpconnect -4
فقط ردیابی خانواده IPv6:
# tcpconnect -6
ردیابی تمام اتصالات TCP و نمایش ستون LPORT:
# tcpconnect -L
ردیابی تمام اتصالات TCP و نمایش ستون UID:
# tcpconnect -U
فقط ردیابی شناسه کاربر ۱۰۰۰:
# tcpconnect -u 1000
شمارش اتصالات به تفکیک IP مبدأ و IP/درگاه مقصد:
# tcpconnect -c
فقط ردیابی مجموعه‌ای از cgroupها (برای جزئیات بیشتر پرونده special_filtering.md از سورس‌های bcc را ببینید):
# tcpconnect --cgroupmap /sys/fs/bpf/test01
فقط ردیابی مجموعه‌ای از فضای نام‌های مونت (برای جزئیات بیشتر پرونده special_filtering.md از سورس‌های bcc را ببینید):
# tcpconnect --mntnsmap /sys/fs/bpf/mnt_ns_set

زمان فراخوانی، بر حسب ثانیه.
شناسه کاربر (User ID)
شناسه فرآیند (Process ID)
نام فرآیند
خانواده نشانی IP (۴ یا ۶)
نشانی IP مبدأ.
درگاه مبدأ (محلی)
نشانی IP مقصد.
درگاه مقصد
تعداد اتصالات فعال تجمعی از زمان شروع.
نمایش جدیدترین پرس‌وجوی DNS برای نشانی IP در فراخوانی connect. این مقدار احتمالاً به جزئیات اتصال TCP در دیگر ستون‌ها مربوط است، اما تضمین‌شده نیست.

این ابزار توابع هسته tcp_v[46]_connect را ردیابی کرده و برای هر رویداد خروجی چاپ می‌کند. از آنجا که نرخ این رویدادها معمولاً پایین انتظار می‌رود (کمتر از ۱۰۰۰ در ثانیه)، بار پردازشی نیز ناچیز پیش‌بینی می‌شود. اگر برنامه‌ای دارید که با نرخ بالایی ()connect را فراخوانی می‌کند، مانند یک کارساز پراکسی، پیش از استفاده این بار پردازشی را آزمایش کرده و بسنجید.

اگر از گزینه -d برای ردگیری درخواست‌های DNS استفاده می‌کنید، این ابزار تابع udp_recvmsg را ردیابی کرده و برای بسته‌های دریافتی از درگاه ۵۳ UDP یک رویداد ایجاد می‌کند. این رویداد شامل حداکثر ۵۱۲ بایت از بار داده (payload) بسته UDP است. برنامه‌های معمول به‌طور گسترده از UDP استفاده نمی‌کنند، بنابراین بار پردازشی ردیابی udp_recvmsg ناچیز پیش‌بینی می‌شود. با این حال، اگر برنامه‌ای دارید که بسته‌های UDP زیادی دریافت می‌کند، باید بار پردازشی ناشی از ردیابی هر پیام UDP دریافتی را بسنجید. علاوه بر این، بار پردازشی اجرای این ابزار روی یک کارساز DNS بالاتر از حد معمول پیش‌بینی می‌شود زیرا تمام بسته‌های پاسخ DNS در فضای کاربری (userspace) کپی خواهند شد.

این ابزار برگرفته از bcc است.

https://github.com/iovisor/bcc

همچنین در توزیع bcc به پرونده همراه _examples.txt که شامل نمونه نحوه استفاده، خروجی و توضیحات این ابزار است مراجعه کنید.

Linux

ناپایدار - در حال توسعه.

Brendan Gregg

tcptracer(8), tcpaccept(8), funccount(8), tcpdump(8)

2020-02-20 USER COMMANDS