\" SPDX-License-Identifier: GPL-2.0-only .TH SCAPY 1 "March 24, 2024" .SH "نام (NAME)" scapy \- ابزار تعاملی دستکاری بسته‌های شبکه .SH "خلاصه دستور (SYNOPSIS)" .B scapy .RI [ گزینه‌ها ] .SH "توضیحات (DESCRIPTION)" این صفحه راهنما به‌طور خلاصه ابزار .B Scapy را شرح می‌دهد. .PP \fBScapy\fP یک ابزار تعاملی قدرتمند برای دستکاری بسته‌ها، تولید بسته، اسکن شبکه، کشف شبکه، شنود بسته (اسنیفر) و غیره است. این ابزار در حال حاضر می‌تواند جایگزین hping، بخش‌هایی از nmap، arpspoof، arp-sk، arping، tcpdump، tshark، p0f و... شود. .PP \fBScapy\fP از مفسر Python به‌عنوان محیط خط فرمان خود استفاده می‌کند. این بدان معناست که می‌توانید مستقیماً از زبان Python استفاده کنید (انتساب متغیرها، استفاده از حلقه‌ها، تعریف توابع و غیره). .PP ایدهٔ کار ساده است. این نوع ابزارها دو کار انجام می‌دهند: ارسال بسته‌ها و دریافت پاسخ‌ها. این همان کاری است که \fBScapy\fP انجام می‌دهد: شما مجموعه‌ای از بسته‌ها را تعریف می‌کنید، بسته‌ها را ارسال می‌کند، پاسخ‌ها را دریافت می‌نماید، درخواست‌ها را با پاسخ‌ها مطابقت می‌دهد و فهرستی از جفت‌های بسته (درخواست، پاسخ) و فهرستی از بسته‌های تطبیق‌نیافته را برمی‌گرداند. این مزیت بزرگی نسبت به ابزارهایی مانند nmap یا hping دارد، زیرا یک پاسخ صرفاً به (open/closed/filtered) خلاصه نمی‌شود، بلکه کل بسته بازگردانده می‌شود. .PP علاوه بر این، می‌توان از آن برای ساخت توابع سطح بالاتر استفاده کرد؛ برای نمونه، تابعی که traceroute انجام می‌دهد و در نتیجه فقط TTL آغازین درخواست و IP مبدا پاسخ را ارائه می‌دهد؛ یا تابعی که به کل یک شبکه پینگ ارسال می‌کند و فهرستی از دستگاه‌های پاسخ‌دهنده را تحویل می‌دهد؛ یا تابعی که اسکن درگاه انجام داده و یک گزارش LaTeX تولید می‌کند. .SH "گزینه‌ها (OPTIONS)" گزینه‌های Scapy عبارتند از: .TP \fB\-h\fR نمایش راهنمای استفاده .TP \fB\-H\fR حالت بدون سرایند (header-less)، همچنین میزان جزئیات خروجی را کاهش می‌دهد. .TP \fB\-d\fR افزایش پرگویی گزارش‌ها (log verbosity). می‌تواند چندین بار استفاده شود. .TP \fB\-p\fR PRESTART_FILE استفاده از PRESTART_FILE به جای $HOME/.config/scapy/prestart.py به عنوان فایل پیش‌راه‌اندازی (pre-startup) .TP \fB\-P\fR فایل پیش‌راه‌اندازی اجرا نشود .TP \fB\-c\fR STARTUP_FILE استفاده از STARTUP_FILE به جای $HOME/.config/scapy/startup.py به عنوان فایل راه‌اندازی .TP \fB\-C\fR فایل راه‌اندازی اجرا نشود .SH "دستورها (COMMANDS)" در حال حاضر تنها دستورهای حیاتی برای شروع کار در اینجا فهرست شده‌اند. .TP \fBls()\fR لایه‌های پروتکل پشتیبانی‌شده را فهرست می‌کند. اگر یک لایه پروتکل به عنوان پارامتر داده شود، فیلدها و انواع فیلدهای آن را فهرست می‌کند. اگر یک رشته به عنوان پارامتر داده شود، برای پالایش لایه‌ها استفاده می‌شود. .TP \fBlsc()\fR دستورهای کاربری اصلی scapy را فهرست می‌کند. .TP \fBconf\fR این شیء حاوی پیکربندی است. .SH "فایل‌ها (FILES)" \fB$HOME/.config/scapy/prestart.py\fR این فایل پیش از بارگذاری هستهٔ Scapy اجرا می‌شود. تنها شیء \fBconf\fP در دسترس است. این فایل می‌تواند برای پیکربندی CLI، پیکربندی پارامترهایی مانند فهرست \fBconf.load_layers\fP جهت انتخاب این‌که کدام لایه‌ها بارگذاری شوند، یا تغییر سطح لاگ‌گیری (به عنوان مثال) استفاده شود: .nf conf.interactive_shell = "bpython" log_loading.setLevel(logging.WARNING) conf.load_layers.remove("bluetooth") conf.load_layers.append("new_layer") .fi \fB$HOME/.config/scapy/startup.py\fR این فایل پس از بارگذاری Scapy اجرا می‌شود. می‌توان از آن برای پیکربندی بیشتر رفتارهای Scapy، مانند لغو ثبت لایه‌ها استفاده کرد: .nf conf.prog.pdfreader = "xpdf" split_layers(UDP,DNS) .fi .SH "مثال‌ها (EXAMPLES)" مثال‌های دارای جزئیات بیشتر در مستندات در نشانی \fIhttps://scapy.readthedocs.io\fP در دسترس هستند. کافی است \fBscapy\fP را اجرا کرده و دستورهای زیر را در مفسر امتحان کنید. .LP آزمایش استحکام یک پشتهٔ شبکه با بسته‌های نامعتبر: .nf sr(IP(dst="172.16.1.1", ihl=2, options=["verb$2"], version=3)/ICMP(), timeout=2) .fi .LP شنود و کالبدشکافی بسته (با فیلتر bpf یا خروجی مشابه tshark): .nf a=sniff(filter="tcp port 110") a=sniff(prn = lambda x: x.show) .fi .LP ارسال مجدد بسته‌های شنودشده: .nf a=sniff(filter="tcp port 110") sendp(a) .fi .LP ارسال مجدد بسته‌های فایل pcap: .nf sendp(rdpcap("file.cap")) .fi .LP ردیابی مسیر دستی TCP (دستور traceroute دستی): .nf sr(IP(dst="www.google.com", ttl=(1,30))/TCP(seq=RandInt(), sport=RandShort(), dport=dport) .fi .LP اسکن پروتکل: .nf sr(IP(dst="172.16.1.28", proto=(1,254))) .fi .LP پینگ ARP: .nf srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="172.16.1.1/24")) .fi .LP اسکن ACK: .nf sr(IP(dst="172.16.1.28")/TCP(dport=(1,1024), flags="A")) .fi .LP انگشت‌نگاری غیرفعال سیستم‌عامل (Passive OS fingerprinting): .nf sniff(prn=prnp0f) .fi .LP انگشت‌نگاری فعال سیستم‌عامل (Active OS fingerprinting): .nf nmap_fp("172.16.1.232") .fi .LP مسموم‌سازی حافظهٔ نهان ARP (یا ARP cache poisoning): .nf sendp(Ether(dst=tmac)/ARP(op="who-has", psrc=victim, pdst=target)) .fi .LP گزارش‌گیری: .nf report_ports("192.168.2.34", (20,30)) .fi .SH "همچنین ببینید (SEE ALSO)" .nf وب‌گاه رسمی: \fIhttps://scapy.net\fP مخزن توسعه گیت‌هاب: \fIhttps://github.com/secdev/scapy\fP مستندات رسمی: \fIhttps://scapy.readthedocs.io/en/latest\fP .fi .SH "گزارش باگ‌ها (BUGS)" برای مسیرهایی که از نام‌های مستعار رابط شبکه (interface aliases) استفاده می‌کنند، IP مبدا صحیحی ارائه نمی‌دهد. .PP ممکن است تحت بار کاری سنگین، بسته‌ها را از دست بدهد. این یک محدودیت از سوی خود Python است. .PP ذخیره‌سازی نشست به توانایی Python در مارشال کردن اشیاء (marshal) محدود است. در نتیجه، توابع lambda و مولدها (generators) را نمی‌توان ذخیره کرد، که به طور جدی سودمندی این قابلیت را کاهش می‌دهد. .PP فیلترهای BPF بر روی رابط‌های نقطه به نقطه (Point-to-point) کار نمی‌کنند. .SH "نویسندگان (AUTHORS)" Philippe Biondi و جامعهٔ Scapy.