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)