'\" t .\" Title: ndiff .\" Author: [see the "Authors" section] .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 03/27/2026 .\" Manual: User Commands .\" Source: Ndiff .\" Language: Persian .\" .TH "NDIFF" "1" "03/27/2026" "Ndiff" "دستورات کاربر" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" ndiff \- مقایسه و نمایش تفاوت‌های میان نتایج پویش‌های Nmap .SH "خلاصه دستور (SYNOPSIS)" .HP \w'\fBndiff\fR\ 'u \fBndiff\fR [\fIگزینه‌ها\fR] {\fIa\&.xml\fR} {\fIb\&.xml\fR} .SH "توضیحات (DESCRIPTION)" .PP ابزار Ndiff برنامه‌ای برای کمک به مقایسه پویش‌های Nmap است\&. این ابزار دو فایل خروجی XML مربوط به Nmap را دریافت کرده و تفاوت‌های میان آن‌ها را نمایش می‌دهد\&. تفاوت‌های بررسی‌شده عبارتند از: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} وضعیت‌های میزبان (مانند تغییر از حالت بالا به پایین) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} وضعیت‌های درگاه (مانند تغییر از حالت باز به بسته) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} نگارش‌های سرویس (از گزینه \fB\-sV\fR) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} تطبیق‌های سیستم‌عامل (از گزینه \fB\-O\fR) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} خروجی اسکریپت .RE .PP ابزار Ndiff همانند ابزار استاندارد \fBdiff\fR، در هر زمان دو پویش را با یکدیگر مقایسه می‌کند\&. .SH "گزینه‌ها (OPTIONS)" .PP \fB\-h\fR, \fB\-\-help\fR .RS 4 نمایش پیام راهنما و خروج\&. .RE .PP \fB\-v\fR, \fB\-\-verbose\fR .RS 4 گنجاندن تمام میزبان‌ها و درگاه‌ها در خروجی، نه فقط آن‌هایی که تغییر کرده‌اند\&. .RE .PP \fB\-\-text\fR .RS 4 نوشتن خروجی در قالب متنی خوانا برای انسان\&. .RE .PP \fB\-\-xml\fR .RS 4 نوشتن خروجی در قالب ماشینی XML\&. ساختار سند در فایل ndiff\&.dtd موجود در بسته توزیع تعریف شده است\&. .RE .PP هر آرگومان دیگری به عنوان نام فایل‌های خروجی XML ابزار Nmap در نظر گرفته می‌شود\&. دقیقاً باید دو فایل مشخص شوند\&. .SH "مثال‌ها (EXAMPLES)" .PP برای مقایسه خروجی دو پویش Nmap که از گزینه‌های متفاوتی استفاده کرده‌اند از Ndiff استفاده می‌کنیم\&. در پویش نخست، یک پویش سریع (\fB\-F\fR) انجام می‌دهیم که برای افزایش سرعت، درگاه‌های کمتری را بررسی می‌کند\&. در پویش دوم، مجموعه بزرگ‌تر و پیش‌فرض درگاه‌ها را پویش کرده و یک اسکریپت NSE را اجرا می‌کنیم\&. .sp .if n \{\ .RS 4 .\} .nf # \fBnmap \-F scanme\&.nmap\&.org \-oX scanme\-1\&.xml\fR # \fBnmap \-\-script=html\-title scanme\&.nmap\&.org \-oX scanme\-2\&.xml\fR $ \fBndiff \-v scanme\-1\&.xml scanme\-2\&.xml\fR \-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 .fi .if n \{\ .RE .\} .PP تغییرات با علامت \- یا + در ابتدای خط مشخص می‌شوند\&. از خروجی می‌توان دریافت که پویش بدون گزینه پویش سریع \fB\-F\fR دو درگاه اضافی پیدا کرده است: ۷۰ و ۳۱۳۳۷\&. اسکریپت html\-title خروجی‌های بیشتری برای درگاه ۸۰ تولید کرده است\&. از روی تعداد درگاه‌ها می‌توان دریافت که پویش سریع ۱۰۰ درگاه (۹۵ فیلترشده، ۳ باز و ۲ بسته) را بررسی کرده، در حالی که پویش عادی ۱۰۰۰ درگاه (۹۹۳ فیلترشده، ۳ باز و ۴ بسته) را پویش کرده است\&. .PP گزینه \fB\-v\fR (یا \fB\-\-verbose\fR) در Ndiff باعث می‌شود حتی درگاه‌هایی که تغییری نکرده‌اند نیز نمایش داده شوند، مانند ۲۲ و ۲۵\&. بدون \fB\-v\fR، این درگاه‌ها در خروجی نمایش داده نمی‌شدند\&. .SH "خروجی (OUTPUT)" .PP دو حالت خروجی وجود دارد: متنی و XML\&. خروجی متنی حالت پیش‌فرض است و با گزینه \fB\-\-text\fR نیز قابل انتخاب است\&. خروجی متنی شبیه به یک diff یکپارچه از خروجی استاندارد ترمینال Nmap است\&. در ابتدای هر خط نویسه‌ای قرار می‌گیرد که نشان‌دهنده تغییر آن است\&. \- نشان می‌دهد که خط در پویش نخست وجود داشته اما در پویش دوم نیست؛ + نشان می‌دهد که در پویش دوم بوده اما در پویش اول نبوده است\&. خطی که تغییر کرده با یک خط \- و به دنبال آن یک خط + نشان داده می‌شود\&. خطوطی که تغییر نکرده‌اند با یک فاصله خالی در ابتدای خط نمایش می‌یابند\&. .PP مثال\ \&1 نمونه‌ای از خروجی متنی را نشان می‌دهد\&. در اینجا، درگاه ۸۰ روی میزبان photos\-cache\-snc1\&.facebook\&.com دارای نگارش سرویس شده است (lighttpd 1\&.5\&.0)\&. میزبان 69\&.63\&.179\&.25 نام DNS معکوس خود را تغییر داده است\&. میزبان 69\&.63\&.184\&.145 در پویش اول کاملاً غایب بوده اما در پویش دوم بالا آمده است\&. .PP \fBمثال\ \&1.\ \&خروجی متنی Ndiff\fR .sp .if n \{\ .RS 4 .\} .nf \-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 .fi .if n \{\ .RE .\} .PP خروجی XML که برای پردازش توسط سایر برنامه‌ها در نظر گرفته شده، با گزینه \fB\-\-xml\fR انتخاب می‌شود\&. این قالب بر پایه خروجی XML ابزار Nmap است همراه با چند عنصر اضافی برای مشخص کردن تفاوت‌ها\&. سند XML درون عناصر \fInmapdiff\fR و \fIscandiff\fR محصور شده است\&. تفاوت‌های میزبان درون تگ‌های \fIhostdiff\fR و تفاوت‌های درگاه درون تگ‌های \fIportdiff\fR قرار می‌گیرند\&. درون یک \fIhostdiff\fR یا \fIportdiff\fR، تگ‌های \fIa\fR و \fIb\fR وضعیت میزبان یا درگاه را در پویش اول (\fIa\fR) یا پویش دوم (\fIb\fR) نمایش می‌دهند\&. .PP مثال\ \&2 تفاوت XML همان پویش‌های نشان‌داده‌شده در مثال\ \&1 را نمایش می‌دهد\&. توجه کنید که چگونه درگاه ۸۰ از photos\-cache\-snc1\&.facebook\&.com درون تگ‌های \fIportdiff\fR محصور شده است\&. برای 69\&.63\&.179\&.25، نام میزبان قدیمی در تگ‌های \fIa\fR و نام جدید در \fIb\fR قرار دارد\&. برای میزبان جدید 69\&.63\&.184\&.145، یک \fIb\fR در \fIhostdiff\fR بدون \fIa\fR متناظر وجود دارد که نشان می‌دهد اطلاعاتی برای این میزبان در پویش اول وجود نداشته است\&. .PP \fBمثال\ \&2.\ \&خروجی XML ابزار Ndiff\fR .sp .if n \{\ .RS 4 .\} .nf
.fi .if n \{\ .RE .\} .SH "پویش‌های دوره‌ای (PERIODIC DIFFS)" .PP با استفاده از Nmap، Ndiff، cron و یک اسکریپت شل، می‌توان یک شبکه را به‌طور روزانه پویش کرد و گزارش‌های ایمیلی از وضعیت شبکه و تغییرات آن نسبت به پویش پیشین دریافت نمود\&. مثال\ \&3 اسکریپتی را نشان می‌دهد که این قابلیت را پیاده‌سازی می‌کند\&. .PP \fBمثال\ \&3.\ \&پویش دوره‌ای شبکه با Ndiff و cron\fR .sp .if n \{\ .RS 4 .\} .nf #!/bin/sh TARGETS="\fItargets\fR" 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 .fi .if n \{\ .RE .\} .PP اگر اسکریپت با نام /root/scan\-ndiff\&.sh ذخیره شده است، خط زیر را به crontab کاربر root اضافه کنید: .sp .if n \{\ .RS 4 .\} .nf 0 12 * * * /root/scan\-ndiff\&.sh .fi .if n \{\ .RE .\} .sp .SH "کدهای خروج (EXIT CODE)" .PP کد خروج نشان می‌دهد که آیا پویش‌ها یکسان هستند یا خیر\&. .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} ۰ نشان می‌دهد که پویش‌ها در تمام جنبه‌های شناخته‌شده برای Ndiff یکسان هستند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} ۱ نشان می‌دهد که پویش‌ها با یکدیگر تفاوت دارند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} ۲ نشان‌دهنده یک خطای زمان اجرا است، مانند عدم موفقیت در باز کردن یک فایل\&. .RE .sp .SH "اشکالات (BUGS)" .PP اشکالات را به فهرست پستی nmap\-dev در نشانی گزارش دهید\&. .SH "تاریخچه (HISTORY)" .PP پروژه Ndiff توسط Michael Pattrick در جریان برنامه Google Summer of Code در سال ۲۰۰۸ آغاز شد\&. مایکل برنامه را طراحی کرد و بحث پیرامون قالب‌های خروجی آن را هدایت نمود\&. او نگارش‌هایی از برنامه را به زبان‌های Perl و C++ نوشت، اما تابستان مدت کوتاهی پس از تصمیم‌گیری برای بازنویسی برنامه به زبان Python جهت سازگاری با ویندوز (و Zenmap) به پایان رسید\&. این نگارش پایتون توسط David Fifield نوشته شد\&. جیمز لوین (James Levine) در سال ۲۰۰۰ یک اسکریپت پرل به نام Ndiff با عملکردی مشابه \m[blue]\fBمنتشر کرد\fR\m[]\&\s-2\u[1]\d\s+2\&. .SH "نویسندگان (AUTHORS)" .PP David Fifield .PP Michael Pattrick .SH "وب‌سایت (WEB SITE)" .PP \m[blue]\fB\%https://nmap.org/ndiff\fR\m[] .SH "نکات (NOTES)" .IP " 1." 4 منتشر کرد .RS 4 \%https://seclists.org/nmap-hackers/2000/315 .RE