ZMAP(1) zmap ZMAP(1)

zmap - پویشگر سریع اینترنت

zmap [ -p <port(s)> ] [ -o <outfile> ] [ OPTIONS... ] [ ip/hostname/range ]

ZMap یک ابزار شبکه‌ای برای پویش کل فضای آدرس IPv4 (یا نمونه‌های بزرگ) است. ZMap قادر است کل اینترنت را در حدود ۴۵ دقیقه بر روی یک اتصال شبکه گیگابیتی پویش کرده و به حدود ۹۸٪ سرعت نظری خط برسد.

آدرس‌های IP یا نام‌های میزبان DNS برای پویش. محدوده‌های IP را در قالب نمادگذاری بلوک CIDR می‌پذیرد. پیش‌فرض 0.0.0/8 است.
فهرستی از درگاه‌های TCP/UDP و/یا محدوده‌های درگاه برای پویش (مانند 80,443,100-105). از ´*´ برای پویش همه درگاه‌ها، از جمله درگاه 0 استفاده کنید.
هنگام استفاده از یک ماژول خروجی که نتایج را در فایل می‌نویسد، داده‌ها را در این فایل بنویسید. برای stdout از - استفاده کنید.
فایلی شامل زیرشبکه‌ها برای مستثنی کردن، با نمادگذاری CIDR، یک مورد در هر خط. توصیه می‌شود از این گزینه برای مستثنی کردن آدرس‌های RFC 1918، چندپخشی (multicast)، فضای رزرو شده IANA و سایر آدرس‌های با کاربرد خاص IANA استفاده کنید. یک فایل نمونه لیست مسدودی blocklist.conf برای این منظور وجود دارد.
فایلی شامل زیرشبکه‌ها برای پویش، با نمادگذاری CIDR، یک مورد در هر خط. مشخص کردن یک فایل لیست مجاز معادل مشخص کردن مستقیم محدوده‌ها در رابط خط فرمان است، اما امکان تعیین تعداد زیادی از زیرشبکه‌ها را فراهم می‌کند. نکته: اگر تعداد بسیار زیادی آدرس IP تکی (بیش از ۱۰ میلیون) را مشخص می‌کنید، در عوض باید از --list-of-ips-file استفاده کنید.
فایلی شامل آدرس‌های IP تکی برای پویش، یک مورد در هر خط. این ویژگی به شما امکان می‌دهد تعداد زیادی از آدرس‌های نامرتبط را پویش کنید. اگر تعداد کمی IP دارید، مشخص کردن آن‌ها در خط فرمان یا با استفاده از --allowlist-file سریع‌تر است. این گزینه فقط باید هنگام پویش بیش از ۱۰ میلیون آدرس استفاده شود. هنگامی که همراه با --allowlist-path استفاده شود، تنها میزبان‌های موجود در اشتراک هر دو مجموعه پویش خواهند شد. میزبان‌های مشخص‌شده در اینجا که در لیست مسدودی (blocklist) قرار دارند، مستثنی خواهند شد.

