NDIFF(1) دستورات کاربر NDIFF(1) نام (NAME) ndiff - مقایسه و نمایش تفاوت‌های میان نتایج پویش‌های Nmap خلاصه دستور (SYNOPSIS) ndiff [گزینه‌ها] {a.xml} {b.xml} توضیحات (DESCRIPTION) ابزار Ndiff برنامه‌ای برای کمک به مقایسه پویش‌های Nmap است. این ابزار دو فایل خروجی XML مربوط به Nmap را دریافت کرده و تفاوت‌های میان آن‌ها را نمایش می‌دهد. تفاوت‌های بررسی‌شده عبارتند از: • وضعیت‌های میزبان (مانند تغییر از حالت بالا به پایین) • وضعیت‌های درگاه (مانند تغییر از حالت باز به بسته) • نگارش‌های سرویس (از گزینه -sV) • تطبیق‌های سیستم‌عامل (از گزینه -O) • خروجی اسکریپت ابزار Ndiff همانند ابزار استاندارد diff، در هر زمان دو پویش را با یکدیگر مقایسه می‌کند. گزینه‌ها (OPTIONS) -h, --help نمایش پیام راهنما و خروج. -v, --verbose گنجاندن تمام میزبان‌ها و درگاه‌ها در خروجی، نه فقط آن‌هایی که تغییر کرده‌اند. --text نوشتن خروجی در قالب متنی خوانا برای انسان. --xml نوشتن خروجی در قالب ماشینی XML. ساختار سند در فایل ndiff.dtd موجود در بسته توزیع تعریف شده است. هر آرگومان دیگری به عنوان نام فایل‌های خروجی XML ابزار Nmap در نظر گرفته می‌شود. دقیقاً باید دو فایل مشخص شوند. مثال‌ها (EXAMPLES) برای مقایسه خروجی دو پویش Nmap که از گزینه‌های متفاوتی استفاده کرده‌اند از Ndiff استفاده می‌کنیم. در پویش نخست، یک پویش سریع (-F) انجام می‌دهیم که برای افزایش سرعت، درگاه‌های کمتری را بررسی می‌کند. در پویش دوم، مجموعه بزرگ‌تر و پیش‌فرض درگاه‌ها را پویش کرده و یک اسکریپت NSE را اجرا می‌کنیم. # nmap -F scanme.nmap.org -oX scanme-1.xml # nmap --script=html-title scanme.nmap.org -oX scanme-2.xml $ ndiff -v scanme-1.xml scanme-2.xml -Nmap 5.35DC1 at 2010-07-16 12:09 +Nmap 5.35DC1 at 2010-07-16 12:13 scanme.nmap.org (64.13.134.52): Host is up. -Not shown: 95 filtered ports +Not shown: 993 filtered ports PORT STATE SERVICE VERSION 22/tcp open ssh 25/tcp closed smtp 53/tcp open domain +70/tcp closed gopher 80/tcp open http +|_ html-title: Go ahead and ScanMe! 113/tcp closed auth +31337/tcp closed Elite تغییرات با علامت - یا + در ابتدای خط مشخص می‌شوند. از خروجی می‌توان دریافت که پویش بدون گزینه پویش سریع -F دو درگاه اضافی پیدا کرده است: ۷۰ و ۳۱۳۳۷. اسکریپت html-title خروجی‌های بیشتری برای درگاه ۸۰ تولید کرده است. از روی تعداد درگاه‌ها می‌توان دریافت که پویش سریع ۱۰۰ درگاه (۹۵ فیلترشده، ۳ باز و ۲ بسته) را بررسی کرده، در حالی که پویش عادی ۱۰۰۰ درگاه (۹۹۳ فیلترشده، ۳ باز و ۴ بسته) را پویش کرده است. گزینه -v (یا --verbose) در Ndiff باعث می‌شود حتی درگاه‌هایی که تغییری نکرده‌اند نیز نمایش داده شوند، مانند ۲۲ و ۲۵. بدون -v، این درگاه‌ها در خروجی نمایش داده نمی‌شدند. خروجی (OUTPUT) دو حالت خروجی وجود دارد: متنی و XML. خروجی متنی حالت پیش‌فرض است و با گزینه --text نیز قابل انتخاب است. خروجی متنی شبیه به یک diff یکپارچه از خروجی استاندارد ترمینال Nmap است. در ابتدای هر خط نویسه‌ای قرار می‌گیرد که نشان‌دهنده تغییر آن است. - نشان می‌دهد که خط در پویش نخست وجود داشته اما در پویش دوم نیست؛ + نشان می‌دهد که در پویش دوم بوده اما در پویش اول نبوده است. خطی که تغییر کرده با یک خط - و به دنبال آن یک خط + نشان داده می‌شود. خطوطی که تغییر نکرده‌اند با یک فاصله خالی در ابتدای خط نمایش می‌یابند. مثال 1 نمونه‌ای از خروجی متنی را نشان می‌دهد. در اینجا، درگاه ۸۰ روی میزبان photos-cache-snc1.facebook.com دارای نگارش سرویس شده است (lighttpd 1.5.0). میزبان 69.63.179.25 نام DNS معکوس خود را تغییر داده است. میزبان 69.63.184.145 در پویش اول کاملاً غایب بوده اما در پویش دوم بالا آمده است. مثال 1. خروجی متنی Ndiff -Nmap 4.85BETA3 at 2009-03-15 11:00 +Nmap 4.85BETA4 at 2009-03-18 11:00 photos-cache-snc1.facebook.com (69.63.178.41): Host is up. Not shown: 99 filtered ports PORT STATE SERVICE VERSION -80/tcp open http +80/tcp open http lighttpd 1.5.0 -cm.out.snc1.tfbnw.net (69.63.179.25): +mailout-snc1.facebook.com (69.63.179.25): Host is up. Not shown: 100 filtered ports +69.63.184.145: +Host is up. +Not shown: 98 filtered ports +PORT STATE SERVICE VERSION +80/tcp open http Apache httpd 1.3.41.fb1 +443/tcp open ssl/http Apache httpd 1.3.41.fb1 خروجی XML که برای پردازش توسط سایر برنامه‌ها در نظر گرفته شده، با گزینه --xml انتخاب می‌شود. این قالب بر پایه خروجی XML ابزار Nmap است همراه با چند عنصر اضافی برای مشخص کردن تفاوت‌ها. سند XML درون عناصر nmapdiff و scandiff محصور شده است. تفاوت‌های میزبان درون تگ‌های hostdiff و تفاوت‌های درگاه درون تگ‌های portdiff قرار می‌گیرند. درون یک hostdiff یا portdiff، تگ‌های a و b وضعیت میزبان یا درگاه را در پویش اول (a) یا پویش دوم (b) نمایش می‌دهند. مثال 2 تفاوت XML همان پویش‌های نشان‌داده‌شده در مثال 1 را نمایش می‌دهد. توجه کنید که چگونه درگاه ۸۰ از photos-cache-snc1.facebook.com درون تگ‌های portdiff محصور شده است. برای 69.63.179.25، نام میزبان قدیمی در تگ‌های a و نام جدید در b قرار دارد. برای میزبان جدید 69.63.184.145، یک b در hostdiff بدون a متناظر وجود دارد که نشان می‌دهد اطلاعاتی برای این میزبان در پویش اول وجود نداشته است. مثال 2. خروجی XML ابزار Ndiff
پویش‌های دوره‌ای (PERIODIC DIFFS) با استفاده از Nmap، Ndiff، cron و یک اسکریپت شل، می‌توان یک شبکه را به‌طور روزانه پویش کرد و گزارش‌های ایمیلی از وضعیت شبکه و تغییرات آن نسبت به پویش پیشین دریافت نمود. مثال 3 اسکریپتی را نشان می‌دهد که این قابلیت را پیاده‌سازی می‌کند. مثال 3. پویش دوره‌ای شبکه با Ndiff و cron #!/bin/sh TARGETS="targets" OPTIONS="-v -T4 -F -sV" date=`date +%F` cd /root/scans nmap $OPTIONS $TARGETS -oA scan-$date > /dev/null if [ -e scan-prev.xml ]; then ndiff scan-prev.xml scan-$date.xml > diff-$date echo "*** NDIFF RESULTS ***" cat diff-$date echo fi echo "*** NMAP RESULTS ***" cat scan-$date.nmap ln -sf scan-$date.xml scan-prev.xml اگر اسکریپت با نام /root/scan-ndiff.sh ذخیره شده است، خط زیر را به crontab کاربر root اضافه کنید: 0 12 * * * /root/scan-ndiff.sh کدهای خروج (EXIT CODE) کد خروج نشان می‌دهد که آیا پویش‌ها یکسان هستند یا خیر. • ۰ نشان می‌دهد که پویش‌ها در تمام جنبه‌های شناخته‌شده برای Ndiff یکسان هستند. • ۱ نشان می‌دهد که پویش‌ها با یکدیگر تفاوت دارند. • ۲ نشان‌دهنده یک خطای زمان اجرا است، مانند عدم موفقیت در باز کردن یک فایل. اشکالات (BUGS) اشکالات را به فهرست پستی nmap-dev در نشانی گزارش دهید. تاریخچه (HISTORY) پروژه Ndiff توسط Michael Pattrick در جریان برنامه Google Summer of Code در سال ۲۰۰۸ آغاز شد. مایکل برنامه را طراحی کرد و بحث پیرامون قالب‌های خروجی آن را هدایت نمود. او نگارش‌هایی از برنامه را به زبان‌های Perl و C++ نوشت، اما تابستان مدت کوتاهی پس از تصمیم‌گیری برای بازنویسی برنامه به زبان Python جهت سازگاری با ویندوز (و Zenmap) به پایان رسید. این نگارش پایتون توسط David Fifield نوشته شد. جیمز لوین (James Levine) در سال ۲۰۰۰ یک اسکریپت پرل به نام Ndiff با عملکردی مشابه منتشر کرد[1]. نویسندگان (AUTHORS) David Fifield Michael Pattrick وب‌سایت (WEB SITE) https://nmap.org/ndiff نکات (NOTES) 1. منتشر کرد https://seclists.org/nmap-hackers/2000/315 Ndiff 03/27/2026 NDIFF(1)