NGREP(8) راهنمای کاربران NGREP(8) نام (NAME) ngrep - ابزار grep برای شبکه (network grep) خلاصه دستور (SYNOPSIS) ngrep <-hNXViwqpevxlDtTRMCu> <-IO pcap_dump > < -n num > < -d dev > < -A num > < -s snaplen > < -S limitlen > < -W normal|byline|single|none > < -c cols > < -P char > < -F file > < match expression > < bpf filter > توضیحات (DESCRIPTION) ابزار ngrep تلاش می‌کند تا بیشتر قابلیت‌های رایج GNU grep را ارائه داده و آن‌ها را در لایه شبکه اعمال کند. ngrep ابزاری سازگار با pcap است که به شما امکان می‌دهد عبارات منظم توسعه‌یافته (extended regular expressions) را برای تطبیق با بار مفید داده (payload) بسته‌ها مشخص کنید. این ابزار در حال حاضر پروتکل‌های TCP، UDP و ICMP را روی رابط‌های Ethernet، PPP، SLIP، FDDI و رابط‌های null تشخیص می‌دهد و منطق فیلتر bpf را همانند ابزارهای رایج‌تر شنود بسته (packet sniffing) مانند tcpdump(8) و snoop(1) درک می‌کند. گزینه‌ها (OPTIONS) -h نمایش اطلاعات راهنما و نحوه استفاده. -N نمایش شماره زیرپروتکل به همراه شناسه تک‌کاراکتری (هنگام مشاهده پروتکل‌های خام یا ناشناخته مفید است). -X در نظر گرفتن عبارت تطبیق به عنوان یک رشته هگزادسیمال (شانزده‌شانزدهی). توضیح عبارت تطبیق را در ادامه مشاهده کنید. -V نمایش اطلاعات نسخه. -i صرف‌نظر کردن از بزرگ و کوچک بودن حروف در عبارت باقاعده (regex). -w تطبیق عبارت باقاعده به عنوان یک کلمه کامل. -q حالت بی‌صدا؛ عدم چاپ هرگونه اطلاعات به جز سرایند بسته‌ها و بارهای مفید آن‌ها (در صورت مرتبط بودن). -p رابط شبکه در حالت بی‌قید (promiscuous mode) قرار داده نشود. -e نمایش بسته‌های خالی. به طور معمول بسته‌های خالی نادیده گرفته می‌شوند زیرا بار مفیدی برای جستجو ندارند. در صورت تعیین این گزینه، بسته‌های خالی بدون توجه به عبارت باقاعده مشخص‌شده نمایش داده خواهند شد. -v معکوس کردن تطبیق؛ فقط بسته‌هایی که مطابقت ندارند نمایش داده شوند. -x تخلیه (dump) محتویات بسته به هر دو فرمت هگزادسیمال و ASCII. -l بافر کردن خروجی استاندارد (stdout) به صورت سطری (line buffered). -C رنگی کردن موارد منطبق در خروجی محتویات بسته. -u نمایش نویسه‌های UTF-8 در خروجی محتویات بسته. -D هنگام خواندن فایل‌های pcap_dump، بازپخش آن‌ها با همان فواصل زمانی ثبت‌شده انجام شود (شبیه‌سازی زمان واقعی). -t چاپ برچسب زمانی به شکل YYYY/MM/DD HH:MM:SS.UUUUUU در هر بار که بسته‌ای مطابقت پیدا می‌کند. -T چاپ برچسب زمانی به صورت +S.UUUUUU که نشان‌دهنده اختلاف زمانی (دلتا) بین موارد تطبیق بسته‌ها است. مشخص کردن دوباره این گزینه اختلاف زمانی را از زمان اولین تطبیق بسته نشان می‌دهد. -R تلاش برای لغو امتیازات دسترسی به کاربر DROPPRIVS_USER (که در زمان ساخت مشخص شده است) صورت نگیرد. ابزار ngrep تلاشی برای اعتبارسنجی ورودی‌های منابع زنده یا آفلاین انجام نمی‌دهد، زیرا بیشتر بر کارایی و پردازش حجم بالایی از داده‌ها متمرکز است تا صحت پروتکل، که در اغلب موارد فرض معقولی است. با این حال، گاهی اوقات این موضوع اهمیت پیدا می‌کند و بنابراین ngrep طبق یک قاعده سعی می‌کند حالت تدافعی داشته باشد و هرگونه امتیاز ریشه (root) را که ممکن است داشته باشد رها کند. سناریوهایی وجود دارند که در آن‌ها این رفتار می‌تواند به یک مانع تبدیل شود؛ بنابراین این گزینه برای کاربران نهایی فراهم شده است که می‌خواهند این ویژگی را غیرفعال کنند، اما باید با درک خطرات دست به این کار بزنند. بسته‌ها می‌توانند به طور تصادفی معیوب باشند یا حتی به طور خاص برای سرریز کردن ابزارهای شنود (sniffers) و به دست گرفتن کنترل آن‌ها طراحی شده باشند، و لغو امتیازات دسترسی ریشه در حال حاضر تنها روش کاهش خطری است که ngrep در برابر چنین حملاتی به کار می‌گیرد. استفاده از این گزینه و خاموش کردن این قابلیت با مسئولیت خودتان است. -c cols به‌طور صریح پهنای کنسول را برابر با ``cols'' قرار می‌دهد. توجه داشته باشید که این مقدار پهنای کنسول است، نه پهنای کامل آنچه ngrep به عنوان بار مفید چاپ می‌کند؛ بسته به حالت خروجی، ممکن است ngrep کمتر از ``cols'' بایت در هر سطر چاپ کند (به دلیل تورفتگی). -F file خواندن فیلتر bpf از نام فایل مشخص‌شده. این یک گزینه سازگاری برای کاربرانی است که با tcpdump آشنایی دارند. لطفاً توجه داشته باشید که تعیین گزینه «-F» هر فیلتر bpf مشخص‌شده در خط فرمان را لغو (override) خواهد کرد. -P char تعیین نویسه‌ای جایگزین برای نمایش نویسه‌های غیرقابل‌چاپ. مقدار پیش‌فرض «.» است. -K num قطع کردن اتصالات TCP منطبق (مانند tcpkill). آرگومان عددی مشخص می‌کند که چه تعداد قطعه (segment) حاوی پرچم RST ارسال شود. -W normal|byline|single|none تعیین شیوه‌ای جایگزین برای نمایش بسته‌ها، هنگامی که در حالت هگزادسیمال قرار ندارد. حالت «byline» شکست خطوط جاسازی‌شده را رعایت می‌کند و متن را تنها زمانی به سطر بعدی می‌برد که با یک کاراکتر خط جدید (linefeed) روبرو شود (برای نمونه، جهت مشاهده تراکنش‌های HTTP مفید است). حالت «none» تحت هیچ شرایطی متن را نمی‌شکند (کل بار مفید در یک سطر نمایش داده می‌شود). حالت «single» از نظر مفهومی همانند «none» است، با این تفاوت که تمام اطلاعات از جمله IP و اطلاعات سرایند مبدا/مقصد همه در یک سطر قرار می‌گیرند. «normal» حالت پیش‌فرض است و فقط برای جامعیت آورده شده است. این گزینه با «-x» ناسازگار است. -s snaplen تنظیم مقدار caplen برای bpf بر روی snaplen (پیش‌فرض 65536 است). -S limitlen تنظیم حد بالا برای اندازه بسته‌هایی که ngrep به آن‌ها نگاه می‌کند. برای بررسی تنها N بایت اول بسته‌ها بدون تغییر مقدار BPF snaplen مفید است. -I pcap_dump خواندن فایل pcap_dump به عنوان ورودی ngrep. با هر قالب فایل dump سازگار با pcap کار می‌کند. این گزینه برای جستجوی طیف گسترده‌ای از الگوهای مختلف روی یک جریان بسته یکسان مفید است. -O pcap_dump خروجی دادن بسته‌های منطبق در یک فایل dump سازگار با pcap. این قابلیت تداخلی با خروجی عادی در stdout ایجاد نمی‌کند. -n num فقط با مجموع num بسته تطبیق داده شود و سپس برنامه خارج شود. -d dev به‌طور پیش‌فرض ngrep یک رابط پیش‌فرض را برای شنود انتخاب می‌کند. از این گزینه برای اجبار ngrep به شنود روی رابط dev استفاده کنید. -A num تخلیه (dump) تعداد num بسته از بافت تعقیب‌کننده (trailing context) پس از تطبیق با یک بسته. -r تفکیک نشانی‌های IP کانتینر به نام‌های کانتینر Docker یا Podman آن‌ها. هنگام فعال بودن، نشانی‌های IP به صورت container_name(ip_address) در خروجی بسته‌ها نمایش داده می‌شوند. در صورتی که سوکت Docker یا Podman در دسترس باشد، ngrep از Events API برای ردیابی بلادرنگ کانتینر استفاده می‌کند. در غیر این صورت، به روش نظرسنجی دوره‌ای (polling) مبتنی بر CLI با زمان حیات کش (cache TTL) ۳۰ ثانیه‌ای بازمی‌گردد. این ویژگی را می‌توان در زمان ساخت با --disable-container-resolution حذف کرد. عبارت‌های تطبیق و فیلتر (MATCH AND FILTER EXPRESSIONS) match expression یک عبارت تطبیق، یا یک عبارت منظم توسعه‌یافته (extended regular expression) است، یا در صورتی که گزینه -X مشخص شده باشد، رشته‌ای است که بیانگر یک مقدار هگزادسیمال می‌باشد. یک عبارت منظم توسعه‌یافته از قوانینی که توسط GNU regex library پیاده‌سازی شده است پیروی می‌کند. عبارات هگزادسیمال می‌توانند به صورت اختیاری با `0x' شروع شوند؛ مانند `DEADBEEF' یا `0xDEADBEEF'. bpf filter فیلتری را انتخاب می‌کند که مشخص می‌سازد چه بسته‌هایی تخلیه (dump) شوند. اگر هیچ bpf filter تعیین نشود، تمام بسته‌های IP مشاهده‌شده روی رابط انتخابی تخلیه خواهند شد. در غیر این صورت، تنها بسته‌هایی که bpf filter برای آن‌ها `true' (درست) ارزیابی شود تخلیه می‌شوند. فیلتر bpf filter از یک یا چند عبارت پایه (primitive) تشکیل شده است. عبارت‌های پایه معمولاً شامل یک شناسه (id) (نام یا شماره) هستند که یک یا چند توصیف‌کننده (qualifier) پیش از آن‌ها قرار می‌گیرد. سه نوع مختلف از توصیف‌کننده‌ها وجود دارد: type توصیف‌کننده‌های نوع (type) مشخص می‌کنند که نام یا شماره شناسه به چه نوع موجودیتی اشاره دارد. انواع ممکن عبارتند از: host، net و port. برای نمونه، `host blort'، `net 1.2.3'، `port 80'. اگر توصیف‌کننده نوع مشخص نشود، host فرض می‌شود. dir توصیف‌کننده‌های جهت (dir) یک جهت انتقال خاص را به سمت و/یا از سمت id مشخص می‌کنند. جهت‌های ممکن عبارتند از: src، dst، src or dst و src and dst. برای نمونه، `src foo'، `dst net 1.2.3'، `src or dst port ftp-data'. اگر توصیف‌کننده جهت مشخص نشود، src or dst فرض می‌شود. برای لایه‌های پیوند «null» (مانند پروتکل‌های نقطه به نقطه نظیر slip)، توصیف‌کننده‌های inbound و outbound می‌توانند برای تعیین جهت مورد نظر استفاده شوند. proto توصیف‌کننده‌های پروتکل (proto) به پروتکل‌های فقط-IP محدود هستند. پروتکل‌های ممکن عبارتند از: tcp ، udp و icmp. برای نمونه، `udp src foo' یا `tcp port 21'. اگر هیچ توصیف‌کننده پروتکلی وجود نداشته باشد، تمام پروتکل‌های سازگار با آن نوع فرض می‌شوند. برای نمونه، `src foo' به معنی `ip and ((tcp or udp) src foo)'، عبارت `net bar' به معنی `ip and (net bar)' و `port 53' به معنی `ip and ((tcp or udp) port 53)' است. علاوه بر موارد فوق، چند کلیدواژه ویژه «پایه» وجود دارند که از این الگو پیروی نمی‌کنند: gateway، broadcast، less، greater و عبارات حسابی (arithmetic expressions). تمام این موارد در ادامه شرح داده شده‌اند. عبارت‌های فیلتر پیچیده‌تر با استفاده از کلمات and، or و not برای ترکیب عبارت‌های پایه ساخته می‌شوند. برای نمونه، `host blort and not port ftp and not port ftp-data'. برای صرفه‌جویی در تایپ، می‌توان فهرست‌های توصیف‌کننده یکسان را حذف کرد. برای نمونه، `tcp dst port ftp or ftp-data or domain' دقیقاً معادل با `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain' است. عبارت‌های پایه مجاز عبارتند از: dst host host درست است اگر فیلد مقصد IP بسته برابر با host باشد، که می‌تواند یک نشانی یا یک نام باشد. src host host درست است اگر فیلد مبدا IP بسته برابر با host باشد. host host درست است اگر مبدا یا مقصد IP بسته برابر با host باشد. هر یک از عبارت‌های host بالا می‌توانند با کلیدواژه‌های ip، arp یا rarp همراه شوند؛ مانند: ip host host که معادل است با: ether dst ehost درست است اگر نشانی مقصد اترنت برابر با ehost باشد. Ehost می‌تواند یک نام از /etc/ethers یا یک شماره باشد (برای قالب عددی به ethers(3N) مراجعه کنید). ether src ehost درست است اگر نشانی مبدا اترنت برابر با ehost باشد. ether host ehost درست است اگر نشانی مبدا یا مقصد اترنت برابر با ehost باشد. gateway host درست است اگر بسته از host به عنوان دروازه (gateway) استفاده کرده باشد. یعنی نشانی مبدا یا مقصد اترنت host بوده باشد اما نه مبدا IP و نه مقصد IP هیچ‌کدام host نبوده باشند. Host باید یک نام باشد و باید در هر دوی /etc/hosts و /etc/ethers یافت شود. (یک عبارت معادل عبارت است از: ether host ehost and not host host که می‌توان آن را هم با نام‌ها و هم با شماره‌ها برای host / ehost استفاده کرد.) dst net net درست است اگر نشانی مقصد IP بسته دارای شماره شبکه net باشد. Net می‌تواند یک نام از /etc/networks یا یک شماره شبکه باشد (برای جزئیات به networks(4) مراجعه کنید). src net net درست است اگر نشانی مبدا IP بسته دارای شماره شبکه net باشد. net net درست است اگر نشانی مبدا یا مقصد IP بسته دارای شماره شبکه net باشد. net net mask mask درست است اگر نشانی IP با net و با ماسک شبکه (netmask) مشخص‌شده مطابقت داشته باشد. می‌تواند با src یا dst توصیف شود. net net/len درست است اگر نشانی IP با net و با یک ماسک شبکه به پهنای len بیت مطابقت داشته باشد. می‌تواند با src یا dst توصیف شود. dst port port درست است اگر بسته ip/tcp یا ip/udp باشد و مقدار پورت مقصد آن برابر با port باشد. مقدار port می‌تواند یک شماره یا یک نام استفاده‌شده در /etc/services باشد (به tcp(4P) و udp(4P) مراجعه کنید). اگر از یک نام استفاده شود، هم شماره پورت و هم پروتکل بررسی می‌شوند. اگر از یک شماره یا نام مبهم استفاده شود، فقط شماره پورت بررسی می‌شود (برای نمونه، dst port 513 هم ترافیک tcp/login و هم ترافیک udp/who را چاپ می‌کند، و port domain هم ترافیک tcp/domain و هم udp/domain را چاپ می‌کند). src port port درست است اگر مقدار پورت مبدا بسته برابر با port باشد. port port درست است اگر پورت مبدا یا مقصد بسته برابر با port باشد. هر یک از عبارت‌های پورت بالا می‌توانند با کلیدواژه‌های tcp یا udp همراه شوند؛ مانند: tcp src port port که تنها با بسته‌های tcp که پورت مبدا آن‌ها port است مطابقت دارد. less length درست است اگر طول بسته کمتر یا مساوی با length باشد. این معادل است با: len <= length. greater length درست است اگر طول بسته بزرگتر یا مساوی با length باشد. این معادل است با: len >= length. ip proto protocol درست است اگر بسته یک بسته ip باشد (به ip(4P) مراجعه کنید) با نوع پروتکل protocol. مقدار Protocol می‌تواند یک شماره یا یکی از نام‌های tcp، udp یا icmp باشد. توجه داشته باشید که شناسه‌های tcp و udp نیز کلیدواژه هستند و باید با یک بک‌اسلش (\) اسکیپ شوند، که در C-shell به صورت \\ است. ip broadcast درست است اگر بسته یک بسته پخشی (broadcast) از نوع IP باشد. این عبارت هر دو قرارداد پخشی تمام‌صفر و تمام‌یک را بررسی می‌کند و ماسک زیرشبکه (subnet mask) محلی را جستجو می‌کند. ip multicast درست است اگر بسته یک بسته چندپخشی (multicast) از نوع IP باشد. ip مخففی است برای: ether proto ip tcp, udp, icmp مخفف‌هایی هستند برای: ip proto p که در آن p یکی از پروتکل‌های بالا است. expr relop expr درست است اگر این رابطه برقرار باشد، که در آن relop یکی از عملگرهای >، <، >=، <=، =، != است، و expr یک عبارت حسابی متشکل از ثابت‌های صحیح (بیان‌شده در نحو استاندارد زبان C)، عملگرهای دودویی عادی [+, -, *, /, &, |]، عملگر طول و دسترسی‌دهنده‌های داده‌های ویژه بسته است. برای دسترسی به داده‌های درون بسته، از نحو زیر استفاده کنید: proto [ expr : size ] مقدار Proto یکی از ip، tcp، udp یا icmp است و لایه پروتکل را برای عملیات شاخص‌گذاری مشخص می‌کند. آفست بایتی نسبت به لایه پروتکل مشخص‌شده با expr داده می‌شود. مقدار Size اختیاری است و تعداد بایت‌های فیلد مورد نظر را نشان می‌دهد؛ می‌تواند یک، دو یا چهار باشد و پیش‌فرض آن یک است. عملگر طول که با کلیدواژه len مشخص می‌شود، طول بسته را برمی‌گرداند. برای نمونه، `ether[0] & 1 != 0' تمام ترافیک چندپخشی (multicast) را دریافت می‌کند. عبارت `ip[0] & 0xf != 5' تمام بسته‌های IP دارای گزینه‌ها (options) را می‌گیرد. عبارت `ip[6:2] & 0x1fff = 0' تنها دیتاگرام‌های قطعه‌بندی‌نشده (unfragmented) و قطعه صفر از دیتاگرام‌های قطعه‌بندی‌شده را دریافت می‌کند. این بررسی به طور ضمنی روی عملیات شاخص‌گذاری tcp و udp اعمال می‌شود. برای نمونه، tcp[0] همیشه به معنی اولین بایت از سرایند TCP است و هرگز به معنای اولین بایت از یک قطعه میانی نیست. عبارت‌های پایه می‌توانند با استفاده از موارد زیر ترکیب شوند: یک گروه پرانتزدار از عبارت‌های پایه و عملگرها (پرانتزها برای شل معنای خاص دارند و باید اسکیپ شوند). نقیض (`!' یا `not'). عطف / ترکیب عطفی (`&&' یا `and'). فصل / ترکیب فصلی (`||' یا `or'). نقیض بالاترین اولویت را دارد. فصل و عطف اولویت یکسانی دارند و از چپ به راست ارزیابی می‌شوند. توجه داشته باشید که اکنون نشانه‌های صریح and برای الحاق الزامی هستند و کنار هم قرار دادن ساده مجاز نیست. اگر یک شناسه بدون کلیدواژه داده شود، جدیدترین کلیدواژه فرض می‌شود. برای نمونه: not host vs and ace کوتاه‌شده عبارت زیر است: not host vs and host ace که نباید با عبارت زیر اشتباه گرفته شود: not ( host vs or ace ) آرگومان‌های عبارت می‌توانند به صورت یک آرگومان واحد یا چندین آرگومان به ngrep پاس داده شوند، هرکدام که راحت‌تر باشد. به طور کلی، اگر عبارت شامل نویسه‌های متا (metacharacters) شل باشد، انتقال آن به عنوان یک آرگومان واحد درون علامت نقل قول (کوتیشن) آسان‌تر است. چندین آرگومان قبل از پردازش، با فاصله به یکدیگر متصل می‌شوند. عیب‌یابی (DIAGNOSTICS) خطاهای مربوط به ngrep، libpcap و GNU regex library همگی در stderr خروجی داده می‌شوند. وضعیت خروج (EXIT STATUS) ابزار ngrep با یکی از مقادیر زیر خارج می‌شود: 0 یک یا چند فریم مطابقت یافتند. 1 هیچ فریمی مطابقت نیافت. 2 خطایی رخ داد. 3+ جهنم در حال یخ زدن است، فرار کنید! نویسنده (AUTHOR) نوشته‌شده توسط Jordan Ritter . گزارش باگ‌ها (REPORTING BUGS) لطفاً باگ‌ها را به ردیاب باگ GitHub ابزار ngrep گزارش دهید: http://github.com/jpr5/ngrep/issues بازخوردهای عمومی که گزارش باگ یا درخواست قابلیت جدید نیستند باید مستقیماً از طریق ایمیل به نویسنده ارسال شوند. نکات (NOTES) ALL YOUR BASE ARE BELONG TO US. *nux فوریه 2026 NGREP(8)