تنظیم نرخ ارسال بر حسب بسته در ثانیه (packets/sec). نکته: هنگامی که با --probes ترکیب شود، این مقدار کل بسته‌ها در هر ثانیه است، نه IPها در ثانیه. تنظیم نرخ روی 0 پویش را با حداکثر سرعت خط انجام می‌دهد. پیش‌فرض: 10000 pps.
تنظیم نرخ ارسال بر حسب بیت در ثانیه (از پسوندهای G، M و K پشتیبانی می‌کند، مانند -B 10M برای 10 mbps). این گزینه پرچم --rate را نادیده می‌گیرد.
محدود کردن سقف تعداد اهداف برای کاوش. این مقدار می‌تواند یک عدد (مانند -n 1000) یا درصدی (مانند -n 0.1%) از فضای آدرس قابل پویش (پس از استثنا کردن blocklist) باشد. در صورت پویش چندین درگاه، یک هدف به صورت یک جفت IP/درگاه است، و در غیر این صورت یک IP در نظر گرفته می‌شود. در صورت استفاده از درصد و چندین درگاه، درصد از کل ترکیبات جفت IP/درگاه محاسبه می‌شود.
خروج از برنامه پس از دریافت این تعداد نتیجه.
محدود کردن مدت زمان ارسال بسته‌ها.
مدت زمانی که پس از اتمام ارسال، دریافت داده‌ها ادامه می‌یابد (پیش‌فرض=8).
سید (seed) مورد استفاده برای انتخاب جایگشت آدرس‌ها. اگر می‌خواهید آدرس‌ها را در چندین اجرای ZMap با ترتیب یکسان پویش کنید، از این گزینه استفاده کنید.
تعداد کاوش‌ها برای ارسال به هر جفت IP/درگاه (پیش‌فرض=1). کاوش‌ها برای یک IP/درگاه مشخص به‌صورت متوالی ارسال می‌شوند؛ بنابراین اگر --probes=4 باشد، ۴ بسته کاوش به‌صورت متوالی به آن هدف ارسال می‌شود، به‌جای آنکه ۴ بار روی کل فضای هدف پیمایش شود. از آنجا که ZMap فریم‌های Ethernet را مستقیماً تولید می‌کند، ممکن است کاوش‌ها در مسیر رسیدن به مقصد گم شوند. افزایش --probes شانس دریافت کاوش توسط یک میزبان برخط را در یک شبکه غیرقابل‌اعتماد افزایش می‌دهد. این گزینه با --retries که صرفاً تعداد تلاش‌ها برای ارسال یک کاوش منفرد روی NIC مبدا را تعیین می‌کند، متفاوت است.
تعداد دفعات تلاش برای ارسال مجدد یک بسته در صورت شکست فراخوانی sendto (پیش‌فرض=10).
تعداد بسته‌ها برای دسته‌بندی پیش از فراخوانی سیستم‌کال مناسب جهت ارسال. برای بهره‌گیری از فراخوانی سیستمی sendmmsg در لینوکس جهت ارسال کل دسته به‌صورت یکباره استفاده می‌شود. این ویژگی فقط روی لینوکس در دسترس است و سایر سیستم‌عامل‌ها هر بسته را به‌صورت تکی ارسال می‌کنند. (پیش‌فرض=64).
تقسیم پویش به N قطعه/بخش میان نمونه‌های مختلف zmap (پیش‌فرض=1). هنگام قطعه‌بندی، استفاده از --seed الزامی است.
تعیین این‌که کدام قطعه پویش شود (پیش‌فرض=0). قطعه‌ها در بازهٔ [0, N) با مبنای صفر شماره‌گذاری می‌شوند (0-indexed)، که در آن N تعداد کل قطعه‌ها است. هنگام قطعه‌بندی، استفاده از --seed الزامی است.

پورت(های) مبدأ برای ارسال بسته‌ها
به‌عنوان یک بازنویسی برای فعال/غیرفعال کردن اعتبارسنجی پورت مبدأ به کار می‌رود. اعتبارسنجی پورت مبدأ بررسی می‌کند که پورت مبدأ در پاسخ کاوشِ دریافت‌شده با پورت مقصد کاوشِ ارسال‌شده به آن جفت IP/port مطابقت داشته باشد. این امر تضمین می‌کند که چندین پویش هم‌زمان ZMap به یک میزبان اما با پورت‌های متفاوت با یکدیگر تداخل نداشته باشند. این گزینه رفتار پیش‌فرض هر ماژول را در رابطه با اعتبارسنجی یا عدم اعتبارسنجی پورت‌های مبدأ با پاسخ‌های کاوش لغو می‌کند.
نشانی(های) مبدأ برای ارسال بسته‌ها از آن‌ها. به‌صورت یک IP منفرد یا یک محدوده (مانند 10.0.0.1-10.0.0.9).
نشانی MAC دروازه (Gateway) برای ارسال بسته‌ها به آن (در صورتی که تشخیص خودکار با شکست مواجه شود)
نشانی MAC مبدأ برای ارسال بسته‌ها از آن (در صورتی که تشخیص خودکار با شکست مواجه شود)
رابط شبکه برای استفاده
ارسال بسته‌های لایهٔ IP به‌جای بسته‌های اترنت (برای رابط‌های غیر اترنتی)
(تنها در Netmap) پیش از شروع پویش منتظر پاسخ دادن ip به درخواست ICMP Echo بماند. این قابلیت در هنگام اتصال به سوییچی با STP فعال مفید است، جایی که بازنشانی فیزیکی (PHY reset) موردنیاز برای ورود و خروج به حالت Netmap باعث می‌شود سوییچ پورت را قطع کند تا زمانی که پروتکل درخت پوشا تعیین کند که پیوند باید به وضعیت forward درآید.

ZMap به کاربران امکان می‌دهد ماژول‌های کاوش اختصاصی خود را مشخص کرده و بنویسند. ماژول‌های کاوش وظیفهٔ تولید بسته‌های کاوش برای ارسال، و پردازش پاسخ‌های دریافتی از میزبان‌ها را بر عهده دارند.

فهرست کردن ماژول‌های کاوش موجود (مانند tcp_synscan)
انتخاب ماژول کاوش (پیش‌فرض=tcp_synscan)
آرگومان‌ها برای ارسال به ماژول کاوش
تنظیم مقدار TTL برای بسته‌های IP کاوش
فهرست کردن فیلدهایی که ماژول کاوشِ انتخاب‌شده می‌تواند به ماژول خروجی بفرستد

ZMap به کاربران امکان می‌دهد ماژول‌های خروجی اختصاصی خود را برای استفاده با ZMap مشخص کرده و بنویسند. ماژول‌های خروجی وظیفهٔ پردازش مجموعه‌فیلدهای بازگردانده‌شده توسط ماژول کاوش و نمایش آن‌ها به کاربر را بر عهده دارند. کاربران می‌توانند فیلدهای خروجی را مشخص کرده و روی فیلدهای خروجی فیلتر بنویسند.

فهرست کردن ماژول‌های خروجی موجود (مانند csv)
انتخاب ماژول خروجی (پیش‌فرض=csv)
آرگومان‌ها برای ارسال به ماژول خروجی
فهرست جداشده با کاما از فیلدها برای خروجی
تعیین یک فیلتر خروجی روی فیلدهای تعریف‌شده توسط ماژول کاوش. برای جزئیات بیشتر به بخش فیلتر خروجی مراجعه کنید.
حذف هرگونه ردیف سرآیند (مانند فیلدهای سرآیند CSV) از خروجی ZMap. این گزینه زمانی مفید است که نتایج را از طریق لوله (pipe) به برنامهٔ دیگری می‌فرستید که فقط انتظار داده دارد. میزبان‌ها اغلب در پاسخ به یک پروب چندین پاسخ ارسال می‌کنند (خواه به این دلیل که اسکنر بسته RST برگشت نمی‌دهد یا به این دلیل که پشته TCP میزبان به‌صورت نادرست پیاده‌سازی شده است). برای رفع این مشکل، ZMap تلاش می‌کند تا اهداف پاسخ‌دهنده (ip,port) تکراری را حذف کند.
روشی را که ZMap برای حذف پاسخ‌های تکراری استفاده می‌کند، مشخص می‌کند. گزینه‌ها عبارتند از: full، window و none. روش full از یک بیت‌مپ (bitmap) ۳۲ بیتی استفاده می‌کند و تضمین می‌کند که هیچ پاسخ تکراری منتشر نشود. با این حال، full-deduplication برای یک تک‌پورت به حدود ۵۰۰ مگابایت حافظه نیاز دارد. ما از حذف تکراری کامل برای چند پورت پشتیبانی نمی‌کنیم. روش window از یک پنجره لغزان از آخرین تعداد پاسخ‌های (تعیین‌شده توسط کاربر) مشخص‌شده توسط --dedup-window-size استفاده می‌کند. مقدار none از هرگونه حذف تکراری جلوگیری می‌کند.
اندازه پنجره لغزان را به‌عنوان n پاسخ هدف آخر جهت استفاده برای حذف تکراری مشخص می‌کند. تنها در صورت استفاده از حذف تکراری window کاربرد دارد.

به‌روزرسانی‌های وضعیت را یک‌بار در ثانیه چاپ نکن
سطح جزئیات گزارش (۰-۵، پیش‌فرض=۳)
فایل خروجی برای پیام‌های گزارش. به‌طور پیش‌فرض، stderr.
فایل خروجی برای فراداده اسکن (JSON)
نوشتن ورودی‌های گزارش در فایلی با برچسب زمان در این دایرکتوری
نوشتن به‌روزرسانی‌های پیشرفت اسکن در یک فایل CSV
غیرفعال کردن ارسال پیام‌های گزارش به syslog
افزودن یادداشت‌های تعیین‌شده توسط کاربر به فراداده اسکن
افزودن فراداده JSON تعیین‌شده توسط کاربر به فراداده اسکن

رشته‌های استفاده‌شده برای ارسال بسته‌ها. ZMap تلاش خواهد کرد تا تعداد بهینه رشته‌های ارسال را بر اساس تعداد هسته‌های پردازنده تشخیص دهد. پیش‌فرض: min(4, number of processor cores on host - 1).
خواندن یک فایل پیکربندی که می‌تواند هر گزینه دیگری را مشخص کند.
چاپ هر بسته در stdout به‌جای ارسال آن (مفید برای اشکال‌زدایی)
بسته‌ها را واقعاً ارسال نکن، یک نمایش دودویی از dst IP و dst Port پروب را چاپ کن. برای آزمون‌های یکپارچه‌سازی سریع‌تر استفاده می‌شود، نه برای استفاده عمومی.
حداکثر خطاهای sendto در کارت شبکه (NIC) قبل از اینکه اسکن متوقف شود
حداقل نرخ پاسخ (hitrate) که اسکن می‌تواند به آن برسد قبل از اینکه متوقف شود
فهرستی از هسته‌ها جدا شده با کاما برای اختصاص دادن فرآیند به آن‌ها
نادیده گرفتن ورودی‌های نامعتبر، معیوب یا غیرقابل‌حل در فایل allowlist/blocklist. جایگزین گزینه --ignore-invalid-hosts در نسخه‌های قبل از ۳.x می‌شود.
چاپ راهنما و خروج
چاپ نسخه و خروج نتایج ایجادشده توسط یک ماژول probe را می‌توان پیش از ارسال به ماژول خروجی فیلتر کرد. فیلترها بر روی فیلدهای خروجی یک ماژول probe تعریف می‌شوند. فیلترها به یک زبان فیلترسازی ساده، مشابه SQL نوشته شده و با استفاده از گزینهٔ --output-filter به ZMap منتقل می‌شوند. فیلترهای خروجی معمولاً برای حذف نتایج تکراری یا فقط ارسال پاسخ‌های موفق به ماژول خروجی به کار می‌روند.

عبارت‌های فیلتر به صورت <fieldname> <operation> <value> هستند. نوع <value> باید یک رشته یا لیترال عدد صحیح بدون علامت باشد و با نوع <fieldname> مطابقت داشته باشد. عملگرهای معتبر برای مقایسهٔ اعداد صحیح عبارتند از = !=، ,، =,=. عملگرها برای مقایسهٔ رشته عبارتند از =، !=. پرچم --list-output-fields فیلدها و نوع‌های موجود برای ماژول probe انتخاب‌شده را چاپ کرده و سپس خارج می‌شود.

عبارت‌های فیلتر مرکب را می‌توان با ترکیب عبارت‌های فیلتر با استفاده از پرانتز برای تعیین اولویت عملگرها، و عملگرهای && (AND منطقی) و || (OR منطقی) ایجاد کرد.

برای مثال، فیلتری که تنها پاسخ‌های موفق و غیرتکراری را عبور دهد به این صورت نوشته می‌شود: --output-filter="success = 1 && repeat = 0"

این آرگومان‌ها همگی با استفاده از گزینهٔ --probe-args=args منتقل می‌شوند. در هر بار تنها یک آرگومان می‌تواند ارسال شود.

مسیر فایل payload برای ارسال به هر میزبان از طریق UDP.
مسیر فایل الگو (template). برای هر میزبان مقصد، فایل الگو مقداردهی شده، به عنوان payload در پروتکل UDP تنظیم گشته و ارسال می‌شود.
متن ASCII برای ارسال به هر میزبان مقصد.
دادهٔ دودویی کدگذاری‌شده به صورت هگزادسیمال (Hex-encoded binary) برای ارسال به هر میزبان مقصد.
اطلاعات مربوط به فیلدهای مجاز الگو را چاپ کرده و خارج می‌شود.

شما می‌توانید نرخ پویش ZMap را در حین اسکن، با ارسال سیگنال‌های SIGUSR1 (افزایش) و SIGUSR2 (کاهش) به ZMap تغییر دهید. این کار منجر به افزایش یا کاهش نرخ پویش به میزان 5% خواهد شد.

November 2025 ZMap