NMAP(1) Nmap Reference Guide NMAP(1)

nmap - ابزار کاوش شبکه و پویشگر امنیتی / درگاه (پورت)

nmap [نوع پویش...] [گزینه‌ها] {مشخص‌کردن هدف}

نرم‌افزار Nmap (مخفف “Network Mapper”) یک ابزار متن‌باز برای کاوش شبکه و ممیزی امنیتی است. این ابزار برای پویش سریع شبکه‌های بزرگ طراحی شده است، هرچند بر روی تک‌میزبان‌ها نیز به خوبی کار می‌کند. Nmap از بسته‌های خام IP به روش‌های نوآورانه استفاده می‌کند تا تعیین کند چه میزبان‌هایی در شبکه در دسترس هستند، چه سرویس‌هایی (نام و نسخه برنامه) توسط آن میزبان‌ها ارائه می‌شوند، چه سیستم‌عامل‌هایی (همراه با نسخه سیستم‌عامل) در حال اجرا هستند، چه نوع فیلترهای بسته/فایروال‌هایی مورد استفاده قرار گرفته‌اند و ده‌ها ویژگی دیگر. اگرچه Nmap معمولاً برای ممیزی‌های امنیتی استفاده می‌شود، اما بسیاری از مدیران سیستم و شبکه آن را برای کارهای روزمره مانند موجودی‌برداری شبکه، مدیریت برنامه‌های ارتقای سرویس و نظارت بر آپ‌تایم میزبان یا سرویس مفید می‌دانند.

خروجی Nmap فهرستی از اهداف پویش‌شده است، همراه با اطلاعات تکمیلی در مورد هر یک که بسته به گزینه‌های استفاده‌شده ارائه می‌شود. مهم‌ترین بخش این اطلاعات، “جدول درگاه‌های جالب‌توجه” است. این جدول شماره درگاه و پروتکل، نام سرویس و وضعیت آن را فهرست می‌کند. وضعیت هر درگاه یکی از موارد زیر است: باز (open)، فیلترشده (filtered)، بسته (closed)، یا فیلترنشده (unfiltered). وضعیت Open (باز) بدین معناست که برنامه‌ای روی ماشین هدف در حال گوش دادن به اتصالات/بسته‌ها روی آن درگاه است. وضعیت Filtered (فیلترشده) بدین معناست که یک فایروال، فیلتر یا مانع شبکه‌ای دیگر درگاه را مسدود کرده است، به‌طوری که Nmap نمی‌تواند تشخیص دهد درگاه open یا closed است. درگاه‌های Closed (بسته) هیچ برنامه‌ای روی آن‌ها در حال گوش دادن نیست، اگرچه ممکن است هر لحظه باز شوند. درگاه‌ها به عنوان unfiltered (فیلترنشده) دسته‌بندی می‌شوند زمانی که به کاوش‌های Nmap پاسخ می‌دهند، اما Nmap نمی‌تواند تعیین کند که آیا آن‌ها باز هستند یا بسته. Nmap ترکیب‌های وضعیتی open|filtered و closed|filtered را زمانی گزارش می‌کند که نتواند تشخیص دهد کدام یک از این دو وضعیت درگاه را توصیف می‌کند. جدول درگاه‌ها همچنین ممکن است شامل جزئیات نسخه نرم‌افزار باشد، در صورتی که تشخیص نسخه درخواست شده باشد. هنگامی که پویش پروتکل IP درخواست می‌شود (-sO)، Nmap به جای درگاه‌های شنونده، اطلاعاتی در مورد پروتکل‌های IP پشتیبانی‌شده ارائه می‌دهد.

علاوه بر جدول درگاه‌های جالب‌توجه، Nmap می‌تواند اطلاعات بیشتری در مورد اهداف ارائه دهد، از جمله نام‌های معکوس DNS، حدس‌های سیستم‌عامل، انواع دستگاه و آدرس‌های MAC.

یک پویش معمول Nmap در مثال 1 نشان داده شده است. تنها آرگومان‌های Nmap که در این مثال استفاده شده‌اند عبارتند از: -A برای فعال‌سازی تشخیص سیستم‌عامل و نسخه، پویش اسکریپت و traceroute؛ -T4 برای اجرای سریع‌تر؛ و سپس نام میزبان.

مثال 1. نمونه‌ای از یک پویش نماینده با Nmap

# nmap -A -T4 scanme.nmap.org
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.029s latency).
rDNS record for 74.207.244.221: li86-221.members.linode.com
Not shown: 995 closed ports
PORT     STATE    SERVICE     VERSION
22/tcp   open     ssh         OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
| ssh-hostkey: 1024 8d:60:f1:7c:ca:b7:3d:0a:d6:67:54:9d:69:d9:b9:dd (DSA)
|_2048 79:f8:09:ac:d4:e2:32:42:10:49:d3:bd:20:82:85:ec (RSA)
80/tcp   open     http        Apache httpd 2.2.14 ((Ubuntu))
|_http-title: Go ahead and ScanMe!
646/tcp  filtered ldp
1720/tcp filtered H.323/Q.931
9929/tcp open     nping-echo  Nping echo
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.39
OS details: Linux 2.6.39
Network Distance: 11 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:kernel
TRACEROUTE (using port 53/tcp)
HOP RTT      ADDRESS
[Cut first 10 hops for brevity]
11  17.65 ms li86-221.members.linode.com (74.207.244.221)
Nmap done: 1 IP address (1 host up) scanned in 14.40 seconds

جدیدترین نسخه Nmap را می‌توان از https://nmap.org دریافت کرد. جدیدترین نسخه این صفحه راهنما در نشانی https://nmap.org/book/man.html در دسترس است. همچنین به عنوان فصلی از کتاب Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning گنجانده شده است (ببینید https://nmap.org/book).

این خلاصه گزینه‌ها زمانی که Nmap بدون هیچ آرگومانی اجرا می‌شود چاپ می‌شود، و آخرین نسخه آن همیشه در https://svn.nmap.org/nmap/docs/nmap.usage.txt در دسترس است. این خلاصه به یادآوری پرکاربردترین گزینه‌ها کمک می‌کند، اما جایگزینی برای مستندات جامع در ادامه این راهنما نیست. برخی از گزینه‌های مبهم و پیچیده حتی در اینجا گنجانده نشده‌اند.

Nmap 7.99SVN ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
  Can pass hostnames, IP addresses, networks, etc.
  Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
  -iL <inputfilename>: Input from list of hosts/networks
  -iR <num hosts>: Choose random targets
  --exclude <host1[,host2][,host3],...>: Exclude hosts/networks
  --excludefile <exclude_file>: Exclude list from file
HOST DISCOVERY:
  -sL: List Scan - simply list targets to scan
  -sn: Ping Scan - disable port scan
  -Pn: Treat all hosts as online -- skip host discovery
  -PS/PA/PU/PY[portlist]: TCP SYN, TCP ACK, UDP or SCTP discovery to given ports
  -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
  -PO[protocol list]: IP Protocol Ping
  -n/-R: Never do DNS resolution/Always resolve [default: sometimes]
  --dns-servers <serv1[,serv2],...>: Specify custom DNS servers
  --system-dns: Use OS's DNS resolver
  --traceroute: Trace hop path to each host
SCAN TECHNIQUES:
  -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
  -sU: UDP Scan
  -sN/sF/sX: TCP Null, FIN, and Xmas scans
  --scanflags <flags>: Customize TCP scan flags
  -sI <zombie host[:probeport]>: Idle scan
  -sY/sZ: SCTP INIT/COOKIE-ECHO scans
  -sO: IP protocol scan
  -b <FTP relay host>: FTP bounce scan
PORT SPECIFICATION AND SCAN ORDER:
  -p <port ranges>: Only scan specified ports
    Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
  --exclude-ports <port ranges>: Exclude the specified ports from scanning
  -F: Fast mode - Scan fewer ports than the default scan
  -r: Scan ports sequentially - don't randomize
  --top-ports <number>: Scan <number> most common ports
  --port-ratio <ratio>: Scan ports more common than <ratio>
SERVICE/VERSION DETECTION:
  -sV: Probe open ports to determine service/version info
  --version-intensity <level>: Set from 0 (light) to 9 (try all probes)
  --version-light: Limit to most likely probes (intensity 2)
  --version-all: Try every single probe (intensity 9)
  --version-trace: Show detailed version scan activity (for debugging)
SCRIPT SCAN:
  -sC: equivalent to --script=default
  --script=<Lua scripts>: <Lua scripts> is a comma separated list of
           directories, script-files or script-categories
  --script-args=<n1=v1,[n2=v2,...]>: provide arguments to scripts
  --script-args-file=filename: provide NSE script args in a file
  --script-trace: Show all data sent and received
  --script-updatedb: Update the script database.
  --script-help=<Lua scripts>: Show help about scripts.
           <Lua scripts> is a comma-separated list of script-files or
           script-categories.
OS DETECTION:
  -O: Enable OS detection
  --osscan-limit: Limit OS detection to promising targets
  --osscan-guess: Guess OS more aggressively
TIMING AND PERFORMANCE:
  Options which take <time> are in seconds, or append 'ms' (milliseconds),
  's' (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
  -T<0-5>: Set timing template (higher is faster)
  --min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
  --min-parallelism/max-parallelism <numprobes>: Probe parallelization
  --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
      probe round trip time.
  --max-retries <tries>: Caps number of port scan probe retransmissions.
  --host-timeout <time>: Give up on target after this long
  --scan-delay/--max-scan-delay <time>: Adjust delay between probes
  --min-rate <number>: Send packets no slower than <number> per second
  --max-rate <number>: Send packets no faster than <number> per second
FIREWALL/IDS EVASION AND SPOOFING:
  -f; --mtu <val>: fragment packets (optionally w/given MTU)
  -D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
  -S <IP_Address>: Spoof source address
  -e <iface>: Use specified interface
  -g/--source-port <portnum>: Use given port number
  --proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
  --data <hex string>: Append a custom payload to sent packets
  --data-string <string>: Append a custom ASCII string to sent packets
  --data-length <num>: Append random data to sent packets
  --ip-options <options>: Send packets with specified ip options
  --ttl <val>: Set IP time-to-live field
  --spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
  --badsum: Send packets with a bogus TCP/UDP/SCTP checksum
OUTPUT:
  -oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
     and Grepable format, respectively, to the given filename.
  -oA <basename>: Output in the three major formats at once
  -v: Increase verbosity level (use -vv or more for greater effect)
  -d: Increase debugging level (use -dd or more for greater effect)
  --reason: Display the reason a port is in a particular state
  --open: Only show open (or possibly open) ports
  --packet-trace: Show all packets sent and received
  --iflist: Print host interfaces and routes (for debugging)
  --append-output: Append to rather than clobber specified output files
  --resume <filename>: Resume an aborted scan
  --noninteractive: Disable runtime interactions via keyboard
  --stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
  --webxml: Reference stylesheet from Nmap.Org for more portable XML
  --no-stylesheet: Prevent associating of XSL stylesheet w/XML output
MISC:
  -6: Enable IPv6 scanning
  -A: Enable OS detection, version detection, script scanning, and traceroute
  --datadir <dirname>: Specify custom Nmap data file location
  --send-eth/--send-ip: Send using raw ethernet frames or IP packets
  --privileged: Assume that the user is fully privileged
  --unprivileged: Assume the user lacks raw socket privileges
  -V: Print version number
  -h: Print this help summary page.
EXAMPLES:
  nmap -v -A scanme.nmap.org
  nmap -v -sn 192.168.0.0/16 10.0.0.0/8
  nmap -v -iR 10000 -Pn -p 80
SEE THE MAN PAGE (https://nmap.org/book/man.html) FOR MORE OPTIONS AND EXAMPLES

هر چیزی در خط فرمان Nmap که یک گزینه (یا آرگومان گزینه) نباشد، به عنوان مشخصات میزبان هدف در نظر گرفته می‌شود. ساده‌ترین حالت، مشخص کردن آدرس IP یا نام میزبان هدف برای پویش است.

هنگامی که یک نام میزبان به عنوان هدف داده می‌شود، از طریق سامانه نام دامنه (DNS) تحلیل و ترجمه می‌شود تا آدرس IP برای پویش تعیین گردد. اگر نام به بیش از یک آدرس IP ترجمه شود، تنها اولین آدرس پویش خواهد شد. برای اینکه Nmap تمام آدرس‌های ترجمه‌شده را به جای فقط اولی پویش کند، از گزینه --resolve-all استفاده کنید.

گاهی اوقات می‌خواهید کل یک شبکه از میزبان‌های مجاور را پویش کنید. برای این منظور، Nmap از آدرس‌دهی به سبک CIDR پشتیبانی می‌کند. می‌توانید عبارت /تعداد بیت‌ها را به یک آدرس IP یا نام میزبان اضافه کنید و Nmap هر آدرس IP را که اولین تعداد بیت‌ها ی آن با آدرس IP یا نام میزبان مرجع داده‌شده یکسان باشد، پویش خواهد کرد. برای مثال، 192.168.10.0/24 تمام ۲۵۶ میزبان بین 192.168.10.0 (دودویی: 11000000 10101000 00001010 00000000) و 192.168.10.255 (دودویی: 11000000 10101000 00001010 11111111) را به طور کامل پویش می‌کند. 192.168.10.40/24 دقیقاً همان اهداف را پویش خواهد کرد. با توجه به اینکه میزبان scanme.nmap.org در آدرس IP برابر با 64.13.134.52 قرار دارد، مشخصه scanme.nmap.org/16 تعداد ۶۵٬۵۳۶ آدرس IP بین 64.13.0.0 و 64.13.255.255 را پویش می‌کند. کوچک‌ترین مقدار مجاز /0 است که کل اینترنت را هدف قرار می‌دهد. بزرگ‌ترین مقدار برای IPv4 برابر با /32 است که فقط همان میزبان یا آدرس IP مشخص‌شده را پویش می‌کند زیرا تمام بیت‌های آدرس ثابت هستند. بزرگ‌ترین مقدار برای IPv6 برابر با /128 است که همان کار را انجام می‌دهد.

نمادگذاری CIDR کوتاه است اما همیشه به اندازه کافی انعطاف‌پذیر نیست. برای مثال، ممکن است بخواهید 192.168.0.0/16 را پویش کنید اما از هر آدرس IP که به .0 یا .255 ختم می‌شود صرف‌نظر نمایید، زیرا ممکن است به عنوان آدرس شبکه زیرشبکه و آدرس پخش همگانی (broadcast) استفاده شوند. Nmap از طریق آدرس‌دهی بازه هشت‌بیتی (octet range) از این کار پشتیبانی می‌کند. به جای مشخص کردن یک آدرس IP معمولی، می‌توانید فهرستی از اعداد یا بازه‌ها را با کاما برای هر هشت‌بیت (بایت) مشخص کنید. برای مثال، 192.168.0-255.1-254 از تمام آدرس‌های موجود در بازه که به .0 یا .255 ختم می‌شوند صرف‌نظر می‌کند، و 192.168.3-5,7.1 چهار آدرس 192.168.3.1، 192.168.4.1، 192.168.5.1 و 192.168.7.1 را پویش می‌کند. هر طرف از یک بازه می‌تواند حذف شود؛ مقادیر پیش‌فرض 0 در سمت چپ و 255 در سمت راست است. استفاده از - به تنهایی معادل 0-255 است، اما به یاد داشته باشید که در هشت‌بیت اول از 0- استفاده کنید تا مشخصات هدف شبیه به یک گزینه خط فرمان به نظر نرسد. بازه‌ها نیازی نیست محدود به هشت‌بیت‌های انتهایی باشند: مشخصه 0-255.0-255.13.37 یک پویش در سطح کل اینترنت برای تمام آدرس‌های IP که به 13.37 ختم می‌شوند انجام می‌دهد. این نوع نمونه‌برداری گسترده می‌تواند برای پیمایش‌ها و پژوهش‌های اینترنتی مفید باشد.

آدرس‌های IPv6 را می‌توان با آدرس یا نام میزبان کامل IPv6 آن‌ها یا با نمادگذاری CIDR برای زیرشبکه‌ها مشخص کرد. بازه‌های هشت‌بیتی هنوز برای IPv6 پشتیبانی نمی‌شوند.

آدرس‌های IPv6 با دامنه غیرسراسری (non-global scope) باید یک پسوند شناسه ناحیه (zone ID) داشته باشند. در سیستم‌های یونیکس، این شناسه یک علامت درصد به همراه نام رابط شبکه است؛ یک آدرس کامل ممکن است به صورت fe80::a8bb:ccff:fedd:eeff%eth0 باشد. در ویندوز، از شماره اندیس رابط به جای نام رابط استفاده کنید: fe80::a8bb:ccff:fedd:eeff%1. می‌توانید فهرستی از اندیس‌های رابط را با اجرای دستور netsh.exe interface ipv6 show interface مشاهده کنید.

نرم‌افزار Nmap چندین مشخصه میزبان را در خط فرمان می‌پذیرد و نیازی نیست که همه آن‌ها از یک نوع باشند. دستور nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.- دقیقاً همان کاری را انجام می‌دهد که انتظار دارید.

اگرچه اهداف معمولاً در خط فرمان مشخص می‌شوند، اما گزینه‌های زیر نیز برای کنترل انتخاب هدف در دسترس هستند:

-iL inputfilename (خواندن ورودی از فهرست)

مشخصات هدف را از inputfilename می‌خواند. ارسال یک فهرست طولانی از میزبان‌ها اغلب در خط فرمان دشوار است، با این حال یک نیاز رایج محسوب می‌شود. برای مثال، کارگزار DHCP شما ممکن است فهرستی از ۱۰٬۰۰۰ اجاره فعلی را صادر کند که مایل به پویش آن‌ها هستید. یا شاید بخواهید تمام آدرس‌های IP را به جز آن موارد پویش کنید تا میزبان‌هایی را که از آدرس‌های IP ثابت غیرمجاز استفاده می‌کنند بیابید. به سادگی فهرست میزبان‌ها را برای پویش تولید کنید و آن نام فایل را به عنوان یک آرگومان به گزینه -iL در Nmap بدهید. ورودی‌ها می‌توانند در هر یک از فرمت‌های پذیرفته‌شده توسط Nmap در خط فرمان (آدرس IP، نام میزبان، CIDR، IPv6 یا بازه‌های هشت‌بیتی) باشند. هر ورودی باید با یک یا چند فاصله، تب یا خط جدید جدا شود. اگر می‌خواهید Nmap میزبان‌ها را از ورودی استاندارد (stdin) به جای یک فایل واقعی بخواند، می‌توانید یک خط تیره (-) را به عنوان نام فایل مشخص کنید.

فایل ورودی می‌تواند حاوی توضیحاتی (کامنت) باشد که با # شروع می‌شوند و تا انتهای خط ادامه دارند.

-iR num hosts (انتخاب تصادفی اهداف)

برای پیمایش‌های سرتاسر اینترنت و سایر پژوهش‌ها، ممکن است بخواهید اهداف را به صورت تصادفی انتخاب کنید. آرگومان num hosts به Nmap می‌گوید که چه تعداد آدرس IP تولید کند. آدرس‌های IP نامطلوب مانند مواردی که در بازه‌های آدرس خصوصی، چندپخشی (multicast) یا تخصیص‌نیافته خاص قرار دارند، به طور خودکار نادیده گرفته می‌شوند. می‌توان آرگومان 0 را برای یک پویش بی‌پایان مشخص کرد. به خاطر داشته باشید که برخی از مدیران شبکه از پویش‌های غیرمجاز روی شبکه‌هایشان برآشفته می‌شوند و ممکن است شکایت کنند. از این گزینه با مسئولیت خود استفاده کنید! اگر در یک بعدازظهر بارانی واقعاً حوصله‌تان سر رفته است، دستور nmap -Pn -sS -p 80 -iR 0 --open را برای یافتن وب‌سرورهای تصادفی جهت وب‌گردی امتحان کنید.

--exclude host1[,host2[,...]] (مستثنی کردن میزبان‌ها/شبکه‌ها)

فهرستی از اهداف جداشده با کاما را مشخص می‌کند که باید از پویش مستثنی شوند، حتی اگر بخشی از کل محدوده شبکه مشخص‌شده باشند. فهرستی که ارسال می‌کنید از ساختار استاندارد Nmap استفاده می‌کند، بنابراین می‌تواند شامل نام میزبان‌ها، بلوک‌های شبکه CIDR، بازه‌های هشت‌بیتی و غیره باشد. این گزینه زمانی مفید است که شبکه مورد نظر برای پویش شامل سرورهای حساس و حیاتی غیرقابل لمس، سیستم‌هایی که به پویش درگاه واکنش نامطلوب نشان می‌دهند، یا زیرشبکه‌های تحت مدیریت افراد دیگر باشد.

--excludefile exclude_file (مستثنی کردن فهرست از فایل)

این گزینه همان عملکرد گزینه --exclude را ارائه می‌دهد، با این تفاوت که اهداف مستثنی‌شده در یک فایل exclude_file که با خط جدید، فاصله یا تب جدا شده‌اند، ارائه می‌شوند نه در خط فرمان.

فایل استثناها می‌تواند حاوی توضیحاتی باشد که با # شروع شده و تا انتهای خط ادامه دارند.

-n (عدم تحلیل نام معکوس DNS)

به Nmap می‌گوید که هرگز تحلیل نام معکوس DNS را روی آدرس‌های IP فعال یافته‌شده انجام ندهد. از آنجا که DNS می‌تواند حتی با تحلیل‌گر موازی داخلی Nmap کند باشد، این گزینه می‌تواند زمان پویش را به شدت کاهش دهد.

-R (تحلیل معکوس DNS برای تمام اهداف)

به Nmap می‌گوید که همیشه تحلیل معکوس DNS را روی آدرس‌های IP هدف انجام دهد. به طور معمول تحلیل معکوس DNS فقط برای میزبان‌های پاسخ‌گو (آنلاین) انجام می‌شود.

--resolve-all (پویش تمام آدرس‌های ترجمه‌شده)

اگر یک نام میزبان هدف به بیش از یک آدرس ترجمه شود، تمام آن‌ها را پویش می‌کند. رفتار پیش‌فرض این است که فقط اولین آدرس ترجمه‌شده پویش شود. در هر صورت، فقط آدرس‌های مربوط به خانواده آدرس مناسب پویش خواهند شد: به طور پیش‌فرض IPv4، و با -6 آدرس‌های IPv6.

--unique (پویش هر آدرس فقط یک‌بار)

هر آدرس IP را فقط یک‌بار پویش می‌کند. رفتار پیش‌فرض این است که هر آدرس به همان تعداد دفعاتی که در فهرست هدف مشخص شده پویش شود، مانند زمانی که محدوده‌های شبکه هم‌پوشانی دارند یا نام‌های میزبان مختلف به یک آدرس مشترک ترجمه می‌شوند.

--system-dns (استفاده از تحلیل‌گر DNS سیستم)

به طور پیش‌فرض، Nmap نام‌ها را به آدرس‌های IP (و آدرس‌های IP را به نام‌ها) با ارسال مستقیم پرس‌وجوها به کارگزارهای نام پیکربندی‌شده روی میزبان شما و سپس گوش دادن به پاسخ‌ها تحلیل می‌کند. بسیاری از درخواست‌ها (اغلب ده‌ها درخواست) به صورت موازی انجام می‌شوند تا کارایی بهبود یابد. این گزینه را برای استفاده از تحلیل‌گر سیستم خود مشخص کنید (یک IP در هر زمان از طریق فراخوانی getnameinfo). این روش کندتر است و به ندرت مفید واقع می‌شود مگر اینکه اشکالی در تحلیل‌گر موازی Nmap پیدا کنید (لطفاً در صورت یافتن به ما اطلاع دهید).

--dns-servers server1[,server2[,...]] (کارگزارهای مورد استفاده برای پرس‌وجوهای DNS)

به طور پیش‌فرض، Nmap کارگزارهای DNS شما را از فایل resolv.conf (یونیکس) یا رجیستری (ویندوز) تعیین می‌کند. متناوباً، می‌توانید از این گزینه برای مشخص کردن کارگزارهای جایگزین استفاده کنید. اگر از --system-dns استفاده می‌کنید، این گزینه نادیده گرفته می‌شود. استفاده از چندین کارگزار DNS اغلب سریع‌تر است، به ویژه اگر کارگزارهای معتبر (authoritative) را برای فضای IP هدف خود انتخاب کنید. این گزینه همچنین می‌تواند پنهان‌کاری را بهبود بخشد، زیرا درخواست‌های شما می‌توانند از تقریباً هر کارگزار DNS بازگشتی در اینترنت منعکس شوند.

این گزینه همچنین هنگام پویش شبکه‌های خصوصی بسیار مفید است. گاهی اوقات تنها چند کارگزار نام اطلاعات DNS مناسب را ارائه می‌دهند و ممکن است حتی ندانید کجا قرار دارند. می‌توانید شبکه را برای درگاه ۵۳ پویش کنید (شاید با تشخیص نسخه)، سپس پویش‌های فهرستی Nmap (-sL) را با مشخص کردن هر کارگزار نام به صورت تک‌تک با --dns-servers امتحان کنید تا زمانی که یکی را پیدا کنید که کار کند.

اگر پاسخ DNS از اندازه یک بسته UDP فراتر رود، این گزینه ممکن است رعایت نشود. در چنین شرایطی تحلیل‌گر DNS ما تمام تلاش خود را می‌کند تا پاسخی را از بسته کوتاه شده استخراج کند و در صورت عدم موفقیت، به استفاده از تحلیل‌گر سیستم باز می‌گردد.

یکی از نخستین گام‌ها در هر مأموریت شناسایی شبکه، کاهش دادن یک مجموعه (گاهی بسیار بزرگ) از محدوده‌های IP به فهرستی از میزبان‌های فعال یا جالب‌توجه است. پویش تک‌تک درگاه‌های هر آدرس IP فرایندی کند و معمولاً غیرضروری است. البته اینکه چه چیزی یک میزبان را جالب‌توجه می‌کند به شدت به اهداف پویش بستگی دارد. ممکن است مدیران شبکه فقط به میزبان‌هایی که یک سرویس خاص را اجرا می‌کنند علاقه‌مند باشند، در حالی که ممیزان امنیتی ممکن است به تک‌تک دستگاه‌های دارای آدرس IP اهمیت دهند. یک مدیر ممکن است تنها با استفاده از یک پینگ ساده ICMP برای مکان‌یابی میزبان‌ها در شبکه داخلی خود راحت باشد، در حالی که یک آزمایش‌کننده نفوذ خارجی ممکن است از مجموعه‌ای متنوع شامل ده‌ها کاوشگر برای دور زدن محدودیت‌های فایروال استفاده کند.

از آنجا که نیازهای کشف میزبان بسیار متنوع هستند، Nmap گزینه‌های گسترده‌ای را برای سفارشی‌سازی تکنیک‌های مورد استفاده ارائه می‌دهد. کشف میزبان گاهی اوقات پویش پینگ نامیده می‌شود، اما بسیار فراتر از بسته‌های ساده درخواست انعکاس (echo request) در پروتکل ICMP است که با ابزار همه‌جا‌حاضر ping شناخته می‌شوند. کاربران می‌توانند مرحله کشف را به طور کامل با یک پویش فهرستی (-sL) یا با غیرفعال کردن کشف میزبان (-Pn) نادیده بگیرند، یا شبکه را با ترکیب‌های دلخواهی از کاوشگرهای چنددرگاهی TCP SYN/ACK، UDP، SCTP INIT و ICMP به کار گیرند. هدف این کاوشگرها برانگیختن پاسخ‌هایی است که نشان دهد یک آدرس IP واقعاً فعال است (توسط یک میزبان یا دستگاه شبکه استفاده می‌شود). در بسیاری از شبکه‌ها، در هر زمان تنها درصد کمی از آدرس‌های IP فعال هستند. این امر به ویژه در فضای آدرس‌های خصوصی مانند 10.0.0.0/8 رایج است. آن شبکه دارای ۱۶ میلیون IP است، اما من دیده‌ام که توسط شرکت‌هایی با کمتر از هزار ماشین استفاده می‌شود. کشف میزبان می‌تواند آن ماشین‌ها را در دریایی از آدرس‌های IP با تخصیص پراکنده پیدا کند.

اگر هیچ گزینه‌ای برای کشف میزبان داده نشود، Nmap یک درخواست انعکاس ICMP، یک بسته TCP SYN به درگاه ۴۴۳، یک بسته TCP ACK به درگاه ۸۰ و یک درخواست برچسب زمان ICMP ارسال می‌کند. (برای IPv6، درخواست برچسب زمان ICMP حذف می‌شود زیرا بخشی از ICMPv6 نیست.) این پیش‌فرض‌ها معادل گزینه‌های -PE -PS443 -PA80 -PP هستند. استثنا در این مورد، پویش‌های ARP (برای IPv4) و Neighbor Discovery (برای IPv6) هستند که برای هر هدفی در یک شبکه محلی اترنت استفاده می‌شوند. برای کاربران بدون امتیاز پوسته یونیکس، کاوشگرهای پیش‌فرض یک بسته SYN به درگاه‌های ۸۰ و ۴۴۳ با استفاده از فراخوانی سیستمی connect است. این شیوه کشف میزبان اغلب هنگام پویش شبکه‌های محلی کافی است، اما مجموعه جامع‌تری از کاوشگرهای کشف برای ممیزی امنیتی توصیه می‌شود.

گزینه‌های -P* (که انواع پینگ را انتخاب می‌کنند) می‌توانند با یکدیگر ترکیب شوند. شما می‌توانید شانس خود را برای نفوذ به فایروال‌های سخت‌گیر با ارسال انواع مختلف کاوشگرها با استفاده از درگاه‌ها/فلگ‌های مختلف TCP و کدهای ICMP افزایش دهید. همچنین توجه داشته باشید که کشف ARP/Neighbor Discovery به طور پیش‌فرض برای اهداف موجود در شبکه محلی اترنت انجام می‌شود، حتی اگر سایر گزینه‌های -P* را مشخص کنید، زیرا تقریباً همیشه سریع‌تر و موثرتر است.

به طور پیش‌فرض، Nmap ابتدا کشف میزبان را انجام می‌دهد و سپس یک پویش درگاه را روی هر میزبانی که مشخص شود آنلاین است اجرا می‌کند. این امر حتی در صورتی که انواع کشف میزبان غیرپیش‌فرض مانند کاوشگرهای UDP (-PU) را مشخص کنید نیز صادق است. توضیحات مربوط به گزینه -sn را بخوانید تا یاد بگیرید چگونه فقط کشف میزبان را انجام دهید، یا از -Pn برای صرف‌نظر از کشف میزبان و پویش درگاه تمام آدرس‌های هدف استفاده کنید. گزینه‌های زیر کشف میزبان را کنترل می‌کنند:

-sL (پویش فهرستی)

پویش فهرستی شکلی ساده از کشف میزبان است که صرفاً تک‌تک میزبان‌های شبکه(های) مشخص‌شده را بدون ارسال هیچ بسته‌ای به میزبان‌های هدف فهرست می‌کند. به طور پیش‌فرض، Nmap همچنان تحلیل معکوس DNS را روی میزبان‌ها انجام می‌دهد تا نام آن‌ها را به دست آورد. اغلب شگفت‌انگیز است که نام‌های ساده میزبان‌ها چقدر اطلاعات مفید ارائه می‌دهند. برای مثال، fw.chi نام فایروال شیکاگوی یک شرکت است.

نرم‌افزار Nmap همچنین تعداد کل آدرس‌های IP را در پایان گزارش می‌دهد. پویش فهرستی یک بررسی سلامت مناسب است تا اطمینان حاصل شود که آدرس‌های IP درستی برای اهداف خود دارید. اگر میزبان‌ها نام‌های دامنه‌ای دارند که آن‌ها را نمی‌شناسید، ارزش دارد که برای جلوگیری از پویش اشتباه شبکه یک شرکت دیگر بیشتر تحقیق کنید.

از آنجا که ایده اصلی صرفاً چاپ فهرستی از میزبان‌های هدف است، گزینه‌های عملکردهای سطح بالاتر مانند پویش درگاه، تشخیص سیستم‌عامل یا کشف میزبان را نمی‌توان با این گزینه ترکیب کرد. اگر می‌خواهید کشف میزبان را غیرفعال کنید در حالی که همچنان چنین عملکردهای سطح بالاتری را انجام می‌دهید، توضیحات گزینه -Pn (صرف‌نظر از کشف میزبان) را بخوانید.

-sn (بدون پویش درگاه)

این گزینه به Nmap می‌گوید که پس از کشف میزبان، پویش درگاه را انجام ندهد و فقط میزبان‌های موجود را که به کاوشگرهای کشف میزبان پاسخ داده‌اند چاپ کند. این قابلیت اغلب به عنوان “پویش پینگ (ping scan)” شناخته می‌شود، اما می‌توانید درخواست کنید که ردیابی مسیر (traceroute) و اسکریپت‌های میزبان NSE نیز اجرا شوند. این گزینه به طور پیش‌فرض یک گام نفوذی‌تر از پویش فهرستی است و اغلب می‌تواند برای همان اهداف استفاده شود. این کار امکان شناسایی سبک یک شبکه هدف را بدون جلب توجه زیاد فراهم می‌کند. دانستن اینکه چه تعداد میزبان روشن هستند برای مهاجمان ارزشمندتر از فهرستی است که توسط پویش فهرستی از تک‌تک IPها و نام میزبان‌ها ارائه می‌شود.

مدیران سیستم نیز اغلب این گزینه را ارزشمند می‌دانند. می‌توان از آن به راحتی برای شمارش ماشین‌های موجود در یک شبکه یا نظارت بر در دسترس بودن سرور استفاده کرد. این عمل اغلب جاروب پینگ (ping sweep) نامیده می‌شود و مطمئن‌تر از پینگ کردن آدرس پخش همگانی (broadcast) است زیرا بسیاری از میزبان‌ها به پرس‌وجوهای broadcast پاسخ نمی‌دهند.

کشف میزبان پیش‌فرضی که با -sn انجام می‌شود، شامل یک درخواست انعکاس ICMP، ارسال TCP SYN به درگاه ۴۴۳، ارسال TCP ACK به درگاه ۸۰ و یک درخواست برچسب زمان ICMP است. هنگامی که توسط یک کاربر بدون امتیاز اجرا می‌شود، فقط بسته‌های SYN (با استفاده از فراخوانی connect) به درگاه‌های ۸۰ و ۴۴۳ روی هدف ارسال می‌شوند. هنگامی که یک کاربر دارای دسترسی ریشه تلاش می‌کند اهدافی را در یک شبکه محلی اترنت پویش کند، درخواست‌های ARP استفاده می‌شوند مگر اینکه --send-ip مشخص شده باشد. گزینه -sn می‌تواند با هر یک از انواع کاوشگرهای کشف (گزینه‌های -P*) برای انعطاف‌پذیری بیشتر ترکیب شود. اگر هر یک از آن گزینه‌های نوع کاوشگر و شماره درگاه استفاده شوند، کاوشگرهای پیش‌فرض لغو می‌شوند. هنگامی که فایروال‌های سخت‌گیر بین میزبان منبع اجراکننده Nmap و شبکه هدف وجود دارند، استفاده از این تکنیک‌های پیشرفته توصیه می‌شود. در غیر این صورت ممکن است در زمانی که فایروال کاوشگرها یا پاسخ‌های آن‌ها را مسدود (drop) می‌کند، میزبان‌ها نادیده بمانند.

در نسخه‌های قبلی Nmap، گزینه -sn به عنوان -sP شناخته می‌شد.

-Pn (بدون پینگ)

این گزینه مرحله کشف میزبان را به طور کامل نادیده می‌گیرد. به طور معمول، Nmap از این مرحله برای تعیین ماشین‌های فعال جهت پویش سنگین‌تر و سنجش سرعت شبکه استفاده می‌کند. به طور پیش‌فرض، Nmap تنها کاوش‌های سنگین مانند پویش درگاه، تشخیص نسخه یا تشخیص سیستم‌عامل را روی میزبان‌هایی که فعال شناخته شده‌اند انجام می‌دهد. غیرفعال کردن کشف میزبان با -Pn باعث می‌شود Nmap عملکردهای پویش درخواستی را روی تمام آدرس‌های IP هدف مشخص‌شده اجرا کند. بنابراین اگر یک شبکه به اندازه /16 در خط فرمان مشخص شود، تمام ۶۵٬۵۳۶ آدرس IP پویش می‌شوند. کشف میزبان مناسب مانند پویش فهرستی نادیده گرفته می‌شود، اما به جای متوقف شدن و چاپ فهرست هدف، Nmap به اجرای عملکردهای درخواستی ادامه می‌دهد به گونه‌ای که گویی هر IP هدف فعال است. از پارامترهای زمان‌بندی پیش‌فرض استفاده می‌شود که ممکن است منجر به پویش‌های کندتر شود. برای صرف‌نظر از کشف میزبان و پویش درگاه، در حالی که همچنان اجازه اجرای NSE داده شود، از دو گزینه -Pn -sn با هم استفاده کنید.

برای ماشین‌های موجود در شبکه محلی اترنت، پویش ARP همچنان انجام خواهد شد (مگر اینکه --disable-arp-ping یا --send-ip مشخص شده باشد) زیرا Nmap برای پویش بیشتر میزبان‌های هدف به آدرس‌های MAC نیاز دارد. در نسخه‌های قبلی Nmap، گزینه -Pn به صورت -P0 و -PN بود.

-PS port list (پینگ TCP SYN)

این گزینه یک بسته خالی TCP با فلگ فعال SYN ارسال می‌کند. درگاه مقصد پیش‌فرض ۸۰ است (که در زمان کامپایل با تغییر DEFAULT_TCP_PROBE_PORT_SPEC در nmap.h قابل پیکربندی است). درگاه‌های جایگزین را می‌توان به عنوان یک پارامتر مشخص کرد. ساختار آن مشابه گزینه -p است با این تفاوت که مشخص‌کننده‌های نوع درگاه مانند T: مجاز نیستند. مثال‌ها عبارتند از -PS22 و -PS22-25,80,113,1050,35000. توجه داشته باشید که نمی‌تواند هیچ فاصله‌ای بین -PS و فهرست درگاه‌ها وجود داشته باشد. اگر چندین کاوشگر مشخص شوند، به صورت موازی ارسال خواهند شد.

فلگ SYN به سیستم راه دور نشان می‌دهد که شما در حال تلاش برای برقراری یک اتصال هستید. به طور معمول درگاه مقصد بسته خواهد بود و یک بسته RST (بازنشانی) بازگردانده می‌شود. اگر درگاه باز باشد، هدف مرحله دوم دست‌تکانی سه‌مرحله‌ای TCP (three-way handshake) را با پاسخ دادن با یک بسته TCP SYN/ACK انجام می‌دهد. سپس ماشینی که Nmap را اجرا می‌کند با پاسخ دادن با یک RST به جای ارسال بسته ACK (که دست‌تکانی سه‌مرحله‌ای را تکمیل کرده و اتصال کامل برقرار می‌کرد)، اتصال نوپا را قطع می‌کند. بسته RST توسط هسته ماشینی که Nmap را اجرا می‌کند در پاسخ به SYN/ACK غیرمنتظره ارسال می‌شود، نه توسط خود Nmap.

برای Nmap اهمیتی ندارد که درگاه باز است یا بسته. هر یک از پاسخ‌های RST یا SYN/ACK که قبلاً مورد بحث قرار گرفت به Nmap می‌گوید که میزبان در دسترس و پاسخ‌گو است.

در سیستم‌های یونیکس، معمولاً فقط کاربر ممتاز root قادر به ارسال و دریافت بسته‌های خام TCP است. برای کاربران عادی، یک راهکار جایگزین به طور خودکار به کار گرفته می‌شود که در آن فراخوانی سیستمی connect علیه هر درگاه هدف آغاز می‌شود. این کار اثر ارسال یک بسته SYN به میزبان هدف را در تلاش برای برقراری اتصال دارد. اگر connect با موفقیت سریع یا خطای ECONNREFUSED برگردد، پشته TCP زیرین باید یک SYN/ACK یا RST دریافت کرده باشد و میزبان به عنوان در دسترس علامت‌گذاری می‌شود. اگر تلاش برای اتصال تا رسیدن به زمان وقفه (timeout) معلق بماند، میزبان به عنوان خاموش/غیرفعال (down) علامت‌گذاری می‌شود.

-PA port list (پینگ TCP ACK)

پینگ TCP ACK کاملاً شبیه به پینگ SYN است که توضیح داده شد. تفاوت، همان‌طور که احتمالاً حدس می‌زنید، این است که فلگ TCP ACK به جای فلگ SYN تنظیم می‌شود. چنین بسته ACK ادعا می‌کند که در حال تأیید دریافت داده‌ها روی یک اتصال برقرارشده TCP است، اما چنین اتصالی وجود ندارد. بنابراین میزبان‌های راه دور باید همیشه با یک بسته RST پاسخ دهند و حضور خود را در این فرایند فاش سازند.

گزینه -PA از همان درگاه پیش‌فرض کاوشگر SYN (درگاه ۸۰) استفاده می‌کند و همچنین می‌تواند فهرستی از درگاه‌های مقصد را در همان قالب دریافت کند. اگر یک کاربر غیرممتاز این گزینه را امتحان کند، از راهکار connect که قبلاً مورد بحث قرار گرفت استفاده می‌شود. این راهکار ناقص است زیرا connect در واقع بسته‌ای از نوع SYN ارسال می‌کند نه ACK.

دلیل ارائه هر دو کاوشگر پینگ SYN و ACK به حداکثر رساندن شانس دور زدن فایروال‌ها است. بسیاری از مدیران، مسیریاب‌ها و سایر فایروال‌های ساده را به گونه‌ای پیکربندی می‌کنند که بسته‌های ورودی SYN را به جز مواردی که برای سرویس‌های عمومی مانند وب‌سایت یا سرور ایمیل شرکت در نظر گرفته شده‌اند، مسدود کنند. این کار از سایر اتصالات ورودی به سازمان جلوگیری می‌کند، در حالی که به کاربران اجازه می‌دهد اتصالات خروجی بدون مانع به اینترنت برقرار کنند. این رویکرد غیرمبتنی بر وضعیت (stateless) منابع کمی را روی فایروال/مسیریاب اشغال می‌کند و به طور گسترده توسط فیلترهای سخت‌افزاری و نرم‌افزاری پشتیبانی می‌شود. نرم‌افزار فایروال Netfilter/iptables لینوکس گزینه راحت --syn را برای پیاده‌سازی این رویکرد بدون وضعیت ارائه می‌دهد. هنگامی که قوانین فایروال بدون وضعیت مانند این حاکم هستند، کاوشگرهای پینگ SYN (-PS) به احتمال زیاد هنگام ارسال به درگاه‌های بسته هدف مسدود می‌شوند. در چنین مواردی، کاوشگر ACK می‌درخشد زیرا مستقیماً از این قوانین عبور می‌کند.

نوع متداول دیگری از فایروال‌ها از قوانین مبتنی بر وضعیت (stateful) استفاده می‌کنند که بسته‌های غیرمنتظره را دور می‌اندازند. این ویژگی در ابتدا بیشتر در فایروال‌های سطح بالا یافت می‌شد، اگرچه در طول سال‌ها بسیار متداول‌تر شده است. سیستم Netfilter/iptables لینوکس از طریق گزینه --state از این ویژگی پشتیبانی می‌کند که بسته‌ها را بر اساس وضعیت اتصال دسته‌بندی می‌نماید. یک کاوشگر SYN بیشتر احتمال دارد در برابر چنین سیستمی کار کند، زیرا بسته‌های غیرمنتظره ACK معمولاً به عنوان جعلی شناسایی شده و دور انداخته می‌شوند. راه‌حل این دوراهی، ارسال هر دو کاوشگر SYN و ACK با مشخص کردن همزمان -PS و -PA است.

-PU port list (پینگ UDP)

یکی دیگر از گزینه‌های کشف میزبان، پینگ UDP است که یک بسته UDP را به درگاه‌های داده‌شده ارسال می‌کند. برای بیشتر درگاه‌ها، بسته خالی خواهد بود، اگرچه برخی از آن‌ها از بار داده (payload) مخصوص پروتکل استفاده می‌کنند که احتمال برانگیختن پاسخ را افزایش می‌دهد.

بارهای داده همان کاوشگرهای استفاده‌شده در تشخیص سرویس و نسخه هستند و در فایل nmap-service-probes تعریف شده‌اند. محتوای بسته همچنین می‌تواند با گزینه‌های --data، --data-string و --data-length تغییر کند.

فهرست درگاه‌ها همان قالبی را دارد که در گزینه‌های -PS و -PA ذکر شد. اگر هیچ درگاهی مشخص نشود، پیش‌فرض ۴۰۱۲۵ است. این مقدار پیش‌فرض را می‌توان در زمان کامپایل با تغییر DEFAULT_UDP_PROBE_PORT_SPEC در nmap.h تنظیم کرد. یک درگاه بسیار نامعمول به طور پیش‌فرض استفاده می‌شود زیرا ارسال به درگاه‌های باز اغلب برای این نوع پویش خاص نامطلوب است.

پس از برخورد با یک درگاه بسته در ماشین هدف، کاوشگر UDP باید یک بسته ICMP port unreachable را در پاسخ دریافت کند. این امر برای Nmap نشان می‌دهد که ماشین روشن و در دسترس است. بسیاری از انواع دیگر خطاهای ICMP، مانند غیرقابل دسترس بودن میزبان/شبکه یا پایان زمان حیات (TTL exceeded) نشان‌دهنده یک میزبان خاموش یا غیرقابل دسترس هستند. عدم پاسخ نیز به همین صورت تفسیر می‌شود. اگر به یک درگاه باز برسد، بیشتر سرویس‌ها به سادگی بسته خالی را نادیده می‌گیرند و هیچ پاسخی ارسال نمی‌کنند. به همین دلیل است که درگاه کاوش پیش‌فرض ۴۰۱۲۵ است که بعید است مورد استفاده قرار گیرد. تعداد کمی از سرویس‌ها، مانند پروتکلتولید کاراکتر (chargen)، به یک بسته خالی UDP پاسخ می‌دهند و بدین ترتیب برای Nmap فاش می‌کنند که ماشین در دسترس است.

مزیت اصلی این نوع پویش این است که فایروال‌ها و فیلترهایی را که فقط TCP را بازرسی می‌کنند دور می‌زند. برای مثال، زمانی یک مسیریاب بی‌سیم پهن‌باند Linksys BEFW11S4 داشتم. رابط خارجی این دستگاه تمام درگاه‌های TCP را به طور پیش‌فرض فیلتر می‌کرد، اما کاوشگرهای UDP همچنان پیام‌های غیرقابل دسترس بودن درگاه را دریافت می‌کردند و در نتیجه دستگاه را لو می‌دادند.

-PY port list (پینگ SCTP INIT)

این گزینه یک بسته SCTP حاوی یک قطعه کوچک INIT ارسال می‌کند. درگاه مقصد پیش‌فرض ۸۰ است (که در زمان کامپایل با تغییر DEFAULT_SCTP_PROBE_PORT_SPEC در nmap.h قابل پیکربندی است). درگاه‌های جایگزین را می‌توان به عنوان یک پارامتر مشخص کرد. ساختار آن مشابه -p است با این تفاوت که مشخص‌کننده‌های نوع درگاه مانند S: مجاز نیستند. مثال‌ها عبارتند از -PY22 و -PY22,80,179,5060. توجه داشته باشید که نمی‌تواند هیچ فاصله‌ای بین -PY و فهرست درگاه‌ها وجود داشته باشد. اگر چندین کاوشگر مشخص شوند، به صورت موازی ارسال خواهند شد.

قطعه INIT به سیستم راه دور نشان می‌دهد که شما در تلاش برای برقراری یک ارتباط (association) هستید. به طور معمول درگاه مقصد بسته خواهد بود و یک قطعه ABORT برگردانده می‌شود. اگر درگاه تصادفاً باز باشد، هدف مرحله دوم دست‌تکانی چهارمرحله‌ای SCTP را با پاسخ دادن با یک قطعه INIT-ACK انجام می‌دهد. اگر ماشینی که Nmap را اجرا می‌کند دارای پشته SCTP کاربردی باشد، سپس ارتباط نوپا را با پاسخ دادن با یک قطعه ABORT به جای ارسال قطعه COOKIE-ECHO (که مرحله بعدی در دست‌تکانی چهارمرحله‌ای است) قطع می‌کند. بسته ABORT توسط هسته ماشین اجراکننده Nmap در پاسخ به INIT-ACK غیرمنتظره ارسال می‌شود، نه توسط خود Nmap.

برای Nmap تفاوتی ندارد که درگاه باز باشد یا بسته. هر دو پاسخ ABORT یا INIT-ACK نشان می‌دهند که میزبان در دسترس و پاسخ‌گو است.

در سیستم‌های یونیکس، معمولاً فقط کاربر ممتاز root قادر به ارسال و دریافت بسته‌های خام SCTP است. استفاده از پینگ‌های SCTP INIT در حال حاضر برای کاربران بدون امتیاز امکان‌پذیر نیست.

-PE؛ -PP؛ -PM (انواع پینگ ICMP)

علاوه بر انواع نامتعارف کشف میزبان TCP، UDP و SCTP که توضیح داده شد، Nmap می‌تواند بسته‌های استانداردی را که توسط برنامه همه جا حاضر ping ارسال می‌شوند نیز بفرستد. نرم‌افزار Nmap یک بسته ICMP type 8 (درخواست echo) را به آدرس‌های IP هدف ارسال می‌کند و انتظار دریافت type 0 (پاسخ echo) را از میزبان‌های در دسترس دارد. متأسفانه برای کاوشگران شبکه، بسیاری از میزبان‌ها و فایروال‌ها اکنون این بسته‌ها را به جای پاسخ‌گویی بر اساس استاندارد RFC 1122[2] مسدود می‌کنند. به همین دلیل، پویش‌های فقط بر پایه ICMP به ندرت در برابر اهداف ناشناخته در اینترنت به اندازه کافی قابل اعتماد هستند. اما برای مدیران سیستمی که یک شبکه داخلی را مانیتور می‌کنند، می‌توانند یک رویکرد عملی و کارآمد باشند. از گزینه -PE برای فعال کردن این رفتار درخواست echo استفاده کنید.

اگرچه درخواست echo پرس‌وجوی استاندارد پینگ ICMP است، اما Nmap به همین جا ختم نمی‌شود. استانداردهای ICMP (RFC 792[3] و RFC 950[4]) همچنین بسته‌های درخواست برچسب زمان (timestamp request)، درخواست اطلاعات (information request) و درخواست ماسک آدرس (address mask request) را به ترتیب به عنوان کدهای ۱۳، ۱۵ و ۱۷ مشخص می‌کنند. اگرچه هدف ظاهری این پرس‌وجوها به دست آوردن اطلاعاتی مانند ماسک آدرس و زمان فعلی است، اما می‌توان به راحتی از آن‌ها برای کشف میزبان استفاده کرد. سیستمی که پاسخ می‌دهد، روشن و در دسترس است. نرم‌افزار Nmap در حال حاضر بسته‌های درخواست اطلاعات را پیاده‌سازی نمی‌کند، زیرا به طور گسترده پشتیبانی نمی‌شوند. سند RFC 1122 تأکید می‌کند که “یک میزبان نباید این پیام‌ها را پیاده‌سازی کند”. پرس‌وجوهای برچسب زمان و ماسک آدرس را می‌توان به ترتیب با گزینه‌های -PP و -PM ارسال کرد. پاسخ برچسب زمان (کد ۱۴ در ICMP) یا پاسخ ماسک آدرس (کد ۱۸) نشان می‌دهد که میزبان در دسترس است. این دو پرس‌وجو زمانی می‌توانند ارزشمند باشند که مدیران بسته‌های درخواست echo را مسدود کرده‌اند، در حالی که فراموش کرده‌اند سایر پرس‌وجوهای ICMP می‌توانند برای همین منظور استفاده شوند.

-PO protocol list (پینگ پروتکل IP)

یکی از گزینه‌های جدیدتر کشف میزبان، پینگ پروتکل IP است که بسته‌های IP را با شماره پروتکل مشخص‌شده در هدر IP آن‌ها ارسال می‌کند. فهرست پروتکل‌ها همان قالبی را دارد که فهرست‌های درگاه در گزینه‌های کشف میزبان TCP، UDP و SCTP دارند. اگر هیچ پروتکلی مشخص نشود، پیش‌فرض ارسال چندین بسته IP برای پروتکل‌های ICMP (پروتکل ۱)، IGMP (پروتکل ۲) و IP-in-IP (پروتکل ۴) است. پروتکل‌های پیش‌فرض را می‌توان در زمان کامپایل با تغییر DEFAULT_PROTO_PROBE_PORT_SPEC در nmap.h تنظیم کرد. توجه داشته باشید که برای ICMP، IGMP، TCP (پروتکل ۶)، UDP (پروتکل ۱۷) و SCTP (پروتکل ۱۳۲)، بسته‌ها با هدرهای پروتکل مناسب ارسال می‌شوند، در حالی که سایر پروتکل‌ها بدون هیچ داده اضافی فراتر از هدر IP ارسال می‌شوند (مگر اینکه هر یک از گزینه‌های --data، --data-string یا --data-length مشخص شده باشند).

این روش کشف میزبان یا به دنبال پاسخ‌هایی با استفاده از همان پروتکل کاوشگر می‌گردد، یا پیام‌های ICMP protocol unreachable که نشان می‌دهد پروتکل ارائه‌شده در میزبان مقصد پشتیبانی نمی‌شود. هر دو نوع پاسخ نشان می‌دهند که میزبان هدف زنده و فعال است.

--disable-arp-ping (غیرفعال کردن پینگ ARP یا ND)

نرم‌افزار Nmap معمولاً کشف میزبان‌های اترنت متصل محلی را با استفاده از ARP یا Neighbor Discovery (ND) در IPv6 انجام می‌دهد، حتی اگر سایر گزینه‌های کشف میزبان مانند -Pn یا -PE استفاده شده باشند. برای غیرفعال کردن این رفتار ضمنی، از گزینه --disable-arp-ping استفاده کنید.

رفتار پیش‌فرض معمولاً سریع‌تر است، اما این گزینه در شبکه‌هایی که از Proxy ARP استفاده می‌کنند مفید است، جایی که یک مسیریاب به تمام درخواست‌های ARP پاسخ می‌دهد و باعث می‌شود طبق پویش ARP هر هدفی روشن به نظر برسد.

--discovery-ignore-rst (نادیده گرفتن پاسخ‌های RST در کشف)

در برخی موارد، فایروال‌ها ممکن است در پاسخ به کاوش‌ها به آدرس‌های اشغال‌نشده یا غیرمجاز، پاسخ‌های جعلی بازنشانی TCP (RST) ارسال کنند. از آنجا که Nmap معمولاً پاسخ‌های RST را اثباتی بر فعال بودن هدف می‌داند، این امر می‌تواند منجر به هدر رفتن زمان در پویش اهدافی شود که وجود ندارند. استفاده از --discovery-ignore-rst مانع از در نظر گرفتن این پاسخ‌ها توسط Nmap در طول کشف میزبان می‌شود. در این حالت ممکن است لازم باشد گزینه‌های کشف میزبان اضافی را انتخاب کنید تا مطمئن شوید اهداف را از دست نمی‌دهید.

--traceroute (ردیابی مسیر تا میزبان)

ردیابی مسیر پس از پویش و با استفاده از اطلاعات نتایج پویش انجام می‌شود تا درگاه و پروتکلی را تعیین کند که بیشترین احتمال رسیدن به هدف را دارد. این ویژگی با تمام انواع پویش به جز پویش‌های connect (-sT) و پویش‌های idle (-sI) کار می‌کند. تمام ردیابی‌ها از مدل زمان‌بندی پویا Nmap استفاده می‌کنند و به صورت موازی انجام می‌شوند.

عملکرد Traceroute با ارسال بسته‌هایی با TTL (زمان حیات) کم انجام می‌شود تا تلاش کند پیام‌های ICMP Time Exceeded را از گام‌های (hops) میانی بین پویشگر و میزبان هدف دریافت کند. پیاده‌سازی‌های استاندارد traceroute با TTL برابر با ۱ شروع می‌کنند و TTL را افزایش می‌دهند تا زمانی که به میزبان مقصد برسند. اما traceroute در Nmap با TTL بالا شروع می‌کند و سپس TTL را کاهش می‌دهد تا به صفر برسد. انجام معکوس این کار به Nmap اجازه می‌دهد تا از الگوریتم‌های هوشمند ذخیره‌سازی موقت (caching) برای سرعت بخشیدن به ردیابی‌ها روی چندین میزبان استفاده کند. به طور متوسط Nmap بین ۵ تا ۱۰ بسته کمتر در هر میزبان، بسته به شرایط شبکه، ارسال می‌کند. اگر یک زیرشبکه واحد در حال پویش باشد (مانند 192.168.0.0/24)، Nmap ممکن است فقط مجبور باشد دو بسته به بیشتر میزبان‌ها بفرستد.

اگرچه Nmap در طول سال‌ها از نظر کارایی رشد چشمگیری داشته است، اما کار خود را به عنوان یک پویشگر کارآمد درگاه آغاز کرد و این قابلیت همچنان عملکرد اصلی آن باقی مانده است. دستور ساده nmap target تعداد ۱٬۰۰۰ درگاه TCP را روی میزبان target پویش می‌کند. در حالی که بسیاری از پویشگرهای درگاه به طور سنتی تمام درگاه‌ها را به دو وضعیت باز یا بسته تقسیم می‌کردند، Nmap بسیار دقیق‌تر عمل می‌کند. این ابزار درگاه‌ها را به شش وضعیت تقسیم می‌کند: باز (open)، بسته (closed)، فیلترشده (filtered)، فیلترنشده (unfiltered)، باز|فیلترشده (open|filtered)، یا بسته|فیلترشده (closed|filtered).

این وضعیت‌ها ویژگی‌های ذاتی خود درگاه نیستند، بلکه نحوه مشاهده آن‌ها توسط Nmap را توصیف می‌کنند. برای مثال، پویش Nmap از درون همان شبکه هدف ممکن است درگاه 135/tcp را به صورت باز (open) نشان دهد، در حالی که پویشی در همان زمان با همان گزینه‌ها از طریق اینترنت ممکن است آن درگاه را به صورت فیلترشده (filtered) نشان دهد.

شش وضعیت درگاه که توسط Nmap شناخته می‌شوند

باز (open)

یک برنامه کاربردی به طور فعال در حال پذیرش اتصالات TCP، دیتاگرام‌های UDP یا ارتباطات SCTP روی این درگاه است. یافتن این درگاه‌ها اغلب هدف اصلی پویش درگاه است. افراد با دیدگاه امنیتی می‌دانند که هر درگاه باز یک مسیر برای حمله است. مهاجمان و آزمایش‌کنندگان نفوذ می‌خواهند از درگاه‌های باز سوءاستفاده کنند، در حالی که مدیران تلاش می‌کنند بدون ممانعت از کاربران قانونی، آن‌ها را ببندند یا با فایروال محافظت کنند. درگاه‌های باز همچنین برای پویش‌های غیرامنیتی جالب هستند زیرا سرویس‌های در دسترس برای استفاده در شبکه را نشان می‌دهند.

بسته (closed)

یک درگاه بسته قابل دسترسی است (بسته‌های کاوش Nmap را دریافت کرده و به آن‌ها پاسخ می‌دهد)، اما هیچ برنامه‌ای روی آن گوش نمی‌دهد. این درگاه‌ها می‌توانند در نشان دادن اینکه یک میزبان روی یک آدرس IP فعال است (کشف میزبان یا پویش پینگ) و به عنوان بخشی از تشخیص سیستم‌عامل مفید باشند. از آنجا که درگاه‌های بسته قابل دسترسی هستند، ممکن است ارزش داشته باشد که بعداً دوباره پویش شوند تا در صورت باز شدن برخی از آن‌ها مشخص گردد. مدیران ممکن است بخواهند مسدود کردن چنین درگاه‌هایی را با فایروال در نظر بگیرند که در این صورت در وضعیت فیلترشده ظاهر می‌شوند که در ادامه توضیح داده شده است.

فیلترشده (filtered)

نرم‌افزار Nmap نمی‌تواند تعیین کند که آیا درگاه باز است یا خیر، زیرا فیلتر کردن بسته مانع از رسیدن کاوش‌های آن به درگاه می‌شود. فیلترینگ می‌تواند ناشی از یک دستگاه فایروال اختصاصی، قوانین مسیریاب، یا نرم‌افزار فایروال مبتنی بر میزبان باشد. این درگاه‌ها مهاجمان را ناامید می‌کنند زیرا اطلاعات بسیار کمی ارائه می‌دهند. گاهی اوقات آن‌ها با پیام‌های خطای ICMP مانند type 3 code 13 (مقصد غیرقابل دسترس: ارتباط از نظر مدیریتی ممنوع است) پاسخ می‌دهند، اما فیلترهایی که صرفاً کاوش‌ها را بدون پاسخ دور می‌اندازند بسیار رایج‌تر هستند. این امر Nmap را مجبور می‌کند چندین بار تلاش مجدد انجام دهد تا مبادا کاوش به دلیل شلوغی شبکه به جای فیلترینگ دور انداخته شده باشد. این کار سرعت پویش را به شدت کاهش می‌دهد.

فیلترنشده (unfiltered)

وضعیت فیلترنشده به این معنی است که یک درگاه قابل دسترسی است، اما Nmap قادر به تعیین باز یا بسته بودن آن نیست. تنها پویش ACK که برای نقشه‌برداری از مجموعه‌قوانین فایروال استفاده می‌شود، درگاه‌ها را در این وضعیت دسته‌بندی می‌کند. پویش درگاه‌های فیلترنشده با سایر انواع پویش مانند پویش پنجره (Window scan)، پویش SYN یا پویش FIN ممکن است به تعیین باز بودن درگاه کمک کند.

باز|فیلترشده (open|filtered)

نرم‌افزار Nmap درگاه‌ها را زمانی در این وضعیت قرار می‌دهد که نتواند تعیین کند آیا یک درگاه باز است یا فیلترشده. این حالت برای انواع پویش‌هایی رخ می‌دهد که در آن‌ها درگاه‌های باز پاسخی نمی‌دهند. عدم پاسخ همچنین می‌تواند به این معنی باشد که یک فیلتر بسته، کاوش یا هر پاسخی را که برانگیخته شده دور انداخته است. بنابراین Nmap با اطمینان نمی‌داند که درگاه باز است یا در حال فیلتر شدن است. پویش‌های UDP، پروتکل IP، FIN، NULL و کریسمس درگاه‌ها را به این صورت دسته‌بندی می‌کنند.

بسته|فیلترشده (closed|filtered)

این وضعیت زمانی استفاده می‌شود که Nmap نتواند تعیین کند آیا درگاه بسته است یا فیلترشده. این حالت فقط برای پویش بیکار IP ID (idle scan) استفاده می‌شود.

به عنوان یک فرد مبتدی در تعمیر خودرو، ممکن است ساعت‌ها تلاش کنم تا ابزارهای ابتدایی خود (چکش، نوار چسب، آچار و غیره) را برای انجام کار تطبیق دهم. وقتی با شکست مفتضحانه‌ای روبرو می‌شوم و ماشین قراضه‌ام را پیش یک مکانیک واقعی یدک‌کشی می‌کنم، او همیشه در جعبه‌ابزار عظیم خود جستجو می‌کند تا ابزار کاملی را بیرون بیاورد که کار را بسیار آسان می‌کند. هنر پویش درگاه نیز مشابه است. کارشناسان ده‌ها تکنیک پویش را درک کرده و تکنیک مناسب (یا ترکیبی از آن‌ها) را برای یک کار معین انتخاب می‌کنند. از سوی دیگر، کاربران بی‌تجربه و اسکریپت‌کیدها تلاش می‌کنند هر مشکلی را با پویش پیش‌فرض SYN حل کنند. از آنجا که Nmap رایگان است، تنها مانع برای تسلط بر پویش درگاه، دانش است. این قطعاً بهتر از دنیای خودرو است، جایی که ممکن است برای تشخیص اینکه به یک کمپرسور فنر لول نیاز دارید مهارت زیادی لازم باشد، و سپس همچنان باید هزاران دلار برای آن بپردازید.

بیشتر انواع پویش فقط برای کاربران ممتاز (دارای دسترسی ریشه) در دسترس هستند. این به این دلیل است که آن‌ها بسته‌های خام ارسال و دریافت می‌کنند، که در سیستم‌های یونیکس نیاز به دسترسی root دارد. استفاده از یک حساب مدیر (administrator) در ویندوز توصیه می‌شود، اگرچه Nmap گاهی اوقات برای کاربران بدون امتیاز در آن پلتفرم زمانی که Npcap از قبل در سیستم‌عامل بارگذاری شده است کار می‌کند. الزام دسترسی ریشه زمانی که Nmap در سال ۱۹۹۷ منتشر شد یک محدودیت جدی بود، زیرا بسیاری از کاربران فقط به حساب‌های پوسته اشتراکی دسترسی داشتند. اکنون دنیا متفاوت است؛ رایانه‌ها ارزان‌تر شده‌اند، افراد بسیار بیشتری دسترسی مستقیم و همیشگی به اینترنت دارند و سیستم‌های یونیکس رومیزی (از جمله لینوکس و Mac OS X) فراگیر هستند. نسخه ویندوزی Nmap اکنون در دسترس است و اجازه می‌دهد تا روی سیستم‌های رومیزی بیشتری اجرا شود. به تمام این دلایل، کاربران نیاز کمتری به اجرای Nmap از حساب‌های پوسته اشتراکی محدود دارند. این مایه خوش‌شانسی است، زیرا گزینه‌های ممتاز Nmap را بسیار قدرتمندتر و انعطاف‌پذیرتر می‌کنند.

اگرچه Nmap تلاش می‌کند نتایج دقیقی تولید کند، اما به خاطر داشته باشید که تمام بینش‌های آن بر اساس بسته‌های بازگردانده‌شده توسط ماشین‌های هدف (یا فایروال‌های جلوی آن‌ها) است. چنین میزبان‌هایی ممکن است غیرقابل اعتماد باشند و پاسخ‌هایی ارسال کنند که هدف آن‌ها گیج کردن یا گمراه کردن Nmap است. بسیار رایج‌تر میزبان‌هایی هستند که با RFC سازگار نیستند و آن‌طور که باید به کاوش‌های Nmap پاسخ نمی‌دهند. پویش‌های FIN، NULL و کریسمس به ویژه در معرض این مشکل هستند. چنین مسائلی مختص انواع خاصی از پویش‌ها هستند و بنابراین در بخش‌های مربوط به هر نوع پویش مورد بحث قرار می‌گیرند.

این بخش حدود دوازده تکنیک پویش درگاه را که توسط Nmap پشتیبانی می‌شوند مستند می‌کند. در هر بار فقط می‌توان از یک روش استفاده کرد، به جز اینکه پویش UDP (-sU) و هر یک از انواع پویش SCTP (-sY، -sZ) می‌توانند با هر یک از انواع پویش TCP ترکیب شوند. به عنوان یک راهنمای حافظه، گزینه‌های نوع پویش درگاه به صورت -sC هستند، که در آن C یک حرف برجسته در نام پویش است، که معمولاً اولین حرف است. تنها استثنا در این مورد، پویش منسوخ‌شده جهش FTP (-b) است. به طور پیش‌فرض، Nmap یک پویش SYN انجام می‌دهد، اگرچه اگر کاربر امتیاز مناسب برای ارسال بسته‌های خام را نداشته باشد (نیاز به دسترسی ریشه در یونیکس)، پویش connect را جایگزین می‌کند. از بین پویش‌های فهرست‌شده در این بخش، کاربران بدون امتیاز تنها می‌توانند پویش‌های connect و جهش FTP را اجرا کنند.

-sS (پویش TCP SYN)

پویش SYN به دلایل خوبی گزینه پیش‌فرض و محبوب‌ترین گزینه پویش است. این پویش می‌تواند به سرعت انجام شود و هزاران درگاه را در ثانیه در یک شبکه سریع که توسط فایروال‌های محدودکننده مسدود نشده است، پویش کند. همچنین نسبتاً نامحسوس و پنهان‌کارانه است زیرا هرگز اتصالات TCP را کامل نمی‌کند. پویش SYN در برابر هر پشته سازگار با TCP کار می‌کند، نه اینکه مانند پویش‌های FIN/NULL/Xmas، مایمون و پویش‌های بیکار Nmap به ویژگی‌های خاص پلتفرم‌های ویژه وابسته باشد. این پویش همچنین تفکیک واضح و قابل اعتمادی بین وضعیت‌های باز (open)، بسته (closed)، و فیلترشده (filtered) ارائه می‌دهد.

این تکنیک اغلب به عنوان پویش نیمه‌باز (half-open scanning) نامیده می‌شود، زیرا شما یک اتصال کامل TCP را باز نمی‌کنید. شما یک بسته SYN ارسال می‌کنید، گویی در حال باز کردن یک اتصال واقعی هستید و سپس منتظر پاسخ می‌مانید. یک پاسخ SYN/ACK نشان می‌دهد که درگاه در حال شنود (باز) است، در حالی که یک RST (بازنشانی) نشان‌دهنده عدم شنود است. اگر پس از چندین بار ارسال مجدد پاسخی دریافت نشود، درگاه به عنوان فیلترشده علامت‌گذاری می‌شود. همچنین اگر خطای غیرقابل دسترس بودن ICMP (type 3, code 0, 1, 2, 3, 9, 10, or 13) دریافت شود، درگاه به عنوان فیلترشده علامت‌گذاری می‌شود. درگاه همچنین در صورتی باز در نظر گرفته می‌شود که یک بسته SYN (بدون فلگ ACK) در پاسخ دریافت شود. این می‌تواند ناشی از یک ویژگی بسیار نادر TCP باشد که به عنوان اتصال باز همزمان یا دست‌تکانی تقسیم‌شده شناخته می‌شود (ببینید https://nmap.org/misc/split-handshake.pdf).

-sT (پویش TCP connect)

پویش TCP connect نوع پیش‌فرض پویش TCP است زمانی که پویش SYN یک گزینه در دسترس نباشد. این حالت زمانی اتفاق می‌افتد که کاربر امتیاز ارسال بسته خام را نداشته باشد. به جای نوشتن بسته‌های خام همان‌طور که بیشتر انواع دیگر پویش انجام می‌دهند، Nmap از سیستم‌عامل زیرین می‌خواهد با صدور فراخوانی سیستمی connect یک اتصال با ماشین و درگاه هدف برقرار کند. این همان فراخوانی سیستمی سطح بالایی است که مرورگرهای وب، کلاینت‌های P2P و بیشتر برنامه‌های مبتنی بر شبکه دیگر برای برقراری اتصال از آن استفاده می‌کنند. این بخشی از یک رابط برنامه‌نویسی است که به عنوان Berkeley Sockets API شناخته می‌شود. Nmap به جای خواندن پاسخ‌های خام بسته از روی خط شبکه، از این API برای دریافت اطلاعات وضعیت در مورد هر تلاش برای اتصال استفاده می‌کند.

هنگامی که پویش SYN در دسترس است، معمولاً انتخاب بهتری است. نرم‌افزار Nmap کنترل کمتری بر فراخوانی سطح بالای connect نسبت به بسته‌های خام دارد که کارایی آن را کاهش می‌دهد. فراخوانی سیستمی به جای انجام بازنشانی نیمه‌باز که پویش SYN انجام می‌دهد، اتصالات را به درگاه‌های باز هدف کامل می‌کند. این امر نه تنها زمان بیشتری می‌برد و برای به دست آوردن همان اطلاعات به بسته‌های بیشتری نیاز دارد، بلکه احتمال ثبت اتصال توسط ماشین‌های هدف در لاگ‌ها بسیار بیشتر است. یک سامانه تشخیص نفوذ (IDS) مناسب هر دو را ثبت می‌کند، اما بیشتر ماشین‌ها چنین سیستم هشداری ندارند. بسیاری از سرویس‌ها در یک سیستم یونیکس معمولی، زمانی که Nmap متصل می‌شود و سپس بدون ارسال داده اتصال را می‌بندد، یادداشتی به syslog اضافه می‌کنند و گاهی اوقات یک پیام خطای مبهم نمایش می‌دهند. برخی سرویس‌های ضعیف در هنگام رخ دادن این اتفاق از کار می‌افتند، اگرچه این امر غیرمعمول است. مدیری که دسته‌ای از تلاش‌های اتصال را در لاگ‌های خود از یک سیستم واحد می‌بیند باید بداند که مورد پویش connect قرار گرفته است.

-sU (پویش‌های UDP)

در حالی که بیشتر سرویس‌های محبوب در اینترنت روی پروتکل TCP اجرا می‌شوند، سرویس‌های UDP[5] به طور گسترده‌ای مستقر شده‌اند. سرویس‌های DNS، SNMP و DHCP (درگاه‌های ثبت‌شده ۵۳، ۱۶۱/۱۶۲ و ۶۷/۶۸) سه مورد از رایج‌ترین‌ها هستند. از آنجا که پویش UDP به طور کلی کندتر و دشوارتر از TCP است، برخی از ممیزان امنیتی این درگاه‌ها را نادیده می‌گیرند. این یک اشتباه است، زیرا سرویس‌های UDP قابل سوءاستفاده کاملاً رایج هستند و مهاجمان مطمئناً کل پروتکل را نادیده نمی‌گیرند. خوشبختانه، Nmap می‌تواند به فهرست‌برداری درگاه‌های UDP کمک کند.

پویش UDP با گزینه -sU فعال می‌شود. می‌توان آن را با یک نوع پویش TCP مانند پویش SYN (-sS) ترکیب کرد تا هر دو پروتکل در یک اجرا بررسی شوند.

پویش UDP با ارسال یک بسته UDP به هر درگاه هدف کار می‌کند. برای برخی از درگاه‌های رایج مانند ۵۳ و ۱۶۱، یک بار داده مخصوص پروتکل ارسال می‌شود تا نرخ پاسخ افزایش یابد، اما برای بیشتر درگاه‌ها بسته خالی است مگر اینکه گزینه‌های --data، --data-string یا --data-length مشخص شده باشند. اگر یک خطای ICMP port unreachable (type 3, code 3) بازگردانده شود، درگاه بسته (closed) است. سایر خطاهای ICMP unreachable (type 3, codes 0, 1, 2, 9, 10, or 13) درگاه را به عنوان فیلترشده (filtered) علامت‌گذاری می‌کنند. گاهی اوقات، یک سرویس با یک بسته UDP پاسخ می‌دهد که ثابت می‌کند باز (open) است. اگر پس از ارسال‌های مجدد پاسخی دریافت نشود، درگاه به عنوان باز|فیلترشده (open|filtered) دسته‌بندی می‌شود. این بدان معناست که درگاه ممکن است باز باشد، یا شاید فیلترهای بسته مانع ارتباط شده‌اند. تشخیص نسخه (-sV) می‌تواند برای کمک به تمایز درگاه‌های واقعاً باز از درگاه‌های فیلترشده استفاده شود.

یک چالش بزرگ در پویش UDP انجام سریع آن است. درگاه‌های باز و فیلترشده به ندرت پاسخی ارسال می‌کنند، و باعث می‌شوند Nmap منتظر اتمام زمان وقفه (timeout) بماند و سپس ارسال‌های مجدد را انجام دهد تا در صورتی که کاوش یا پاسخ گم شده باشند جبران شود. درگاه‌های بسته اغلب حتی مشکل بزرگ‌تری هستند؛ آن‌ها معمولاً یک خطای ICMP port unreachable برمی‌گردانند. اما بر خلاف بسته‌های RST ارسال‌شده توسط درگاه‌های بسته TCP در پاسخ به یک پویش SYN یا connect، بسیاری از میزبان‌ها به طور پیش‌فرض پیام‌های ICMP port unreachable را محدود به نرخ خاصی (rate limit) می‌کنند. لینوکس و سولاریس به ویژه در این مورد سخت‌گیر هستند. برای مثال، هسته لینوکس 2.4.20 پیام‌های غیرقابل دسترس بودن مقصد را به یک پیام در ثانیه محدود می‌کند (در net/ipv4/icmp.c).

نرم‌افزار Nmap این محدودیت نرخ را تشخیص داده و سرعت خود را به متناسب با آن کاهش می‌دهد تا از غرق کردن شبکه با بسته‌های بی‌فایده‌ای که ماشین هدف دور می‌اندازد جلوگیری کند. متأسفانه، یک محدودیت به سبک لینوکس یعنی یک بسته در ثانیه، باعث می‌شود پویش ۶۵٬۵۳۶ درگاه بیش از ۱۸ ساعت طول بکشد. ایده‌هایی برای افزایش سرعت پویش‌های UDP شامل پویش همزمان میزبان‌های بیشتر، انجام پویش سریع فقط روی درگاه‌های محبوب در ابتدا، پویش از پشت فایروال و استفاده از --host-timeout برای رد کردن میزبان‌های کند است.

-sY (پویش SCTP INIT)

پروتکل SCTP[6] یک جایگزین نسبتاً جدید برای پروتکل‌های TCP و UDP است که بیشتر ویژگی‌های TCP و UDP را ترکیب کرده و همچنین ویژگی‌های جدیدی مانند چندمقصدی (multi-homing) و چندجریانی (multi-streaming) را اضافه می‌کند. این پروتکل بیشتر برای سرویس‌های مرتبط با SS7/SIGTRAN استفاده می‌شود اما پتانسیل استفاده برای برنامه‌های دیگر را نیز دارد. پویش SCTP INIT معادل پویش TCP SYN در SCTP است. این پویش می‌تواند به سرعت انجام شود و هزاران درگاه را در ثانیه در یک شبکه سریع که توسط فایروال‌های محدودکننده مسدود نشده است پویش کند. مانند پویش SYN، پویش INIT نسبتاً نامحسوس و پنهان‌کارانه است، زیرا هرگز ارتباطات SCTP را کامل نمی‌کند. این پویش همچنین تفکیک واضح و قابل اعتمادی بین وضعیت‌های باز (open)، بسته (closed)، و فیلترشده (filtered) ارائه می‌دهد.

این تکنیک اغلب به عنوان پویش نیمه‌باز نامیده می‌شود، زیرا شما یک ارتباط کامل SCTP را باز نمی‌کنید. شما یک قطعه INIT ارسال می‌کنید، گویی در حال باز کردن یک ارتباط واقعی هستید و سپس منتظر پاسخ می‌مانید. یک قطعه INIT-ACK نشان می‌دهد که درگاه در حال شنود (باز) است، در حالی که یک قطعه ABORT نشان‌دهنده عدم شنود است. اگر پس از چندین بار ارسال مجدد پاسخی دریافت نشود، درگاه به عنوان فیلترشده علامت‌گذاری می‌شود. همچنین اگر یک خطای غیرقابل دسترس بودن ICMP (type 3, code 0, 1, 2, 3, 9, 10, or 13) دریافت شود، درگاه به عنوان فیلترشده علامت‌گذاری می‌شود.

-sN؛ -sF؛ -sX (پویش‌های TCP NULL، FIN و Xmas)

این سه نوع پویش (حتی موارد بیشتری با گزینه --scanflags که در بخش بعدی توضیح داده شده امکان‌پذیر است) از یک روزنه ظریف در استاندارد TCP RFC[7] برای تمایز بین درگاه‌های باز (open) و بسته (closed) سوءاستفاده می‌کنند. صفحه ۶۵ از RFC 793 بیان می‌کند که “اگر وضعیت درگاه [مقصد] CLOSED باشد ... یک بخش ورودی که حاوی RST نباشد باعث می‌شود یک RST در پاسخ ارسال شود.” سپس در صفحه بعد در مورد بسته‌های ارسال‌شده به درگاه‌های باز بدون بیت‌های SYN، RST یا ACK بحث می‌کند و بیان می‌دارد: “بعید است به اینجا برسید، اما اگر رسیدید، بخش را دور بیندازید و بازگردید.”

هنگام پویش سیستم‌های سازگار با این متن RFC، هر بسته‌ای که حاوی بیت‌های SYN، RST یا ACK نباشد، در صورت بسته بودن درگاه منجر به یک RST بازگردانده‌شده و در صورت باز بودن درگاه بدون هیچ پاسخی خواهد بود. تا زمانی که هیچ یک از این سه بیت شامل نشوند، هر ترکیبی از سه بیت دیگر (FIN، PSH و URG) مجاز است. Nmap با سه نوع پویش از این مزیت استفاده می‌کند:

پویش تهی (-sN)

هیچ بیتی را تنظیم نمی‌کند (هدر فلگ TCP برابر با ۰ است)

پویش FIN (-sF)

فقط بیت TCP FIN را تنظیم می‌کند.

پویش کریسمس (-sX)

فلگ‌های FIN، PSH و URG را تنظیم می‌کند و بسته را مانند یک درخت کریسمس روشن می‌سازد.

این سه نوع پویش دقیقاً در رفتار یکسان هستند به جز فلگ‌های TCP که در بسته‌های کاوش تنظیم شده‌اند. اگر یک بسته RST دریافت شود، درگاه بسته (closed) در نظر گرفته می‌شود، در حالی که عدم پاسخ به معنای باز|فیلترشده (open|filtered) است. درگاه در صورتی که یک خطای غیرقابل دسترس بودن ICMP (type 3, code 0, 1, 2, 3, 9, 10, or 13) دریافت شود، به عنوان فیلترشده (filtered) علامت‌گذاری می‌شود.

مزیت کلیدی این نوع پویش‌ها این است که می‌توانند از فایروال‌های غیرمبتنی بر وضعیت خاص و مسیریاب‌های فیلترکننده بسته عبور کنند. مزیت دیگر این است که این نوع پویش‌ها حتی کمی پنهان‌کارانه‌تر از پویش SYN هستند. البته روی این موضوع حساب نکنید—بیشتر محصولات مدرن IDS را می‌توان برای شناسایی آن‌ها پیکربندی کرد. نکته منفی بزرگ این است که همه سیستم‌ها از RFC 793 مو به مو پیروی نمی‌کنند. تعدادی از سیستم‌ها بدون توجه به باز یا بسته بودن درگاه، پاسخ‌های RST به کاوش‌ها ارسال می‌کنند. این امر باعث می‌شود تمام درگاه‌ها به عنوان بسته (closed) برچسب‌گذاری شوند. سیستم‌عامل‌های عمده‌ای که این کار را انجام می‌دهند عبارتند از مایکروسافت ویندوز، بسیاری از دستگاه‌های سیسکو، BSDI و IBM OS/400. با این حال این پویش در برابر بیشتر سیستم‌های مبتنی بر یونیکس کار می‌کند. یکی دیگر از معایب این پویش‌ها این است که نمی‌توانند درگاه‌های باز (open) را از درگاه‌های فیلترشده (filtered) خاص تمایز دهند، و شما را با پاسخ باز|فیلترشده (open|filtered) تنها می‌گذارند.

-sA (پویش TCP ACK)

این پویش با سایر مواردی که تاکنون مورد بحث قرار گرفت متفاوت است زیرا هرگز درگاه‌های باز (open) (یا حتی باز|فیلترشده) را تعیین نمی‌کند. از این پویش برای نقشه‌برداری از مجموعه‌قوانین فایروال استفاده می‌شود تا مشخص شود که آیا آن‌ها مبتنی بر وضعیت هستند یا خیر و کدام درگاه‌ها فیلتر شده‌اند.

بسته کاوش پویش ACK فقط فلگ ACK را تنظیم کرده است (مگر اینکه از --scanflags استفاده کنید). هنگام پویش سیستم‌های فیلترنشده، هر دو درگاه باز و بسته یک بسته RST بازمی‌گردانند. سپس Nmap آن‌ها را به عنوان فیلترنشده (unfiltered) برچسب‌گذاری می‌کند، به این معنی که با بسته ACK قابل دسترسی هستند، اما اینکه آیا آن‌ها باز یا بسته هستند مشخص نشده است. درگاه‌هایی که پاسخ نمی‌دهند، یا پیام‌های خطای ICMP خاصی را برمی‌گردانند (type 3, code 0, 1, 2, 3, 9, 10, or 13)، به عنوان فیلترشده (filtered) برچسب‌گذاری می‌شوند.

-sW (پویش پنجره TCP)

پویش پنجره دقیقاً همانند پویش ACK است با این تفاوت که از یک جزئیات پیاده‌سازی در سیستم‌های خاص برای تمایز درگاه‌های باز از درگاه‌های بسته سوءاستفاده می‌کند، به جای اینکه همیشه هنگام بازگشت RST عبارت فیلترنشده را چاپ کند. این کار با بررسی فیلد پنجره TCP (TCP Window) در بسته‌های RST بازگردانده‌شده انجام می‌شود. در برخی از سیستم‌ها، درگاه‌های باز از اندازه پنجره مثبت (حتی برای بسته‌های RST) استفاده می‌کنند در حالی که درگاه‌های بسته دارای اندازه پنجره صفر هستند. بنابراین به جای اینکه همیشه یک درگاه را هنگام دریافت RST به عنوان فیلترنشده فهرست کند، پویش پنجره در صورتی که مقدار پنجره TCP در آن بازنشانی مثبت یا صفر باشد، درگاه را به ترتیب به عنوان باز (open) یا بسته (closed) فهرست می‌کند.

این پویش به یک جزئیات پیاده‌سازی در اقلیتی از سیستم‌ها در اینترنت متکی است، بنابراین نمی‌توانید همیشه به آن اعتماد کنید. سیستم‌هایی که از آن پشتیبانی نمی‌کنند معمولاً تمام درگاه‌ها را بسته (closed) بازمی‌گردانند. البته ممکن است ماشین واقعاً هیچ درگاه بازی نداشته باشد. اگر بیشتر درگاه‌های پویش‌شده بسته باشند اما چند شماره درگاه رایج (مانند ۲۲، ۲۵، ۵۳) فیلترشده باشند، سیستم به احتمال زیاد مستعد این ویژگی است. گاهی اوقات، سیستم‌ها حتی رفتار کاملاً معکوس را نشان می‌دهند. اگر پویش شما ۱٬۰۰۰ درگاه باز و سه درگاه بسته یا فیلترشده را نشان دهد، آن سه درگاه ممکن است در واقع درگاه‌های واقعاً باز باشند.

-sM (پویش TCP Maimon)

پویش مایمون به نام کاشف آن، اوریل مایمون (Uriel Maimon) نام‌گذاری شده است. او این تکنیک را در شماره ۴۹ مجله Phrack (نوامبر ۱۹۹۶) توصیف کرد. نرم‌افزار Nmap که این تکنیک را شامل می‌شد، دو شماره بعد منتشر شد. این تکنیک دقیقاً مشابه پویش‌های NULL، FIN و کریسمس است، با این تفاوت که کاوشگر به صورت FIN/ACK است. طبق RFC 793[7] (TCP)، باید در پاسخ به چنین کاوشی، چه درگاه باز باشد و چه بسته، یک بسته RST تولید شود. با این حال، اوریل متوجه شد که بسیاری از سیستم‌های مشتق‌شده از BSD در صورت باز بودن درگاه، بسته را صرفاً دور می‌اندازند.

--scanflags (فلگ‌های سفارشی پویش TCP)

کاربران واقعاً پیشرفته Nmap نیازی به محدود کردن خود به انواع پویش‌های آماده ارائه شده ندارند. گزینه --scanflags به شما امکان می‌دهد با مشخص کردن فلگ‌های دلخواه TCP، پویش خود را طراحی کنید. بگذارید خلاقیت شما جاری شود، در حالی که از سیستم‌های تشخیص نفوذ فرار می‌کنید که فروشندگان آن‌ها صرفاً صفحه راهنمای Nmap را ورق زده و قوانین خاصی اضافه کرده‌اند!

آرگومان --scanflags می‌تواند یک مقدار عددی فلگ مانند ۹ (PSH و FIN) باشد، اما استفاده از نام‌های نمادین آسان‌تر است. کافی است هر ترکیبی از URG، ACK، PSH، RST، SYN و FIN را به هم بچسبانید. برای مثال، --scanflags URGACKPSHRSTSYNFIN همه چیز را تنظیم می‌کند، هرچند برای پویش چندان مفید نیست. ترتیبی که این موارد در آن مشخص می‌شوند اهمیتی ندارد.

علاوه بر مشخص کردن فلگ‌های مورد نظر، می‌توانید یک نوع پویش پایه TCP (مانند -sA یا -sF) را نیز مشخص کنید. آن نوع پایه به Nmap می‌گوید که چگونه پاسخ‌ها را تفسیر کند. برای مثال، یک پویش SYN عدم پاسخ را نشان‌دهنده یک درگاه فیلترشده می‌داند، در حالی که یک پویش FIN با همین حالت به عنوان باز|فیلترشده رفتار می‌کند. نرم‌افزار Nmap به همان روشی که برای نوع پویش پایه عمل می‌کند رفتار خواهد کرد، با این تفاوت که از فلگ‌های TCP مشخص‌شده توسط شما استفاده می‌کند. اگر نوع پایه را مشخص نکنید، از پویش SYN استفاده می‌شود.

-sZ (پویش SCTP COOKIE ECHO)

پویش SCTP COOKIE ECHO یک پویش پیشرفته‌تر SCTP است. این پویش از این واقعیت بهره می‌برد که پیاده‌سازی‌های SCTP باید بسته‌های حاوی قطعات COOKIE ECHO را در درگاه‌های باز بی‌صدا دور بیندازند، اما در صورت بسته بودن درگاه، یک قطعه ABORT ارسال کنند. مزیت این نوع پویش این است که به اندازه یک پویش INIT آشکار نیست. همچنین، ممکن است مجموعه‌قوانین فایروال بدون وضعیتی وجود داشته باشند که قطعات INIT را مسدود کنند اما قطعات COOKIE ECHO را مسدود نکنند. فریب نخورید که فکر کنید این کار باعث نامرئی شدن پویش درگاه می‌شود؛ یک IDS خوب قادر به تشخیص پویش‌های SCTP COOKIE ECHO نیز خواهد بود. نکته منفی این است که پویش‌های SCTP COOKIE ECHO نمی‌توانند بین درگاه‌های باز و فیلترشده تمایز قائل شوند، و در هر دو حالت وضعیت باز|فیلترشده را به شما ارائه می‌دهند.

-sI zombie host[:probeport] (پویش غیرفعال / Idle scan)

این روش پویش پیشرفته امکان یک پویش درگاه TCP کاملاً کورکورانه از هدف را فراهم می‌کند (به این معنی که هیچ بسته‌ای از آدرس IP واقعی شما به هدف ارسال نمی‌شود). در عوض، یک حمله کانال جانبی منحصر‌به‌فرد از تولید توالی شناسه تکه‌تکه‌سازی IP (IP ID) قابل پیش‌بینی روی میزبان زامبی (zombie) بهره‌برداری می‌کند تا اطلاعاتی در مورد درگاه‌های باز روی هدف به دست آورد. سیستم‌های IDS پویش را طوری نمایش می‌دهند که گویی از ماشین زامبی مشخص‌شده توسط شما می‌آید (که باید روشن باشد و معیارهای خاصی را برآورده کند). این نوع پویش جذاب بسیار پیچیده‌تر از آن است که بتوان آن را به طور کامل در این راهنما توصیف کرد، بنابراین مقاله‌ای غیررسمی با جزئیات کامل در https://nmap.org/book/idlescan.html نوشته و منتشر کرده‌ام.

علاوه بر اینکه به دلیل ماهیت کورکورانه خود فوق‌العاده پنهان‌کارانه است، این نوع پویش امکان نقشه‌برداری از روابط اعتماد مبتنی بر IP بین ماشین‌ها را فراهم می‌کند. فهرست درگاه‌ها، درگاه‌های باز را از دیدگاه میزبان زامبی نشان می‌دهد. بنابراین می‌توانید با استفاده از زامبی‌های مختلفی که فکر می‌کنید ممکن است مورد اعتماد باشند (از طریق قوانین فیلتر بسته/مسیریاب) هدف را پویش کنید.

اگر مایلید یک درگاه خاص را روی زامبی برای تغییرات IP ID کاوش کنید، می‌توانید یک دونقطه و به دنبال آن شماره درگاه را به میزبان زامبی اضافه کنید. در غیر این صورت Nmap از درگاهی که به طور پیش‌فرض برای پینگ‌های TCP استفاده می‌کند (درگاه ۸۰) استفاده خواهد کرد.

-sO (پویش پروتکل IP)

پویش پروتکل IP به شما امکان می‌دهد تعیین کنید کدام پروتکل‌های IP (TCP، ICMP، IGMP و غیره) توسط ماشین‌های هدف پشتیبانی می‌شوند. این از نظر فنی یک پویش درگاه نیست، زیرا به جای شماره‌های درگاه TCP یا UDP، در میان شماره‌های پروتکل IP گردش می‌کند. با این حال همچنان از گزینه -p برای انتخاب شماره‌های پروتکل پویش‌شده استفاده می‌کند، نتایج خود را در قالب جدول معمول درگاه گزارش می‌دهد، و حتی از همان موتور پویش زیرین روش‌های واقعی پویش درگاه استفاده می‌کند. بنابراین به اندازه کافی به یک پویش درگاه نزدیک است که به اینجا تعلق داشته باشد.

علاوه بر اینکه این پویش به خودی خود مفید است، قدرت نرم‌افزارهای متن‌باز را نشان می‌دهد. اگرچه ایده اساسی بسیار ساده است، اما من به اضافه کردن آن فکر نکرده بودم و هیچ درخواستی برای چنین قابلیتی دریافت نکرده بودم. سپس در تابستان سال ۲۰۰۰، گرهارد ریگر (Gerhard Rieger) این ایده را مطرح کرد، یک وصله عالی برای پیاده‌سازی آن نوشت و آن را به لیست پستی announce (که آن زمان nmap-hackers نامیده می‌شد) ارسال کرد. من آن وصله را در درخت کدهای Nmap ادغام کردم و روز بعد نسخه جدیدی را منتشر نمودم. تعداد کمی از نرم‌افزارهای تجاری کاربرانی دارند که به اندازه کافی مشتاق باشند تا پیشرفت‌های خود را طراحی کرده و مشارکت دهند!

پویش پروتکل به روشی مشابه با پویش UDP کار می‌کند. به جای تکرار روی فیلد شماره درگاه یک بسته UDP، هدرهای بسته IP را ارسال می‌کند و روی فیلد هشت‌بیتی پروتکل IP تکرار می‌شود. هدرها معمولاً خالی هستند، بدون داده و حتی فاقد هدر مناسب برای پروتکل ادعا شده. استثناها TCP، UDP، ICMP، SCTP و IGMP هستند. یک هدر پروتکل مناسب برای آن‌ها گنجانده شده است زیرا برخی از سیستم‌ها در غیر این صورت آن‌ها را ارسال نمی‌کنند و همچنین Nmap قبلاً توابعی برای ایجاد آن‌ها دارد. به جای مراقبت از پیام‌های ICMP port unreachable، پویش پروتکل مراقب پیام‌های ICMP protocol unreachable است. اگر Nmap هر پاسخی در هر پروتکلی از میزبان هدف دریافت کند، آن پروتکل را به عنوان باز (open) علامت‌گذاری می‌کند. خطای ICMP protocol unreachable (type 3, code 2) باعث می‌شود پروتکل به عنوان بسته (closed) علامت‌گذاری شود در حالی که port unreachable (type 3, code 3) پروتکل را به عنوان باز (open) علامت‌گذاری می‌کند. سایر خطاهای ICMP unreachable (type 3, code 0, 1, 9, 10, or 13) باعث می‌شوند پروتکل به عنوان فیلترشده (filtered) علامت‌گذاری شود (اگرچه همزمان ثابت می‌کنند که ICMP باز است). اگر پس از ارسال‌های مجدد پاسخی دریافت نشود، پروتکل به عنوان باز|فیلترشده (open|filtered) علامت‌گذاری می‌شود.

-b FTP relay host (پویش جهش FTP)

یک ویژگی جالب پروتکل FTP (RFC 959[8]) پشتیبانی از اتصالات به اصطلاح پروکسی FTP است. این قابلیت به کاربر اجازه می‌دهد تا به یک سرور FTP متصل شود، سپس درخواست کند که فایل‌ها به یک سرور شخص ثالث ارسال شوند. چنین قابلیتی در سطوح مختلف مستعد سوءاستفاده است، بنابراین بیشتر سرورها پشتیبانی از آن را متوقف کرده‌اند. یکی از سوءاستفاده‌هایی که این ویژگی اجازه می‌دهد، وادار کردن سرور FTP به پویش درگاه سایر میزبان‌ها است. کافی است از سرور FTP بخواهید فایلی را به نوبت به هر درگاه جالب‌توجه یک میزبان هدف ارسال کند. پیام خطا مشخص می‌کند که درگاه باز است یا خیر. این یک روش خوب برای دور زدن فایروال‌ها است زیرا سرورهای FTP سازمانی اغلب در جایی قرار دارند که دسترسی بیشتری به سایر میزبان‌های داخلی نسبت به هر میزبان معمولی اینترنتی دارند. نرم‌افزار Nmap از پویش جهش FTP با گزینه -b پشتیبانی می‌کند. این گزینه آرگومانی به شکل username:password@server:port می‌گیرد. Server نام یا آدرس IP یک سرور FTP آسیب‌پذیر است. مانند یک URL معمولی، می‌توانید username:password را حذف کنید که در این صورت از مشخصات ورود ناشناس (کاربر: anonymous رمز عبور: -wwwuser@) استفاده می‌شود. شماره درگاه (و دونقطه قبل از آن) نیز می‌تواند حذف شود که در این صورت از درگاه پیش‌فرض FTP (درگاه ۲۱) روی server استفاده می‌شود.

این آسیب‌پذیری در سال ۱۹۹۷ که Nmap منتشر شد گسترده بود، اما تا حد زیادی برطرف شده است. با این حال سرورهای آسیب‌پذیر همچنان وجود دارند، بنابراین زمانی که راه‌های دیگر شکست می‌خورند ارزش امتحان کردن را دارد. اگر هدف شما دور زدن فایروال است، شبکه هدف را برای درگاه ۲۱ (یا حتی برای هر سرویس FTP در صورتی که تمام درگاه‌ها را با تشخیص نسخه پویش کنید) پویش کرده و از اسکریپت NSE با نام ftp-bounce استفاده کنید. نرم‌افزار Nmap به شما خواهد گفت که آیا میزبان آسیب‌پذیر است یا خیر. اگر فقط سعی دارید ردپای خود را بپوشانید، نیازی نیست (و در واقع نباید) خود را به میزبان‌های موجود در شبکه هدف محدود کنید. قبل از اینکه به پویش آدرس‌های تصادفی اینترنتی برای یافتن سرورهای آسیب‌پذیر FTP بپردازید، توجه داشته باشید که ممکن است مدیران سیستم از سوءاستفاده شما از سرورهایشان به این روش استقبال نکنند.

علاوه بر تمام روش‌های پویش که قبلاً مورد بحث قرار گرفت، Nmap گزینه‌هایی را برای مشخص کردن اینکه کدام درگاه‌ها پویش شوند و اینکه آیا ترتیب پویش تصادفی باشد یا ترتیبی ارائه می‌دهد. به طور پیش‌فرض، Nmap رایج‌ترین ۱٬۰۰۰ درگاه را برای هر پروتکل پویش می‌کند.

-p port ranges (فقط پویش درگاه‌های مشخص‌شده)

این گزینه درگاه‌هایی را که می‌خواهید پویش شوند مشخص می‌کند و رفتار پیش‌فرض را لغو می‌نماید. شماره درگاه‌های تکی مجاز هستند، همان‌طور که بازه‌های جداشده با خط تیره (مانند 1-1023) نیز مجازند. مقادیر شروع و/یا پایان یک بازه می‌توانند حذف شوند، که باعث می‌شود Nmap به ترتیب از ۱ و ۶۵۵۳۵ استفاده کند. بنابراین می‌توانید -p- را برای پویش درگاه‌های ۱ تا ۶۵۵۳۵ مشخص کنید. پویش درگاه صفر در صورتی که به صراحت آن را مشخص کنید مجاز است. برای پویش پروتکل IP (-sO)، این گزینه شماره‌های پروتکلی را که مایل به پویش آن‌ها هستید مشخص می‌کند (۰–۲۵۵).

هنگام پویش ترکیبی از پروتکل‌ها (مانند TCP و UDP)، می‌توانید با قرار دادن پیشوند قبل از شماره درگاه‌ها، پروتکل خاصی را مشخص کنید: T: برای TCP، U: برای UDP، S: برای SCTP، یا P: برای پروتکل IP. این توصیف‌کننده تا زمانی که توصیف‌کننده دیگری را مشخص نکنید معتبر می‌ماند. برای مثال، آرگومان -p U:53,111,137,T:21-25,80,139,8080 درگاه‌های UDP شماره ۵۳، ۱۱۱ و ۱۳۷ و همچنین درگاه‌های TCP فهرست‌شده را پویش می‌کند. توجه داشته باشید که برای پویش هر دو پروتکل UDP و TCP، باید -sU و حداقل یک نوع پویش TCP (مانند -sS، -sF یا -sT) را مشخص کنید. اگر هیچ توصیف‌کننده پروتکلی داده نشود، شماره درگاه‌ها به تمام فهرست‌های پروتکل اضافه می‌شوند. درگاه‌ها همچنین می‌توانند بر اساس نامی که در فایل nmap-services به آن‌ها ارجاع داده شده مشخص شوند. حتی می‌توانید از نویسه‌های عام (wildcards) * و ? همراه با نام‌ها استفاده کنید. برای مثال، برای پویش FTP و تمام درگاه‌هایی که نام آن‌ها با “http” شروع می‌شود، از -p ftp,http* استفاده کنید. در مورد بسط‌های پوسته (shell expansions) دقت داشته باشید و در صورت عدم اطمینان، آرگومان -p را در کوتیشن قرار دهید.

بازه‌های درگاه‌ها را می‌توان در کروشه قرار داد تا نشان‌دهنده درگاه‌هایی در آن بازه باشد که در nmap-services ظاهر می‌شوند. برای مثال، دستور زیر تمام درگاه‌های موجود در nmap-services را که مساوی یا کمتر از ۱۰۲۴ هستند پویش می‌کند: -p [-1024]. در مورد بسط‌های پوسته دقت کنید و در صورت عدم اطمینان آرگومان -p را در کوتیشن قرار دهید.

--exclude-ports port ranges (مستثنی کردن درگاه‌های مشخص‌شده از پویش)

این گزینه مشخص می‌کند که مایلید Nmap کدام درگاه‌ها را از پویش مستثنی کند. عبارت port ranges مشابه -p مشخص می‌شود. برای پویش پروتکل IP (-sO)، این گزینه شماره پروتکل‌هایی را که مایلید مستثنی شوند مشخص می‌کند (۰–۲۵۵).

هنگامی که درخواست می‌شود درگاه‌ها مستثنی شوند، آن‌ها از تمام انواع پویش مستثنی می‌شوند (یعنی تحت هیچ شرایطی پویش نخواهند شد). این موضوع شامل مرحله کشف نیز می‌شود.

-F (پویش سریع (درگاه‌های محدود))

مشخص می‌کند که مایلید درگاه‌های کمتری را نسبت به پیش‌فرض پویش کنید. به طور معمول Nmap رایج‌ترین ۱٬۰۰۰ درگاه را برای هر پروتکل پویش‌شده بررسی می‌کند. با گزینه -F، این مقدار به ۱۰۰ درگاه کاهش می‌یابد.

نرم‌افزار Nmap برای دانستن اینکه کدام درگاه‌ها رایج‌ترین هستند، به فایل nmap-services همراه با اطلاعات فراوانی نیاز دارد. اگر اطلاعات فراوانی درگاه در دسترس نباشد، شاید به دلیل استفاده از یک فایل nmap-services سفارشی، Nmap تمام درگاه‌های نام‌گذاری‌شده به علاوه درگاه‌های ۱ تا ۱۰۲۴ را پویش می‌کند. در آن حالت، -F به معنای پویش تنها درگاه‌هایی است که در فایل سرویس‌ها نام برده شده‌اند.

-r (عدم تصادفی‌سازی درگاه‌ها)

به طور پیش‌فرض، Nmap ترتیب درگاه‌های پویش‌شده را تصادفی می‌کند (به جز اینکه برخی درگاه‌های معمولاً در دسترس به دلایل کارایی به نزدیکی ابتدا منتقل می‌شوند). این تصادفی‌سازی معمولاً مطلوب است، اما می‌توانید گزینه -r را برای پویش ترتیبی درگاه‌ها (مرتب‌شده از کمترین به بیشترین) مشخص کنید.

--port-ratio ratio<عدد اعشاری بین ۰ و ۱>

تمام درگاه‌های موجود در فایل nmap-services را که نسبتی بزرگ‌تر از مقدار داده‌شده دارند پویش می‌کند. ratio باید بین 0.0 و 1.0 باشد.

--top-ports n

تعداد n درگاه دارای بالاترین نسبت را که در فایل nmap-services یافت می‌شوند، پس از مستثنی کردن تمام درگاه‌های مشخص‌شده توسط --exclude-ports پویش می‌کند. n باید ۱ یا بزرگ‌تر باشد.

اگر Nmap را به سمت یک ماشین راه دور نشانه بروید، ممکن است به شما بگوید که درگاه‌های 25/tcp، 80/tcp و 53/udp باز هستند. Nmap با استفاده از پایگاه‌داده nmap-services خود شامل حدود ۲٬۲۰۰ سرویس شناخته‌شده، گزارش می‌دهد که آن درگاه‌ها احتمالاً به ترتیب با یک سرور ایمیل (SMTP)، وب‌سرور (HTTP) و سرور نام (DNS) مطابقت دارند. این تطبیق معمولاً دقیق است—اکثریت قریب به اتفاق دیمن‌هایی که روی درگاه TCP ۲۵ گوش می‌دهند، در واقع سرورهای ایمیل هستند. با این حال، نباید امنیت خود را روی این موضوع شرط‌بندی کنید! افراد می‌توانند و سرویس‌ها را روی درگاه‌های عجیب و غریب اجرا می‌کنند.

حتی اگر Nmap درست بگوید، و سرور فرضی بالا در حال اجرای سرورهای SMTP، HTTP و DNS باشد، این اطلاعات چندان زیادی نیست. هنگام انجام ارزیابی‌های آسیب‌پذیری (یا حتی موجودی‌برداری ساده شبکه) شرکت‌ها یا مشتریان خود، شما واقعاً می‌خواهید بدانید کدام سرورهای ایمیل و DNS و چه نسخه‌هایی از آن‌ها در حال اجرا هستند. داشتن یک شماره نسخه دقیق به طور چشمگیری در تعیین اینکه یک سرور در برابر چه آسیب‌پذیری‌هایی حساس است کمک می‌کند. تشخیص نسخه به شما در به دست آوردن این اطلاعات کمک می‌نماید.

پس از اینکه درگاه‌های TCP و/یا UDP با استفاده از یکی از روش‌های دیگر پویش کشف شدند، تشخیص نسخه آن درگاه‌ها را بازجویی می‌کند تا اطلاعات بیشتری در مورد آنچه در واقع اجرا می‌شود به دست آورد. پایگاه‌داده nmap-service-probes حاوی کاوشگرهایی برای پرس‌وجو از سرویس‌های مختلف و عبارات تطبیق برای شناسایی و تجزیه پاسخ‌ها است. نرم‌افزار Nmap سعی می‌کند پروتکل سرویس (مانند FTP، SSH، Telnet، HTTP)، نام برنامه (مانند ISC BIND، Apache httpd، Solaris telnetd)، شماره نسخه، نام میزبان، نوع دستگاه (مانند چاپگر، مسیریاب) و خانواده سیستم‌عامل (مانند ویندوز، لینوکس) را تعیین کند. در صورت امکان، Nmap همچنین نمایه‌سازی پلتفرم مشترک (CPE) از این اطلاعات را به دست می‌آورد. گاهی اوقات جزئیات متفرقه‌ای مانند اینکه آیا یک سرور X برای اتصالات باز است، نسخه پروتکل SSH یا نام کاربری KaZaA در دسترس هستند. البته بیشتر سرویس‌ها همه این اطلاعات را ارائه نمی‌دهند. اگر Nmap با پشتیبانی از OpenSSL کامپایل شده باشد، به سرورهای SSL متصل می‌شود تا سرویس گوش‌دهنده در پشت آن لایه رمزنگاری را استنتاج کند. برخی از درگاه‌های UDP پس از اینکه پویش درگاه UDP نتواند تعیین کند که آیا درگاه باز است یا فیلترشده، در وضعیت باز|فیلترشده (open|filtered) باقی می‌مانند. تشخیص نسخه سعی می‌کند پاسخی از این درگاه‌ها دریافت کند (دقیقاً همان‌طور که با درگاه‌های باز انجام می‌دهد) و در صورت موفقیت، وضعیت را به باز تغییر می‌دهد. با درگاه‌های TCP در وضعیت باز|فیلترشده نیز به همین روش رفتار می‌شود. توجه داشته باشید که گزینه -A در Nmap از جمله موارد دیگر، تشخیص نسخه را فعال می‌کند. مقاله‌ای که عملکرد، استفاده و سفارشی‌سازی تشخیص نسخه را مستند می‌کند در نشانی https://nmap.org/book/vscan.html در دسترس است.

هنگامی که سرویس‌های RPC کشف می‌شوند، خردکننده RPC در Nmap (RPC grinder) به طور خودکار برای تعیین برنامه RPC و شماره‌های نسخه استفاده می‌شود. این قابلیت تمام درگاه‌های TCP/UDP شناسایی‌شده به عنوان RPC را می‌گیرد و دستورات SunRPC program NULL را به آن‌ها ارسال می‌کند تا مشخص کند آیا آن‌ها درگاه‌های RPC هستند یا خیر، و در صورت مثبت بودن، چه برنامه و شماره نسخه‌ای را ارائه می‌دهند. بنابراین شما می‌توانید به طور موثر همان اطلاعات rpcinfo -p را به دست آورید حتی اگر نگاشت‌کننده درگاه هدف (portmapper) پشت فایروال باشد (یا توسط بسته‌بندهای TCP محافظت شود). طعمه‌ها (Decoys) در حال حاضر با پویش RPC کار نمی‌کنند.

هنگامی که Nmap پاسخ‌هایی از یک سرویس دریافت می‌کند اما نمی‌تواند آن‌ها را با پایگاه‌داده خود تطبیق دهد، یک اثر انگشت (fingerprint) ویژه و یک URL برای شما چاپ می‌کند تا در صورتی که مطمئن هستید چه چیزی روی درگاه در حال اجرا است، آن را ارسال کنید. لطفاً دو دقیقه وقت بگذارید و این ارسال را انجام دهید تا یافته شما به نفع همه باشد. به لطف این مشارکت‌ها، Nmap حدود ۶٬۵۰۰ الگوی تطبیق برای بیش از ۶۵۰ پروتکل مانند SMTP، FTP، HTTP و غیره دارد.

تشخیص نسخه با گزینه‌های زیر فعال و کنترل می‌شود:

-sV (تشخیص نسخه)

تشخیص نسخه را همان‌طور که در بالا مورد بحث قرار گرفت فعال می‌کند. متناوباً، می‌توانید از -A استفاده کنید که در میان موارد دیگر تشخیص نسخه را فعال می‌کند.

-sR یک نام مستعار برای -sV است. قبل از مارس ۲۰۱۱، برای فعال کردن خردکننده RPC به طور جداگانه از تشخیص نسخه استفاده می‌شد، اما اکنون این گزینه‌ها همیشه ترکیب شده‌اند.

--allports (عدم استثنای هیچ درگاهی از تشخیص نسخه)

به طور پیش‌فرض، تشخیص نسخه Nmap درگاه TCP ۹۱۰۰ را نادیده می‌گیرد زیرا برخی از چاپگرها هر چیزی را که به آن درگاه ارسال می‌شود چاپ می‌کنند که منجر به چاپ ده‌ها صفحه درخواست‌های HTTP GET، درخواست‌های نشست باینری SSL و غیره می‌شود. این رفتار را می‌توان با تغییر یا حذف دستورالعمل Exclude در nmap-service-probes تغییر داد، یا می‌توانید --allports را برای پویش تمام درگاه‌ها بدون در نظر گرفتن هرگونه دستورالعمل Exclude مشخص کنید.

--version-intensity intensity (تنظیم شدت پویش نسخه)

هنگام انجام پویش نسخه (-sV)، Nmap یک سری کاوشگر ارسال می‌کند که به هر یک از آن‌ها یک مقدار نادر بودن بین یک و نه اختصاص داده شده است. کاوشگرهای با شماره پایین‌تر در برابر طیف گسترده‌ای از سرویس‌های رایج موثر هستند، در حالی که کاوشگرهای با شماره بالاتر به ندرت مفید واقع می‌شوند. سطح شدت مشخص می‌کند که کدام کاوشگرها باید اعمال شوند. هر چه این عدد بالاتر باشد، احتمال شناسایی صحیح سرویس بیشتر است. با این حال، پویش‌های با شدت بالا زمان بیشتری می‌برند. مقدار شدت باید بین ۰ و ۹ باشد. مقدار پیش‌فرض ۷ است. هنگامی که یک کاوشگر از طریق دستورالعمل ports در فایل nmap-service-probes برای درگاه هدف ثبت می‌شود، آن کاوشگر بدون توجه به سطح شدت امتحان می‌شود. این امر تضمین می‌کند که کاوشگرهای DNS همیشه در برابر هر درگاه باز ۵۳، کاوشگر SSL روی ۴۴۳ و غیره اجرا شوند.

--version-light (فعال کردن حالت سبک)

این یک نام مستعار راحت برای --version-intensity 2 است. این حالت سبک باعث می‌شود پویش نسخه بسیار سریع‌تر انجام شود، اما احتمال شناسایی سرویس‌ها کمی کمتر است.

--version-all (آزمودن تک‌تک کاوشگرها)

یک نام مستعار برای --version-intensity 9 است که تضمین می‌کند تک‌تک کاوشگرها برای هر درگاه امتحان شوند.

--version-trace (ردیابی فعالیت پویش نسخه)

این گزینه باعث می‌شود Nmap اطلاعات اشکال‌زدایی گسترده‌ای را در مورد کارهایی که پویش نسخه انجام می‌دهد چاپ کند. این زیرمجموعه‌ای از اطلاعاتی است که با --packet-trace دریافت می‌کنید.

یکی از شناخته‌شده‌ترین ویژگی‌های Nmap، تشخیص سیستم‌عامل از راه دور با استفاده از انگشت‌نگاری پشته TCP/IP است. نرم‌افزار Nmap یک سری بسته‌های TCP و UDP را به میزبان راه دور ارسال می‌کند و عملاً تک‌تک بیت‌ها را در پاسخ‌ها بررسی می‌نماید. پس از انجام ده‌ها آزمایش مانند نمونه‌برداری TCP ISN، پشتیبانی و ترتیب گزینه‌های TCP، نمونه‌برداری IP ID و بررسی اندازه پنجره اولیه، Nmap نتایج را با پایگاه‌داده nmap-os-db خود شامل بیش از ۲٬۶۰۰ اثر انگشت سیستم‌عامل شناخته‌شده مقایسه می‌کند و در صورت وجود تطبیق، جزئیات سیستم‌عامل را چاپ می‌نماید. هر اثر انگشت شامل یک توصیف متنی آزاد از سیستم‌عامل و یک طبقه‌بندی است که نام سازنده (مانند Sun)، سیستم‌عامل پایه (مانند Solaris)، نسل سیستم‌عامل (مانند ۱۰) و نوع دستگاه (کاربرد عمومی، مسیریاب، سوییچ، کنسول بازی و غیره) را ارائه می‌دهد. بیشتر اثر انگشت‌ها همچنین دارای یک نمایش نام‌گذاری مشترک پلتفرم (CPE) هستند، مانند cpe:/o:linux:linux_kernel:2.6.

اگر Nmap قادر به حدس زدن سیستم‌عامل یک ماشین نباشد و شرایط مناسب باشد (مانند یافتن حداقل یک درگاه باز و یک درگاه بسته)، Nmap یک URL ارائه می‌دهد که می‌توانید در صورتی که سیستم‌عامل در حال اجرا روی ماشین را (به طور قطعی) می‌دانید، برای ارسال اثر انگشت از آن استفاده کنید. با انجام این کار، شما به مجموعه سیستم‌عامل‌های شناخته‌شده برای Nmap کمک می‌کنید و در نتیجه دقت آن برای همه بیشتر خواهد شد.

تشخیص سیستم‌عامل برخی آزمایش‌های دیگر را فعال می‌کند که از اطلاعات جمع‌آوری‌شده در طول این فرایند استفاده می‌کنند. یکی از این آزمایش‌ها، طبقه‌بندی پیش‌بینی‌پذیری توالی TCP است. این آزمایش تقریباً اندازه‌گیری می‌کند که برقراری یک اتصال جعلی TCP علیه میزبان راه دور چقدر سخت است. این قابلیت برای سوءاستفاده از روابط اعتماد مبتنی بر IP مبدا (مانند rlogin، فیلترهای فایروال و غیره) یا برای پنهان کردن منبع حمله مفید است. این نوع جعل هویت امروزه به ندرت انجام می‌شود، اما بسیاری از ماشین‌ها هنوز در برابر آن آسیب‌پذیر هستند. عدد دشواری واقعی بر اساس نمونه‌برداری آماری است و ممکن است نوسان داشته باشد. معمولاً بهتر است از طبقه‌بندی انگلیسی مانند “worthy challenge” یا “trivial joke” استفاده شود. این گزارش فقط در خروجی معمولی در حالت پرگویی (-v) ارائه می‌شود. هنگامی که حالت پرگویی همراه با -O فعال باشد، تولید توالی IP ID نیز گزارش می‌شود. بیشتر ماشین‌ها در کلاس “incremental” قرار دارند، به این معنی که فیلد ID را در هدر IP برای هر بسته‌ای که ارسال می‌کنند افزایش می‌دهند. این امر آن‌ها را در برابر چندین حمله پیشرفته جمع‌آوری اطلاعات و جعل هویت آسیب‌پذیر می‌کند.

بخش دیگری از اطلاعات اضافی که توسط تشخیص سیستم‌عامل فعال می‌شود، حدس زدن زمان کارکرد (uptime) هدف است. این بخش از گزینه برچسب زمان TCP (RFC 1323[9]) برای حدس زدن زمان آخرین راه‌اندازی مجدد ماشین استفاده می‌کند. این حدس می‌تواند به دلیل صفر نبودن اولیه شمارنده برچسب زمان یا سرریز شدن و دور زدن شمارنده نادرست باشد، بنابراین فقط در حالت پرگویی چاپ می‌شود.

مقاله‌ای که نحوه کارکرد، استفاده و سفارشی‌سازی تشخیص سیستم‌عامل را مستند می‌کند در نشانی https://nmap.org/book/osdetect.html در دسترس است.

تشخیص سیستم‌عامل با گزینه‌های زیر فعال و کنترل می‌شود:

-O (فعال‌سازی تشخیص سیستم‌عامل)

تشخیص سیستم‌عامل را همان‌طور که در بالا توضیح داده شد فعال می‌کند. متناوباً، می‌توانید از -A برای فعال کردن تشخیص سیستم‌عامل همراه با موارد دیگر استفاده کنید.

--osscan-limit (محدود کردن تشخیص سیستم‌عامل به اهداف امیدوارکننده)

تشخیص سیستم‌عامل در صورتی بسیار موثرتر است که حداقل یک درگاه باز و یک درگاه بسته TCP پیدا شود. این گزینه را تنظیم کنید تا Nmap حتی تشخیص سیستم‌عامل را روی میزبان‌هایی که این معیار را برآورده نمی‌کنند امتحان نکند. این کار می‌تواند زمان قابل توجهی را به ویژه در پویش‌های -Pn علیه میزبان‌های متعدد ذخیره کند. این گزینه فقط زمانی اهمیت دارد که تشخیص سیستم‌عامل با -O یا -A درخواست شده باشد.

--osscan-guess؛ --fuzzy (حدس زدن نتایج تشخیص سیستم‌عامل)

هنگامی که Nmap قادر به تشخیص یک تطبیق کامل سیستم‌عامل نیست، گاهی اوقات تطبیق‌های نزدیک را به عنوان احتمالات ارائه می‌دهد. تطبیق باید بسیار نزدیک باشد تا Nmap این کار را به طور پیش‌فرض انجام دهد. هر یک از این گزینه‌های (معادل) باعث می‌شوند Nmap با جسارت بیشتری حدس بزند. Nmap همچنان زمانی که یک تطبیق ناقص چاپ می‌شود به شما اطلاع می‌دهد و سطح اطمینان خود (درصد) را برای هر حدس نمایش می‌دهد.

--max-os-tries (تنظیم حداکثر تعداد تلاش‌های تشخیص سیستم‌عامل برای یک هدف)

هنگامی که Nmap تشخیص سیستم‌عامل را برای یک هدف انجام می‌دهد و موفق به یافتن یک تطبیق کامل نمی‌شود، معمولاً تلاش را تکرار می‌کند. به طور پیش‌فرض، Nmap در صورتی که شرایط برای ارسال اثر انگشت سیستم‌عامل مساعد باشد پنج بار، و زمانی که شرایط چندان خوب نباشد دو بار تلاش می‌کند. مشخص کردن مقدار کمتر برای --max-os-tries (مانند ۱) سرعت Nmap را افزایش می‌دهد، اگرچه تلاش‌های مجددی را که می‌توانستند سیستم‌عامل را شناسایی کنند از دست می‌دهید. متناوباً، می‌توان یک مقدار بالا تعیین کرد تا در شرایط مساعد، تلاش‌های مجدد بیشتری مجاز باشد. این کار به ندرت انجام می‌شود، مگر برای تولید اثر انگشت‌های بهتر جهت ارسال و ادغام در پایگاه‌داده سیستم‌عامل Nmap.

موتور اسکریپت‌نویسی Nmap (یا NSE) یکی از قدرتمندترین و انعطاف‌پذیرترین ویژگی‌های Nmap است. این موتور به کاربران اجازه می‌دهد تا اسکریپت‌های ساده‌ای را (با استفاده از زبان برنامه‌نویسی Lua[10]) بنویسند (و به اشتراک بگذارند) تا طیف گسترده‌ای از وظایف شبکه را خودکارسازی کنند. این اسکریپت‌ها به صورت موازی و با سرعت و کارایی بالایی که از Nmap انتظار دارید اجرا می‌شوند. کاربران می‌توانند به مجموعه در حال رشد و متنوعی از اسکریپت‌های توزیع‌شده با Nmap اعتماد کنند، یا اسکریپت‌های سفارشی خود را برای برآورده کردن نیازهای خاص بنویسند.

وظایفی که ما هنگام ایجاد این سیستم در نظر داشتیم شامل کشف شبکه، تشخیص پیشرفته‌تر نسخه و تشخیص آسیب‌پذیری‌ها است. حتی می‌توان از NSE برای سوءاستفاده از آسیب‌پذیری‌ها (exploitation) استفاده کرد.

برای بازتاب این کاربردهای مختلف و ساده‌سازی انتخاب اسکریپت‌های اجرایی، هر اسکریپت شامل فیلدی است که آن را با یک یا چند دسته‌بندی مرتبط می‌سازد. دسته‌بندی‌های تعریف‌شده فعلی عبارتند از: auth، broadcast، default، discovery، dos، exploit، external، fuzzer، intrusive، malware، safe، version و vuln. همه این موارد در نشانی https://nmap.org/book/nse-usage.html#nse-categories شرح داده شده‌اند.

اسکریپت‌ها در محیط ایزوله (sandbox) اجرا نمی‌شوند و بنابراین می‌توانند به طور تصادفی یا مخرب به سیستم شما آسیب برسانند یا به حریم خصوصی شما نفوذ کنند. هرگز اسکریپت‌های اشخاص ثالث را اجرا نکنید مگر اینکه به نویسندگان آن‌ها اعتماد داشته باشید یا خودتان اسکریپت‌ها را با دقت بررسی کرده باشید.

موتور اسکریپت‌نویسی Nmap با جزئیات کامل در نشانی https://nmap.org/book/nse.html توصیف شده و توسط گزینه‌های زیر کنترل می‌شود:

-sC

یک پویش اسکریپت را با استفاده از مجموعه اسکریپت‌های پیش‌فرض انجام می‌دهد. این گزینه معادل --script=default است. برخی از اسکریپت‌های این دسته‌بندی نفوذی (intrusive) تلقی می‌شوند و نباید بدون مجوز در برابر یک شبکه هدف اجرا شوند.

توجه داشته باشید که این گزینه خلاصه هر زمان که حداقل یک گزینه --script نیز مشخص شده باشد، نادیده گرفته می‌شود.

--script filename|category|directory/|expression[,...]

یک پویش اسکریپت را با استفاده از فهرست جداشده با کاما از نام فایل‌ها، دسته‌بندی‌های اسکریپت و دایرکتوری‌ها اجرا می‌کند. هر عنصر در فهرست همچنین می‌تواند یک عبارت بولین باشد که مجموعه پیچیده‌تری از اسکریپت‌ها را توصیف می‌کند. هر عنصر ابتدا به عنوان یک عبارت، سپس به عنوان یک دسته‌بندی و در نهایت به عنوان یک نام فایل یا دایرکتوری تفسیر می‌شود.

دو ویژگی ویژه فقط برای کاربران پیشرفته وجود دارد: اولی قرار دادن پیشوند + قبل از نام اسکریپت‌ها و عبارات است تا اجرای آن‌ها را حتی در صورتی که به طور معمول اجرا نمی‌شدند (مثلاً سرویس مربوطه در درگاه هدف شناسایی نشده باشد) اجباری کند. ویژگی دیگر این است که می‌توان از آرگومان all برای مشخص کردن تک‌تک اسکریپت‌های موجود در پایگاه‌داده Nmap استفاده کرد. در استفاده از این گزینه احتیاط کنید زیرا NSE شامل اسکریپت‌های خطرناکی مانند اکسپلویت‌ها، شکننده‌های احراز هویت با حمله brute force و حملات منع سرویس (DoS) است.

نام فایل‌ها و دایرکتوری‌ها ممکن است نسبی یا مطلق باشند. نام‌های مطلق مستقیماً استفاده می‌شوند. مسیرهای نسبی در پوشه scripts در هر یک از مکان‌های زیر جستجو می‌شوند تا پیدا شوند:

--datadir
$NMAPDIR
~/.nmap (در ویندوز جستجو نمی‌شود)
APPDATA\nmap (فقط در ویندوز)
دایرکتوری حاوی فایل اجرایی nmap
دایرکتوری حاوی فایل اجرایی nmap به همراه ../share/nmap (در ویندوز جستجو نمی‌شود)
NMAPDATADIR (در ویندوز جستجو نمی‌شود)
دایرکتوری فعلی.

هنگامی که یک نام دایرکتوری که به / ختم می‌شود داده شود، Nmap هر فایلی را در آن دایرکتوری که نام آن با .nse ختم می‌شود بارگذاری می‌کند. تمام فایل‌های دیگر نادیده گرفته می‌شوند و دایرکتوری‌ها به صورت بازگشتی جستجو نمی‌شوند. هنگامی که یک نام فایل داده می‌شود، نیازی نیست که پسوند .nse داشته باشد؛ در صورت لزوم به طور خودکار اضافه خواهد شد. اسکریپت‌های Nmap به طور پیش‌فرض در زیرپوشه scripts از دایرکتوری داده‌های Nmap ذخیره می‌شوند (ببینید https://nmap.org/book/data-files.html).

برای افزایش کارایی، اسکریپت‌ها در پایگاه‌داده‌ای ذخیره شده در scripts/script.db نمایه‌گذاری می‌شوند که دسته‌بندی یا دسته‌بندی‌هایی را که هر اسکریپت به آن‌ها تعلق دارد فهرست می‌کند. هنگام ارجاع به اسکریپت‌ها از script.db بر اساس نام، می‌توانید از نویسه عام به سبک پوسته ‘*’ استفاده کنید.

nmap --script "http-*"

تمام اسکریپت‌هایی را که نام آن‌ها با http- شروع می‌شود بارگذاری می‌کند، مانند http-auth و http-open-proxy. آرگومان ارسال‌شده به --script باید در کوتیشن قرار گیرد تا نویسه عام از تفسیر توسط پوسته محافظت شود.

انتخاب پیچیده‌تر اسکریپت‌ها می‌تواند با استفاده از عملگرهای and، or و not برای ساختن عبارات بولین انجام شود. این عملگرها همان اولویت[11] را مانند زبان Lua دارند: not بالاترین اولویت را دارد، پس از آن and و سپس or. می‌توانید با استفاده از پرانتزها اولویت را تغییر دهید. از آنجا که عبارات حاوی نویسه‌های فاصله هستند، لازم است آن‌ها را در کوتیشن قرار دهید.

nmap --script "not intrusive"

تمام اسکریپت‌ها را به جز مواردی که در دسته‌بندی intrusive هستند بارگذاری می‌کند.

nmap --script "default or safe"

این دستور از نظر عملکردی معادل nmap --script "default,safe" است. تمام اسکریپت‌هایی را که در دسته‌بندی default یا دسته‌بندی safe یا هر دو هستند بارگذاری می‌کند.

nmap --script "default and safe"

اسکریپت‌هایی را بارگذاری می‌کند که در هر دو دسته‌بندی default و safe قرار دارند.

nmap --script "(default or safe or intrusive) and not http-*"

اسکریپت‌های موجود در دسته‌بندی‌های default، safe یا intrusive را بارگذاری می‌کند، به جز مواردی که نام آن‌ها با http- شروع می‌شود.

--script-args n1=v1,n2={n3=v3},n4={v4,v5}

به شما امکان می‌دهد آرگومان‌هایی را به اسکریپت‌های NSE ارائه دهید. آرگومان‌ها فهرستی از جفت‌های name=value هستند که با کاما جدا شده‌اند. نام‌ها و مقادیر می‌توانند رشته‌هایی باشند که فاقد فاصله یا نویسه‌های ‘{’، ‘}’، ‘=’ یا ‘,’ هستند. برای گنجاندن یکی از این نویسه‌ها در یک رشته، رشته را در تک‌کوتیشن یا جفت‌کوتیشن قرار دهید. در یک رشته درون کوتیشن، عبارت ‘\’ یک کوتیشن را اسکیپ می‌کند. بک‌اسلش فقط در این مورد خاص برای اسکیپ کردن علامت کوتیشن استفاده می‌شود؛ در تمام موارد دیگر بک‌اسلش به صورت تحت‌اللفظی تفسیر می‌شود. مقادیر همچنین می‌توانند جدول‌هایی باشند که دقیقاً مانند Lua در {} محصور شده‌اند. یک جدول می‌تواند حاوی مقادیر رشته‌ای ساده یا جفت‌های نام-مقدار بیشتر، از جمله جدول‌های تو در تو باشد. یک مثال پیچیده از آرگومان‌های اسکریپت عبارت است از: --script-args 'user=foo,pass=",{}=bar",whois={whodb=nofollow+ripe},xmpp-info.server_name=localhost'. بسیاری از اسکریپت‌ها آرگومان‌های خود را با نام اسکریپت مشخص می‌کنند، مانند xmpp-info.server_name. یک اسکریپت ابتدا نام آرگومان کامل خود (نام مشخص‌شده در مستندات آن) را بررسی می‌کند قبل از اینکه یک نام آرگومان ساده (در این مورد server_name) را بپذیرد. برخی از آرگومان‌ها مختص یک اسکریپت نیستند؛ آن‌ها معمولاً بر رفتار یک کتابخانه و در نتیجه به طور بالقوه بر تمام اسکریپت‌هایی که از آن کتابخانه استفاده می‌کنند تأثیر می‌گذارند (یک نمونه از این دست http.useragent است که هدر پیش‌فرض HTTP User-Agent را برای هر درخواست وب، صرف‌نظر از اینکه کدام اسکریپت آن را ارسال می‌کند، تنظیم می‌کند). امکان ندارد که برای یک آرگومان دقیقاً یکسان، مقادیر متفاوتی برای اسکریپت‌های مختلف داده شود. پرتال آنلاین مستندات NSE در https://nmap.org/nsedoc آرگومان‌هایی را که هر اسکریپت می‌پذیرد فهرست می‌کند.

--script-args-file filename

به شما امکان می‌دهد آرگومان‌های اسکریپت‌های NSE را از یک فایل بارگذاری کنید. هر آرگومانی در خط فرمان بر موارد موجود در فایل تقدم دارد. فایل می‌تواند یک مسیر مطلق باشد، یا مسیری نسبی نسبت به مسیر جستجوی معمول Nmap (مانند NMAPDIR و غیره). آرگومان‌ها می‌توانند با کاما یا با خط جدید جدا شوند، اما در غیر این صورت از همان قوانین --script-args پیروی می‌کنند، بدون اینکه نیازی به کوتیشن‌گذاری و اسکیپ ویژه داشته باشند، زیرا توسط پوسته تجزیه نمی‌شوند.

--script-help filename|category|directory|expression|all[,...]

راهنمایی درباره اسکریپت‌ها را نمایش می‌دهد. برای هر اسکریپتی که با مشخصات داده‌شده مطابقت دارد، Nmap نام اسکریپت، دسته‌بندی‌های آن و توضیحات آن را چاپ می‌کند. این مشخصات همان مواردی هستند که توسط --script پذیرفته می‌شوند؛ بنابراین برای مثال اگر درباره اسکریپت ftp-anon راهنمایی می‌خواهید، دستور nmap --script-help ftp-anon را اجرا می‌کنید. علاوه بر دریافت راهنما برای اسکریپت‌های تکی، می‌توانید از این گزینه به عنوان پیش‌نمایشی از اسکریپت‌هایی که برای یک مشخصه اجرا خواهند شد استفاده کنید، برای مثال با nmap --script-help default.

--script-trace

این گزینه همان کاری را انجام می‌دهد که --packet-trace انجام می‌دهد، فقط در یک لایه ISO بالاتر. اگر این گزینه مشخص شود، تمام ارتباطات ورودی و خروجی انجام‌شده توسط یک اسکریپت چاپ می‌شود. اطلاعات نمایش‌داده‌شده شامل پروتکل ارتباطی، مبدا، مقصد و داده‌های منتقل‌شده است. اگر بیش از ۵٪ از تمام داده‌های ارسال‌شده قابل چاپ نباشد، خروجی ردگیری به صورت دامپ هگزادسیمال خواهد بود. مشخص کردن --packet-trace ردگیری اسکریپت را نیز فعال می‌کند.

--script-updatedb

این گزینه پایگاه‌داده اسکریپت موجود در scripts/script.db را به‌روزرسانی می‌کند که توسط Nmap برای تعیین اسکریپت‌ها و دسته‌بندی‌های پیش‌فرض در دسترس استفاده می‌شود. تنها در صورتی به‌روزرسانی پایگاه‌داده لازم است که اسکریپت‌های NSE را از دایرکتوری پیش‌فرض scripts اضافه یا حذف کرده باشید یا دسته‌بندی‌های هر اسکریپتی را تغییر داده باشید. این گزینه معمولاً به تنهایی استفاده می‌شود: nmap --script-updatedb.

یکی از بالاترین اولویت‌های من در توسعه Nmap همیشه کارایی بوده است. یک پویش پیش‌فرض (nmap hostname) از یک میزبان در شبکه محلی من یک‌پنجم ثانیه طول می‌کشد. این زمان به سختی برای یک چشم به هم زدن کافی است، اما وقتی صدها یا هزاران میزبان را پویش می‌کنید بر روی هم انباشته می‌شود. علاوه بر این، گزینه‌های خاص پویش مانند پویش UDP و تشخیص نسخه می‌توانند زمان پویش را به طور قابل توجهی افزایش دهند. برخی پیکربندی‌های فایروال، به ویژه محدودسازی نرخ پاسخ (rate limiting) نیز می‌توانند همین اثر را داشته باشند. در حالی که Nmap از موازی‌سازی و الگوریتم‌های پیشرفته متعددی برای سرعت بخشیدن به این پویش‌ها استفاده می‌کند، کاربر کنترل نهایی را بر نحوه اجرای Nmap دارد. کاربران خبره با دقت دستورات Nmap را تنظیم می‌کنند تا فقط اطلاعات مورد نظر خود را به دست آورند و در عین حال محدودیت‌های زمانی خود را رعایت کنند.

تکنیک‌های بهبود زمان پویش شامل حذف آزمایش‌های غیرضروری و ارتقا به آخرین نسخه Nmap است (بهبودهای کارایی مرتباً انجام می‌شوند). بهینه‌سازی پارامترهای زمان‌بندی نیز می‌تواند تفاوت چشمگیری ایجاد کند. این گزینه‌ها در زیر فهرست شده‌اند.

برخی از گزینه‌ها یک پارامتر time (زمان) را می‌پذیرند. این مقدار به طور پیش‌فرض بر حسب ثانیه مشخص می‌شود، اگرچه می‌توانید ‘ms’ (میلی‌ثانیه)، ‘s’ (ثانیه)، ‘m’ (دقیقه) یا ‘h’ (ساعت) را به مقدار اضافه کنید. بنابراین در گزینه --host-timeout آرگومان‌های 900000ms، 900، 900s و 15m همگی کار یکسانی را انجام می‌دهند.

--min-hostgroup numhosts؛ --max-hostgroup numhosts (تنظیم اندازه گروه‌های پویش موازی)

نرم‌افزار Nmap توانایی پویش درگاه یا تشخیص نسخه چند میزبان را به صورت موازی دارد. Nmap این کار را با تقسیم فضای IP هدف به گروه‌ها و سپس پویش یک گروه در هر زمان انجام می‌دهد. به طور کلی، گروه‌های بزرگ‌تر کارآمدتر هستند. نکته منفی این است که نتایج میزبان تا زمانی که کل گروه تمام نشود ارائه نمی‌شود. بنابراین اگر Nmap با اندازه گروه ۵۰ شروع کند، کاربر هیچ گزارشی (به جز به‌روزرسانی‌های ارائه‌شده در حالت پرگویی) تا زمان تکمیل ۵۰ میزبان اول دریافت نخواهد کرد.

به طور پیش‌فرض، Nmap رویکردی مصالحه‌آمیز را برای این تعارض در پیش می‌گیرد. با اندازه گروهی به کوچکی ۵ شروع می‌کند تا نتایج اولیه به سرعت حاصل شوند و سپس اندازه گروه را تا ۱۰۲۴ افزایش می‌دهد. اعداد دقیق پیش‌فرض به گزینه‌های داده‌شده بستگی دارند. به دلایل کارایی، Nmap از اندازه‌های گروه بزرگ‌تر برای پویش‌های UDP یا پویش‌های کم‌درگاه TCP استفاده می‌کند.

هنگامی که حداکثر اندازه گروه با --max-hostgroup مشخص شود، Nmap هرگز از آن اندازه فراتر نخواهد رفت. حداقل اندازه را با --min-hostgroup مشخص کنید و Nmap سعی خواهد کرد اندازه گروه‌ها را بالاتر از آن سطح نگه دارد. اگر میزبان‌های هدف کافی روی یک رابط شبکه مشخص برای برآورده کردن حداقل تعیین‌شده باقی نمانده باشند، ممکن است Nmap مجبور شود از گروه‌های کوچک‌تری استفاده کند. هر دو را می‌توان برای نگه داشتن اندازه گروه در یک محدوده خاص تنظیم کرد، اگرچه این کار به ندرت مورد نیاز است.

این گزینه‌ها در مرحله کشف میزبان یک پویش تأثیری ندارند. این شامل پویش‌های پینگ ساده (-sn) نیز می‌شود. کشف میزبان همیشه در گروه‌های بزرگی از میزبان‌ها برای بهبود سرعت و دقت کار می‌کند.

کاربرد اصلی این گزینه‌ها مشخص کردن حداقل اندازه گروه بزرگ است تا کل پویش سریع‌تر اجرا شود. یک انتخاب رایج ۲۵۶ برای پویش یک شبکه در قطعات به اندازه /24 است. برای پویشی با درگاه‌های زیاد، فراتر رفتن از این عدد بعید است کمک زیادی کند. برای پویش‌های شامل تعداد کمی شماره درگاه، اندازه‌های گروه میزبان ۲۰۴۸ یا بیشتر ممکن است مفید باشند.

--min-parallelism numprobes؛ --max-parallelism numprobes (تنظیم موازی‌سازی کاوشگرها)

این گزینه‌ها تعداد کل کاوشگرهایی را که ممکن است برای یک گروه میزبان معلق باشند کنترل می‌کنند. آن‌ها برای پویش درگاه و کشف میزبان استفاده می‌شوند. به طور پیش‌فرض، Nmap یک موازی‌سازی ایده‌آل و همیشه در حال تغییر را بر اساس کارایی شبکه محاسبه می‌کند. اگر بسته‌ها دور انداخته شوند، Nmap سرعت را کاهش می‌دهد و کاوش‌های معلق کمتری را مجاز می‌داند. تعداد ایده‌آل کاوشگرها به آرامی با اثبات پایداری شبکه افزایش می‌یابد. این گزینه‌ها حدود حداقل یا حداکثر را روی آن متغیر قرار می‌دهند. به طور پیش‌فرض، موازی‌سازی ایده‌آل در صورت غیرقابل اعتماد بودن شبکه می‌تواند به ۱ کاهش یابد و در شرایط عالی به چند صد افزایش یابد.

رایج‌ترین کاربرد، تنظیم --min-parallelism روی عددی بالاتر از ۱ برای افزایش سرعت پویش میزبان‌ها یا شبکه‌های دارای کارایی ضعیف است. این گزینه خطرناکی برای دستکاری است، زیرا تنظیم بسیار بالای آن ممکن است بر دقت تأثیر بگذارد. تنظیم این گزینه همچنین توانایی Nmap را برای کنترل پویای موازی‌سازی بر اساس شرایط شبکه کاهش می‌دهد. مقدار ۱۰ ممکن است معقول باشد، اگرچه من این مقدار را تنها به عنوان آخرین راهکار تنظیم می‌کنم.

گزینه --max-parallelism گاهی اوقات روی ۱ تنظیم می‌شود تا از ارسال بیش از یک کاوشگر در هر زمان توسط Nmap به میزبان‌ها جلوگیری کند. گزینه --scan-delay که بعداً مورد بحث قرار می‌گیرد، روش دیگری برای انجام این کار است.

--min-rtt-timeout time، --max-rtt-timeout time، --initial-rtt-timeout time (تنظیم زمان‌های وقفه کاوشگر)

نرم‌افزار Nmap یک مقدار زمان وقفه جاری را برای تعیین مدت زمانی که منتظر پاسخ کاوشگر می‌ماند قبل از تسلیم شدن یا ارسال مجدد کاوشگر حفظ می‌کند. این مقدار بر اساس زمان پاسخ کاوشگرهای قبلی محاسبه می‌شود.

اگر تأخیر شبکه قابل توجه و متغیر باشد، این زمان وقفه می‌تواند به چند ثانیه افزایش یابد. همچنین در سطح محافظه‌کارانه (بالا) شروع می‌شود و ممکن است هنگام پویش میزبان‌های بدون پاسخ توسط Nmap مدتی به همان شکل باقی بماند.

مشخص کردن مقادیر کمتر برای --max-rtt-timeout و --initial-rtt-timeout نسبت به پیش‌فرض‌ها می‌تواند زمان پویش را به طور قابل توجهی کاهش دهد. این امر به ویژه برای پویش‌های بدون پینگ (-Pn) و پویش‌هایی که در شبکه‌های به شدت فیلترشده انجام می‌شوند صادق است. با این حال خیلی تهاجمی عمل نکنید؛ اگر مقدار بسیار کمی را مشخص کنید، در حالی که پاسخ در حال انتقال است بسیاری از کاوش‌ها دچار وقفه شده و مجدداً ارسال می‌شوند و در نتیجه زمان پویش طولانی‌تر خواهد شد.

اگر همه میزبان‌ها در یک شبکه محلی باشند، ۱۰۰ میلی‌ثانیه (--max-rtt-timeout 100ms) یک مقدار تهاجمی و معقول است. اگر مسیریابی در کار است، ابتدا یک میزبان در شبکه را با ابزار پینگ ICMP یا با یک ابزار سفارشی‌ساز بسته مانند Nping که شانس بیشتری برای عبور از فایروال دارد پینگ کنید. به حداکثر زمان رفت و برگشت از میان حدود ۱۰ بسته نگاه کنید. ممکن است بخواهید آن مقدار را برای --initial-rtt-timeout دو برابر و برای --max-rtt-timeout سه یا چهار برابر کنید. من معمولاً حداکثر RTT را زیر ۱۰۰ میلی‌ثانیه تنظیم نمی‌کنم، مهم نیست زمان‌های پینگ چقدر باشد. همچنین از ۱۰۰۰ میلی‌ثانیه فراتر نمی‌روم.

گزینه --min-rtt-timeout گزینه‌ای است که به ندرت استفاده می‌شود و زمانی مفید است که شبکه آن‌قدر غیرقابل اعتماد باشد که حتی پیش‌فرض Nmap نیز بیش از حد تهاجمی باشد. از آنجا که Nmap فقط زمانی زمان وقفه را به حداقل کاهش می‌دهد که شبکه قابل اعتماد به نظر برسد، این نیاز غیرعادی است و باید به عنوان یک باگ به لیست پستی nmap-dev گزارش شود.

--max-retries numtries (مشخص کردن حداکثر تعداد تلاش‌های مجدد کاوش درگاه)

هنگامی که Nmap پاسخی به کاوشگر پویش درگاه دریافت نمی‌کند، می‌تواند به این معنی باشد که درگاه فیلتر شده است. یا شاید کاوشگر یا پاسخ به سادگی در شبکه گم شده باشد. همچنین ممکن است میزبان هدف دارای محدودیت نرخ فعال باشد که موقتاً پاسخ را مسدود کرده است. بنابراین Nmap با ارسال مجدد کاوشگر اولیه دوباره تلاش می‌کند. اگر Nmap قابلیت اطمینان ضعیف شبکه را تشخیص دهد، ممکن است قبل از تسلیم شدن روی یک درگاه، بارها تلاش کند. در حالی که این کار به نفع دقت است، زمان پویش را نیز طولانی می‌کند. هنگامی که کارایی حیاتی است، پویش‌ها را می‌توان با محدود کردن تعداد ارسال‌های مجدد مجاز تسریع کرد. حتی می‌توانید --max-retries 0 را برای جلوگیری از هرگونه ارسال مجدد مشخص کنید، هرچند این کار فقط برای شرایطی مانند پیمایش‌های غیررسمی که از دست رفتن گاه‌به‌گاه درگاه‌ها و میزبان‌ها قابل قبول است توصیه می‌شود.

حالت پیش‌فرض (بدون قالب -T) اجازه ۱۰ بار ارسال مجدد را می‌دهد. اگر یک شبکه قابل اعتماد به نظر برسد و میزبان‌های هدف محدودیت نرخ نداشته باشند، Nmap معمولاً فقط یک بار ارسال مجدد انجام می‌دهد. بنابراین بیشتر پویش‌های هدف حتی با کاهش --max-retries به مقدار کمی مانند ۳ تحت تأثیر قرار نمی‌گیرند. چنین مقادیری می‌توانند پویش‌های میزبان‌های کند (دارای محدودیت نرخ) را به میزان قابل توجهی سرعت بخشند. معمولاً وقتی Nmap زودتر از درگاه‌ها صرف‌نظر می‌کند برخی اطلاعات را از دست می‌دهید، هرچند ممکن است این بهتر از منقضی شدن --host-timeout و از دست دادن تمام اطلاعات مربوط به هدف باشد.

--host-timeout time (صرف‌نظر از میزبان‌های هدف کند)

پویش برخی از میزبان‌ها به سادگی زمان بسیار زیادی می‌برد. این امر ممکن است به دلیل سخت‌افزار یا نرم‌افزار شبکه با کارایی ضعیف یا غیرقابل اعتماد، محدودیت نرخ بسته یا یک فایروال محدودکننده باشد. چند درصد از کندترین میزبان‌های پویش‌شده می‌توانند بخش عمده‌ای از زمان پویش را مصرف کنند. گاهی اوقات بهتر است جلوی ضرر را بگیرید و ابتدا از آن میزبان‌ها صرف‌نظر کنید. گزینه --host-timeout را با حداکثر مدت زمانی که مایل به انتظار هستید مشخص کنید. برای مثال، 30m را مشخص کنید تا مطمئن شوید Nmap بیش از نیم ساعت روی یک میزبان وقت تلف نمی‌کند. توجه داشته باشید که Nmap ممکن است در طول آن نیم ساعت میزبان‌های دیگر را به طور همزمان پویش کند، بنابراین کاملاً تلف شدن زمان نیست. میزبانی که زمان وقفه آن تمام شود نادیده گرفته می‌شود. هیچ جدول درگاه، تشخیص سیستم‌عامل یا نتیجه تشخیص نسخه‌ای برای آن میزبان چاپ نمی‌شود.

مقدار ویژه 0 می‌تواند به معنای “بدون زمان وقفه” استفاده شود که برای لغو قالب زمان‌بندی T5 (که زمان وقفه میزبان را روی ۱۵ دقیقه تنظیم می‌کند) کاربرد دارد.

--script-timeout time (تنظیم زمان وقفه اسکریپت)

در حالی که برخی از اسکریپت‌ها در کسری از ثانیه تکمیل می‌شوند، برخی دیگر بسته به ماهیت اسکریپت، آرگومان‌های ارسالی، شرایط شبکه و برنامه و موارد دیگر می‌توانند ساعت‌ها یا بیشتر طول بکشند. گزینه --script-timeout سقفی را برای زمان اجرای اسکریپت تعیین می‌کند. هر نمونه اسکریپتی که از این زمان فراتر رود خاتمه می‌یابد و هیچ خروجی نشان داده نخواهد شد. اگر اشکال‌زدایی (-d) فعال باشد، Nmap در مورد هر زمان وقفه گزارش می‌دهد. برای اسکریپت‌های میزبان و سرویس، یک نمونه اسکریپت فقط یک میزبان یا درگاه هدف را پویش می‌کند و دوره زمان وقفه برای نمونه بعدی بازنشانی می‌شود.

مقدار ویژه 0 می‌تواند به معنای “بدون زمان وقفه” استفاده شود تا قالب زمان‌بندی T5 را که زمان وقفه اسکریپت را روی ۱۰ دقیقه تنظیم می‌کند، لغو نماید.

--scan-delay time؛ --max-scan-delay time (تنظیم تاخیر بین کاوش‌ها)

این گزینه باعث می‌شود Nmap حداقل مقدار زمان داده‌شده را بین هر کاوشگری که به یک میزبان معین ارسال می‌کند منتظر بماند. این امر به ویژه در مورد محدودیت نرخ مفید است. ماشین‌های سولاریس (در میان بسیاری دیگر) معمولاً به بسته‌های کاوشگر پویش UDP تنها با یک پیام ICMP در ثانیه پاسخ می‌دهند. ارسال بیشتر از این توسط Nmap بیهوده خواهد بود. یک --scan-delay برابر با 1s نرم‌افزار Nmap را در آن نرخ آهسته نگه می‌دارد. نرم‌افزار Nmap سعی می‌کند محدودیت نرخ را تشخیص دهد و تاخیر پویش را متناسب با آن تنظیم کند، اما اگر از قبل می‌دانید چه نرخی بهتر کار می‌کند، مشخص کردن صریح آن ضرری ندارد.

هنگامی که Nmap تاخیر پویش را برای مقابله با محدودیت نرخ افزایش می‌دهد، سرعت پویش به طور چشمگیری کاهش می‌یابد. گزینه --max-scan-delay بیشترین تاخیری را که Nmap اجازه می‌دهد مشخص می‌کند. یک مقدار کم برای --max-scan-delay می‌تواند سرعت Nmap را افزایش دهد، اما پرخطر است. تنظیم بسیار پایین این مقدار می‌تواند منجر به ارسال مجدد بیهوده بسته‌ها و از دست رفتن احتمالی درگاه‌ها در زمان اعمال محدودیت نرخ دقیق توسط هدف شود.

کاربرد دیگر --scan-delay دور زدن سیستم‌های تشخیص و جلوگیری از نفوذ مبتنی بر آستانه (IDS/IPS) است.

--min-rate number؛ --max-rate number (کنترل مستقیم نرخ پویش)

زمان‌بندی پویای Nmap عملکرد خوبی در یافتن سرعت مناسب برای پویش دارد. با این حال، گاهی اوقات ممکن است نرخ پویش مناسبی را برای یک شبکه بدانید، یا مجبور باشید تضمین کنید که یک پویش تا زمان مشخصی به پایان می‌رسد. یا شاید باید از پویش بسیار سریع Nmap جلوگیری کنید. گزینه‌های --min-rate و --max-rate برای این شرایط طراحی شده‌اند.

هنگامی که گزینه --min-rate داده می‌شود، Nmap تمام تلاش خود را می‌کند تا بسته‌ها را به همان سرعت یا سریع‌تر از نرخ داده‌شده ارسال کند. آرگومان یک عدد حقیقی مثبت است که نرخ بسته را بر حسب بسته در ثانیه نشان می‌دهد. برای مثال، مشخص کردن --min-rate 300 به این معنی است که Nmap سعی خواهد کرد نرخ ارسال را در ۳۰۰ بسته در ثانیه یا بالاتر نگه دارد. مشخص کردن حداقل نرخ مانع از سریع‌تر رفتن Nmap در صورت مساعد بودن شرایط نمی‌شود.

به همین ترتیب، --max-rate نرخ ارسال یک پویش را به حداکثر معینی محدود می‌کند. برای مثال، از --max-rate 100 برای محدود کردن ارسال به ۱۰۰ بسته در ثانیه در یک شبکه سریع استفاده کنید. از --max-rate 0.1 برای یک پویش آهسته شامل یک بسته در هر ده ثانیه استفاده کنید. از --min-rate و --max-rate با هم برای نگه داشتن نرخ در یک محدوده خاص استفاده نمایید.

این دو گزینه سراسری هستند و بر کل پویش تأثیر می‌گذارند، نه میزبان‌های منفرد. آن‌ها فقط بر پویش‌های درگاه و پویش‌های کشف میزبان تأثیر می‌گذارند. سایر ویژگی‌ها مانند تشخیص سیستم‌عامل زمان‌بندی مخصوص به خود را پیاده‌سازی می‌کنند.

دو حالت وجود دارد که در آن‌ها نرخ پویش واقعی ممکن است به کمتر از حداقل درخواستی کاهش یابد: حالت اول زمانی است که حداقل سرعت از سریع‌ترین نرخی که Nmap می‌تواند ارسال کند (که به سخت‌افزار وابسته است) سریع‌تر باشد؛ در این حالت Nmap صرفاً بسته‌ها را با حداکثر سرعت ممکن ارسال می‌کند، اما آگاه باشید که چنین نرخ‌های بالایی احتمالاً باعث افت دقت می‌شوند. حالت دوم زمانی است که Nmap چیزی برای ارسال ندارد، به عنوان مثال در پایان یک پویش که آخرین کاوش‌ها ارسال شده‌اند و Nmap منتظر اتمام زمان وقفه آن‌ها یا دریافت پاسخ است. افت نرخ پویش در پایان یک پویش یا بین گروه‌های میزبان طبیعی است. نرخ ارسال ممکن است موقتاً از حداکثر فراتر رود تا تاخیرهای غیرقابل پیش‌بینی را جبران کند، اما به طور متوسط نرخ در حد حداکثر یا کمتر از آن باقی خواهد ماند.

مشخص کردن حداقل نرخ باید با احتیاط انجام شود. پویش سریع‌تر از آنچه یک شبکه می‌تواند پشتیبانی کند ممکن است منجر به افت دقت شود. در برخی موارد، استفاده از یک نرخ سریع‌تر می‌تواند باعث شود پویش زمان بیشتری نسبت به یک نرخ کندتر ببرد. این به این دلیل است که الگوریتم‌های ارسال مجدد تطبیقی در Nmap شلوغی شبکه ناشی از نرخ پویش بیش از حد را تشخیص داده و تعداد ارسال‌های مجدد را به منظور بهبود دقت افزایش می‌دهند. بنابراین اگرچه بسته‌ها با نرخ بالاتری ارسال می‌شوند، اما در کل بسته‌های بیشتری ارسال می‌گردد. اگر نیاز دارید محدودیتی برای کل زمان پویش تعیین کنید، تعداد ارسال‌های مجدد را با گزینه --max-retries محدود کنید.

--defeat-rst-ratelimit

بسیاری از میزبان‌ها مدت‌هاست از محدودیت نرخ برای کاهش تعداد پیام‌های خطای ICMP (مانند خطاهای درگاه غیرقابل دسترس) ارسالی خود استفاده می‌کنند. برخی از سیستم‌ها اکنون محدودیت‌های نرخ مشابهی را برای بسته‌های RST (بازنشانی) تولیدی خود اعمال می‌نمایند. این امر می‌تواند سرعت Nmap را به شدت کاهش دهد زیرا زمان‌بندی خود را برای بازتاب آن محدودیت‌های نرخ تنظیم می‌کند. می‌توانید به Nmap بگویید که آن محدودیت‌های نرخ را (برای پویش‌های درگاهی مانند پویش SYN که با درگاه‌های بدون پاسخ به عنوان باز رفتار نمی‌کنند) با مشخص کردن --defeat-rst-ratelimit نادیده بگیرد.

استفاده از این گزینه می‌تواند دقت را کاهش دهد، زیرا برخی از درگاه‌ها بدون پاسخ به نظر می‌رسند به این دلیل که Nmap به اندازه کافی برای یک پاسخ دارای محدودیت نرخ RST منتظر نمانده است. با یک پویش SYN، عدم پاسخ منجر به برچسب‌گذاری درگاه به عنوان فیلترشده (filtered) می‌شود، به جای وضعیت بسته (closed) که هنگام دریافت بسته‌های RST می‌بینیم. این گزینه زمانی مفید است که فقط به درگاه‌های باز اهمیت می‌دهید و تمایز بین درگاه‌های بسته و فیلترشده ارزش صرف زمان اضافی را ندارد.

--defeat-icmp-ratelimit

مشابه --defeat-rst-ratelimit، گزینه --defeat-icmp-ratelimit دقت را فدای سرعت می‌کند و سرعت پویش UDP را در برابر میزبان‌هایی که پیام‌های خطای ICMP را به نرخ خاصی محدود می‌کنند افزایش می‌دهد. از آنجا که این گزینه باعث می‌شود Nmap برای دریافت پیام‌های درگاه غیرقابل دسترس تاخیر نداشته باشد، یک درگاه بدون پاسخ به جای حالت پیش‌فرض باز|فیلترشده (open|filtered)، به عنوان بسته|فیلترشده (closed|filtered) برچسب‌گذاری می‌شود. این امر اثر این را دارد که فقط درگاه‌هایی را که واقعاً از طریق UDP پاسخ می‌دهند به عنوان باز (open) در نظر بگیرد. از آنجا که بسیاری از سرویس‌های UDP به این شکل پاسخ نمی‌دهند، احتمال عدم دقت با این گزینه بیشتر از --defeat-rst-ratelimit است.

--nsock-engine iocp|epoll|kqueue|poll|select

استفاده اجباری از یک موتور چندمنظوره‌سازی ورودی/خروجی (IO multiplexing) nsock را اعمال می‌کند. تنها موتور پشتیبان مبتنی بر select(2) تضمین شده است که در سیستم شما در دسترس باشد. موتورها بر اساس نام امکانات مدیریت IO که از آن بهره می‌برند نام‌گذاری شده‌اند. موتورهایی که در حال حاضر پیاده‌سازی شده‌اند عبارتند از epoll، kqueue، poll و select، اما همه آن‌ها در هر پلتفرمی وجود نخواهند داشت. به طور پیش‌فرض، Nmap از "بهترین" موتور استفاده می‌کند، یعنی اولین موتور موجود در این فهرست که پشتیبانی می‌شود. از nmap -V برای مشاهده موتورهای پشتیبانی‌شده در پلتفرم خود استفاده کنید.

-T paranoid|sneaky|polite|normal|aggressive|insane (تنظیم قالب زمان‌بندی)

در حالی که کنترل‌های زمان‌بندی دقیق مورد بحث در بخش قبل قدرتمند و موثر هستند، برخی افراد آن‌ها را گیج‌کننده می‌دانند. علاوه بر این، انتخاب مقادیر مناسب گاهی اوقات می‌تواند زمان بیشتری نسبت به پویشی که سعی در بهینه‌سازی آن دارید ببرد. خوشبختانه، Nmap با شش قالب زمان‌بندی یک رویکرد ساده‌تر ارائه می‌دهد. می‌توانید آن‌ها را با گزینه -T و شماره آن‌ها (۰–۵) یا نام آن‌ها مشخص کنید. نام قالب‌ها عبارتند از paranoid (0) (پارانوئید)، sneaky (1) (مخفی‌کار)، polite (2) (مؤدبانه)، normal (3) (عادی)، aggressive (4) (تهاجمی)، و insane (5) (دیوانه‌وار). دو مورد اول برای فرار از IDS هستند. حالت مؤدبانه (polite) سرعت پویش را کاهش می‌دهد تا از پهنای باند و منابع ماشین هدف کمتر استفاده شود. حالت عادی (normal) پیش‌فرض است و بنابراین -T3 کاری انجام نمی‌دهد. حالت تهاجمی (aggressive) با این فرض که شما در یک شبکه نسبتاً سریع و قابل اعتماد هستید، سرعت پویش‌ها را افزایش می‌دهد. در نهایت حالت دیوانه‌وار (insane) فرض می‌کند که شما در یک شبکه فوق‌العاده سریع هستید یا حاضر به فدا کردن مقداری دقت برای سرعت هستید.

این قالب‌ها به کاربر اجازه می‌دهند مشخص کند چقدر می‌خواهد تهاجمی عمل کند، در حالی که انتخاب مقادیر دقیق زمان‌بندی را به Nmap واگذار می‌کند. قالب‌ها همچنین برخی تنظیمات جزئی سرعت را انجام می‌دهند که در حال حاضر گزینه‌های کنترل دقیق برای آن‌ها وجود ندارد. برای مثال، -T4 مانع از فراتر رفتن تاخیر پویش پویا از ۱۰ میلی‌ثانیه برای درگاه‌های TCP می‌شود و -T5 این مقدار را روی ۵ میلی‌ثانیه محدود می‌کند. قالب‌ها را می‌توان در ترکیب با کنترل‌های دقیق استفاده کرد، و کنترل‌های دقیقی که مشخص می‌کنید بر پیش‌فرض قالب زمان‌بندی برای آن پارامتر تقدم خواهند داشت. من استفاده از -T4 را هنگام پویش شبکه‌های نسبتاً مدرن و قابل اعتماد توصیه می‌کنم. این گزینه را حتی زمانی که کنترل‌های دقیق را اضافه می‌کنید حفظ نمایید تا از بهینه‌سازی‌های جزئی اضافه‌ای که فعال می‌کند بهره‌مند شوید.

اگر در یک اتصال پهن‌باند یا اترنت مناسب هستید، توصیه می‌کنم همیشه از -T4 استفاده کنید. برخی افراد عاشق -T5 هستند، اگرچه برای سلیقه من بیش از حد تهاجمی است. افراد گاهی اوقات -T2 را مشخص می‌کنند زیرا فکر می‌کنند احتمال از کار انداختن میزبان‌ها کمتر است یا به این دلیل که خود را به طور کلی مودب می‌دانند. آن‌ها اغلب متوجه نمی‌شوند که -T polite واقعاً چقدر کند است. پویش آن‌ها ممکن است ده برابر بیشتر از یک پویش پیش‌فرض طول بکشد. خرابی ماشین و مشکلات پهنای باند با گزینه‌های زمان‌بندی پیش‌فرض (-T3) نادر است و بنابراین من معمولاً آن را برای پویشگران محتاط توصیه می‌کنم. حذف تشخیص نسخه در کاهش این مشکلات بسیار موثرتر از دستکاری مقادیر زمان‌بندی است.

در حالی که -T0 و -T1 ممکن است برای جلوگیری از هشدارهای IDS مفید باشند، اما برای پویش هزاران ماشین یا درگاه زمان فوق‌العاده زیادی می‌برند. برای چنین پویش طولانی، ممکن است ترجیح دهید به جای تکیه بر مقادیر آماده -T0 و -T1، مقادیر دقیق زمان‌بندی مورد نیاز خود را تنظیم کنید.

اثرات اصلی T0 سریالی کردن پویش است به طوری که در هر زمان فقط یک درگاه پویش شود، و ۵ دقیقه بین ارسال هر کاوشگر منتظر می‌ماند. T1 و T2 مشابه هستند اما به ترتیب تنها ۱۵ ثانیه و 0.4 ثانیه بین کاوش‌ها منتظر می‌مانند. T3 رفتار پیش‌فرض Nmap است که شامل موازی‌سازی می‌شود. -T4 معادل --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 عمل می‌کند و حداکثر تاخیر پویش TCP و SCTP را روی ۱۰ میلی‌ثانیه تنظیم می‌کند. T5 معادل --max-rtt-timeout 300ms --min-rtt-timeout 50ms --initial-rtt-timeout 250ms --max-retries 2 --host-timeout 15m --script-timeout 10m عمل می‌کند و همچنین حداکثر تاخیر پویش TCP و SCTP را روی ۵ میلی‌ثانیه تنظیم می‌نماید. حداکثر تاخیر پویش UDP توسط T4 یا T5 تنظیم نمی‌شود، اما می‌توان آن را با گزینه --max-scan-delay تنظیم کرد.

بسیاری از پیشگامان اینترنت یک شبکه باز جهانی را با یک فضای آدرس IP فراگیر پیش‌بینی می‌کردند که اتصالات مجازی را بین هر دو گره ممکن می‌ساخت. این امر به میزبان‌ها اجازه می‌دهد تا به عنوان همتایان واقعی عمل کنند و اطلاعات را از یکدیگر ارائه و دریافت نمایند. افراد می‌توانستند از محل کار به تمام سیستم‌های خانگی خود دسترسی داشته باشند، تنظیمات تهویه مطبوع را تغییر دهند یا درها را برای مهمانان زودهنگام باز کنند. این چشم‌انداز از اتصال جهانی به دلیل کمبود فضای آدرس و نگرانی‌های امنیتی خفه شده است. در اوایل دهه ۱۹۹۰، سازمان‌ها شروع به استقرار فایروال‌ها با هدف صریح کاهش اتصال کردند. شبکه‌های عظیم با پروکسی‌های کاربردی، ترجمه آدرس شبکه (NAT) و فیلترهای بسته از اینترنت فیلترنشده جدا شدند. جریان نامحدود اطلاعات جای خود را به نظارت شدید بر کانال‌های ارتباطی تاییدشده و محتوایی که از طریق آن‌ها منتقل می‌شود داد.

موانع شبکه مانند فایروال‌ها می‌توانند نقشه‌برداری از یک شبکه را بسیار دشوار کنند. این کار آسان‌تر نخواهد شد، زیرا خنثی کردن شناسایی‌های غیررسمی اغلب یک هدف کلیدی در پیاده‌سازی این دستگاه‌ها است. با این حال، Nmap ویژگی‌های زیادی را برای کمک به درک این شبکه‌های پیچیده و تأیید عملکرد فیلترها مطابق با انتظارات ارائه می‌دهد. حتی از سازوکارهایی برای دور زدن دفاع‌های ضعیف پشتیبانی می‌کند. یکی از بهترین روش‌ها برای درک وضعیت امنیتی شبکه، تلاش برای غلبه بر آن است. خود را در ذهنیت یک مهاجم قرار دهید و تکنیک‌های این بخش را علیه شبکه‌های خود به کار بگیرید. یک پویش جهش FTP، پویش بیکار (idle scan)، حمله تکه‌تکه‌سازی اجرا کنید، یا سعی کنید از طریق یکی از پروکسی‌های خود تونل بزنید.

علاوه بر محدود کردن فعالیت‌های شبکه، شرکت‌ها به طور فزاینده‌ای ترافیک را با سیستم‌های تشخیص نفوذ (IDS) مانیتور می‌کنند. همه سامانه‌های اصلی IDS با قوانینی ارائه می‌شوند که برای شناسایی پویش‌های Nmap طراحی شده‌اند زیرا پویش‌ها گاهی اوقات مقدمه‌ای برای حملات هستند. بسیاری از این محصولات اخیراً به سامانه‌های پیشگیری از نفوذ (IPS) تبدیل شده‌اند که ترافیک مخرب تلقی‌شده را به طور فعال مسدود می‌کنند. متأسفانه برای مدیران شبکه و فروشندگان IDS، تشخیص قابل اعتماد نیت‌های بد با تجزیه و تحلیل داده‌های بسته یک مشکل دشوار است. مهاجمان با صبر، مهارت و کمک برخی گزینه‌های Nmap معمولاً می‌توانند بدون شناسایی از IDS عبور کنند. در همین حال، مدیران باید با تعداد زیادی نتایج مثبت کاذب (false positive) کنار بیایند که در آن‌ها فعالیت‌های بی‌ضرر به اشتباه تشخیص داده شده و درباره آن‌ها هشدار داده شده یا مسدود می‌شوند.

گاهی اوقات افراد پیشنهاد می‌کنند که Nmap نباید ویژگی‌هایی را برای دور زدن قوانین فایروال یا عبور پنهانی از IDSها ارائه دهد. آن‌ها استدلال می‌کنند که این ویژگی‌ها همان‌قدر که توسط مهاجمان سوءاستفاده می‌شوند، توسط مدیران برای ارتقای امنیت استفاده نمی‌شوند. مشکل این منطق این است که این روش‌ها همچنان توسط مهاجمانی استفاده می‌شوند که صرفاً ابزارهای دیگری را پیدا می‌کنند یا این قابلیت‌ها را به Nmap وصله می‌زنند. در این میان، کار مدیران بسیار سخت‌تر خواهد شد. استقرار تنها سرورهای مدرن و وصله‌شده FTP دفاعی بسیار قوی‌تر از تلاش برای جلوگیری از توزیع ابزارهایی است که حمله جهش FTP را پیاده‌سازی می‌کنند.

هیچ راه‌حل جادویی (یا گزینه واحدی در Nmap) برای شناسایی و براندازی فایروال‌ها و سیستم‌های IDS وجود ندارد. این کار نیازمند مهارت و تجربه است. یک آموزش جامع فراتر از حوصله این راهنما است که فقط گزینه‌های مربوطه را فهرست کرده و عملکرد آن‌ها را توضیح می‌دهد.

-f (تکه‌تکه‌سازی بسته‌ها)؛ --mtu (با استفاده از MTU مشخص‌شده)

گزینه -f باعث می‌شود که پویش درخواستی (از جمله پویش‌های کشف میزبان) از بسته‌های IP بسیار کوچک تکه‌تکه‌شده استفاده کند. ایده این است که هدر TCP در چندین بسته تقسیم شود تا تشخیص آنچه انجام می‌دهید برای فیلترهای بسته، سیستم‌های تشخیص نفوذ و سایر موانع دشوارتر شود. در این مورد مراقب باشید! برخی از برنامه‌ها در مدیریت این بسته‌های کوچک با مشکل مواجه می‌شوند. اسنیفر قدیمی با نام Sniffit بلافاصله پس از دریافت اولین قطعه دچار خطای segmentation fault می‌شد. این گزینه را یک بار مشخص کنید و Nmap بسته‌ها را به هشت بایت یا کمتر بعد از هدر IP تقسیم می‌کند. بنابراین یک هدر ۲۰ بایتی TCP به سه بسته تقسیم می‌شود: دو بسته با هشت بایت از هدر TCP، و یکی با چهار بایت پایانی. البته هر قطعه یک هدر IP نیز دارد. گزینه -f را دوباره مشخص کنید تا از ۱۶ بایت در هر قطعه استفاده شود (کاهش تعداد قطعات). یا می‌توانید اندازه آفست خود را با گزینه --mtu مشخص کنید. در صورت استفاده از --mtu، دیگر -f را مشخص نکنید. آفست باید مضربی از هشت باشد. در حالی که بسته‌های تکه‌تکه‌شده از فیلترهای بسته و فایروال‌هایی که تمام قطعات IP را در صف قرار می‌دهند (مانند گزینه CONFIG_IP_ALWAYS_DEFRAG در هسته لینوکس) عبور نمی‌کنند، برخی از شبکه‌ها توانایی تحمل افت کارایی ناشی از این کار را ندارند و بنابراین آن را غیرفعال می‌گذارند. برخی دیگر نمی‌توانند این را فعال کنند زیرا قطعات ممکن است مسیرهای متفاوتی را به شبکه‌های آن‌ها طی کنند. برخی از سیستم‌های مبدا بسته‌های خروجی را در هسته بازسازی (defragment) می‌کنند؛ لینوکس با ماژول ردیابی اتصال iptables یک نمونه از این دست است. در حالی که یک اسنیفر مانند Wireshark در حال اجرا است، پویشی انجام دهید تا مطمئن شوید بسته‌های ارسالی تکه‌تکه شده‌اند. اگر سیستم‌عامل میزبان شما مشکل‌ساز شده است، گزینه --send-eth را برای دور زدن لایه IP و ارسال فریم‌های خام اترنت امتحان کنید.

تکه‌تکه‌سازی فقط برای ویژگی‌های بسته خام Nmap پشتیبانی می‌شود، که شامل پویش‌های درگاه TCP و UDP (به جز پویش connect و پویش جهش FTP) و تشخیص سیستم‌عامل است. ویژگی‌هایی مانند تشخیص نسخه و موتور اسکریپت‌نویسی Nmap عموماً از تکه‌تکه‌سازی پشتیبانی نمی‌کنند زیرا برای برقراری ارتباط با سرویس‌های هدف به پشته TCP میزبان شما وابسته هستند.

-D decoy1[,decoy2][,ME][,...] (پنهان کردن پویش با طعمه‌ها)

باعث می‌شود یک پویش طعمه‌ای انجام شود، که باعث می‌شود به نظر میزبان راه دور برسد که میزبان(های) مشخص‌شده به عنوان طعمه نیز در حال پویش شبکه هدف هستند. بنابراین IDS آن‌ها ممکن است ۵ تا ۱۰ پویش درگاه را از آدرس‌های IP منحصر‌به‌فرد گزارش دهد، اما آن‌ها نخواهند دانست کدام IP در حال پویش آن‌ها بوده و کدام موارد طعمه‌های بی‌گناه بوده‌اند. اگرچه این روش را می‌توان از طریق ردیابی مسیر مسیریاب، انداختن پاسخ و سایر سازوکارهای فعال خنثی کرد، اما به طور کلی یک تکنیک موثر برای پنهان کردن آدرس IP شما است.

هر میزبان طعمه را با کاما جدا کنید، و می‌توانید به صورت اختیاری از ME به عنوان یکی از طعمه‌ها برای نمایش موقعیت آدرس IP واقعی خود استفاده کنید. اگر ME را در موقعیت ششم یا بعد از آن قرار دهید، بعید است برخی از آشکارسازهای رایج پویش درگاه (مانند Scanlogd عالی اثر Solar Designer) آدرس IP شما را اصلاً نشان دهند. اگر از ME استفاده نکنید، Nmap شما را در یک موقعیت تصادفی قرار می‌دهد. همچنین می‌توانید از RND برای تولید یک آدرس IP تصادفی و غیررزرو شده، یا از RND:number برای تولید number آدرس استفاده کنید.

توجه داشته باشید که میزبان‌هایی که به عنوان طعمه استفاده می‌کنید باید روشن باشند وگرنه ممکن است به طور تصادفی اهداف خود را دچار سیلاب SYN (SYN flood) کنید. همچنین اگر تنها یک میزبان واقعاً در شبکه فعال باشد، تعیین اینکه کدام میزبان در حال پویش است بسیار آسان خواهد بود. ممکن است بخواهید از آدرس‌های IP به جای نام‌ها استفاده کنید (تا شبکه‌های طعمه شما را در لاگ‌های سرور نام خود نبینند). در حال حاضر تولید آدرس IP تصادفی فقط با IPv4 پشتیبانی می‌شود.

طعمه‌ها هم در پویش اولیه کشف میزبان (با استفاده از ICMP، SYN، ACK یا هر چیز دیگری) و هم در مرحله پویش واقعی درگاه استفاده می‌شوند. طعمه‌ها همچنین در طول تشخیص از راه دور سیستم‌عامل (-O) استفاده می‌شوند. طعمه‌ها با تشخیص نسخه یا پویش TCP connect کار نمی‌کنند. هنگامی که تاخیر پویش اعمال می‌شود، تاخیر بین هر دسته از کاوش‌های جعل‌شده اعمال می‌شود، نه بین هر کاوشگر منفرد. از آنجا که طعمه‌ها به صورت دسته‌ای و یک‌باره ارسال می‌شوند، ممکن است موقتاً محدودیت‌های کنترل ازدحام را نقض کنند.

شایان ذکر است که استفاده از تعداد بیش از حد طعمه ممکن است پویش شما را کند کرده و حتی دقت آن را کاهش دهد. همچنین، برخی از ارائه‌دهندگان اینترنت (ISP) بسته‌های جعلی شما را فیلتر می‌کنند، اما بسیاری از آن‌ها بسته‌های IP جعلی را اصلاً محدود نمی‌نمایند.

-S IP_Address (جعل آدرس مبدا)

در برخی شرایط، ممکن است Nmap نتواند آدرس مبدا شما را تعیین کند (Nmap در این صورت به شما اطلاع خواهد داد). در این وضعیت، از -S همراه با آدرس IP رابطی که می‌خواهید بسته‌ها را از طریق آن ارسال کنید استفاده نمایید.

کاربرد احتمالی دیگر این فلگ جعل هویت پویش است تا اهداف فکر کنند شخص دیگری در حال پویش آن‌ها است. تصور کنید یک شرکت مکرراً توسط یک رقیب مورد پویش درگاه قرار گیرد! گزینه -e و -Pn عموماً برای این نوع استفاده مورد نیاز هستند. توجه داشته باشید که شما معمولاً بسته‌های پاسخ را دریافت نخواهید کرد (آن‌ها به IP که در حال جعل آن هستید ارسال می‌شوند)، بنابراین Nmap گزارش‌های مفیدی تولید نخواهد کرد.

-e interface (استفاده از رابط مشخص‌شده)

به Nmap می‌گوید بسته‌ها را از طریق کدام رابط ارسال و دریافت کند. نرم‌افزار Nmap باید بتواند این را به طور خودکار تشخیص دهد، اما در صورت عدم توانایی به شما خواهد گفت.

--source-port portnumber؛ -g portnumber (جعل شماره درگاه مبدا)

یکی از پیکربندی‌های نادرست و به طرز شگفت‌آوری رایج، اعتماد به ترافیک صرفاً بر اساس شماره درگاه مبدا است. درک اینکه چگونه این اتفاق می‌افتد آسان است: مدیری یک فایروال جدید و براق را راه‌اندازی می‌کند، فقط برای اینکه با سیل شکایات کاربران ناسپاسی مواجه شود که برنامه‌هایشان از کار افتاده است. به ویژه، DNS ممکن است خراب شود زیرا پاسخ‌های UDP DNS از سرورهای خارجی دیگر نمی‌توانند وارد شبکه شوند. پروتکل FTP نمونه رایج دیگری است؛ در انتقال‌های فعال FTP، سرور راه دور تلاش می‌کند تا اتصالی را به کلاینت برای انتقال فایل درخواستی برقرار کند.

راه‌حل‌های امنی برای این مشکلات وجود دارد، اغلب به شکل پروکسی‌های سطح برنامه یا ماژول‌های فایروال تجزیه‌کننده پروتکل. متأسفانه راه‌حل‌های آسان‌تر و ناامنی نیز وجود دارد. با توجه به اینکه پاسخ‌های DNS از درگاه ۵۳ و FTP فعال از درگاه ۲۰ می‌آیند، بسیاری از مدیران در این دام افتاده‌اند که صرفاً اجازه ترافیک ورودی از آن درگاه‌ها را بدهند. آن‌ها اغلب فرض می‌کنند که هیچ مهاجمی متوجه چنین حفره‌های فایروالی نخواهد شد و از آن‌ها سوءاستفاده نخواهد کرد. در موارد دیگر، مدیران این را یک اقدام موقت می‌دانند تا زمانی که بتوانند یک راه‌حل امن‌تر را پیاده‌سازی کنند، و سپس ارتقای امنیتی را فراموش می‌کنند.

مدیران شبکه با حجم کاری بالا تنها کسانی نیستند که در این دام می‌افتند؛ محصولات متعددی با این قوانین ناامن عرضه شده‌اند. حتی مایکروسافت نیز مقصر بوده است. فیلترهای IPsec که با ویندوز ۲۰۰۰ و ویندوز XP عرضه شدند شامل یک قانون ضمنی هستند که تمام ترافیک TCP یا UDP را از درگاه ۸۸ (Kerberos) مجاز می‌دانند. در یک مورد شناخته‌شده دیگر، نسخه‌های فایروال شخصی Zone Alarm تا نسخه 2.1.25 اجازه هرگونه بسته ورودی UDP با درگاه مبدا ۵۳ (DNS) یا ۶۷ (DHCP) را می‌دادند.

نرم‌افزار Nmap گزینه‌های -g و --source-port (آن‌ها معادل هستند) را برای سوءاستفاده از این نقاط ضعف ارائه می‌دهد. به سادگی یک شماره درگاه ارائه دهید و Nmap در صورت امکان بسته‌ها را از آن درگاه ارسال خواهد کرد. بیشتر عملیات‌های پویش که از سوکت‌های خام استفاده می‌کنند، از جمله پویش‌های SYN و UDP، این گزینه را به طور کامل پشتیبانی می‌کنند. این گزینه به طور قابل توجهی برای هر عملیاتی که از سوکت‌های معمولی سیستم‌عامل استفاده می‌کند، از جمله درخواست‌های DNS، پویش TCP connect، تشخیص نسخه و پویش اسکریپت تأثیری ندارد. تنظیم درگاه مبدا برای تشخیص سیستم‌عامل نیز کار نمی‌کند، زیرا Nmap باید از شماره درگاه‌های مختلفی برای کارکرد صحیح آزمایش‌های خاص تشخیص سیستم‌عامل استفاده کند.

--data hex string (افزودن داده‌های باینری سفارشی به بسته‌های ارسالی)

این گزینه به شما امکان می‌دهد داده‌های باینری را به عنوان بار داده در بسته‌های ارسالی بگنجانید. رشته هگز hex string می‌تواند در هر یک از قالب‌های زیر مشخص شود: 0xAABBCCDDEEFF...، AABBCCDDEEFF... یا \xAA\xBB\xCC\xDD\xEE\xFF.... نمونه‌های استفاده عبارتند از --data 0xdeadbeef و --data \xCA\xFE\x09. توجه داشته باشید که اگر عددی مانند 0x00ff را مشخص کنید، هیچ تبدیل ترتیب بایتی (byte-order) انجام نمی‌شود. مطمئن شوید که اطلاعات را با ترتیب بایتی مورد انتظار گیرنده مشخص می‌کنید.

--data-string string (افزودن رشته سفارشی به بسته‌های ارسالی)

این گزینه به شما اجازه می‌دهد یک رشته معمولی را به عنوان بار داده در بسته‌های ارسالی بگنجانید. متن string می‌تواند شامل هر رشته‌ای باشد. با این حال، توجه داشته باشید که برخی از کاراکترها ممکن است به زبان محلی سیستم شما وابسته باشند و گیرنده ممکن است اطلاعات مشابه را نبیند. همچنین، مطمئن شوید که رشته را در دابل‌کوتیشن قرار داده و نویسه‌های ویژه را از پوسته اسکیپ می‌کنید. مثال‌ها: --data-string "Scan conducted by Security Ops, extension 7192" یا --data-string "Ph34r my l33t skills". به خاطر داشته باشید که بعید است کسی نظرات باقی‌مانده توسط این گزینه را ببیند مگر اینکه شبکه را با یک اسنیفر یا قوانین سفارشی IDS به دقت مانیتور کند.

--data-length number (افزودن داده‌های تصادفی به بسته‌های ارسالی)

معمولاً Nmap بسته‌های حداقلی را فقط شامل یک هدر ارسال می‌کند. بنابراین بسته‌های TCP آن معمولاً ۴۰ بایت و درخواست‌های echo در ICMP تنها ۲۸ بایت هستند. برخی از درگاه‌های UDP و پروتکل‌های IP به طور پیش‌فرض یک بار داده سفارشی دریافت می‌کنند. این گزینه به Nmap می‌گوید که تعداد بایت‌های تصادفی داده‌شده را به بیشتر بسته‌های ارسالی اضافه کند و از هیچ بار داده مخصوص پروتکل استفاده نکند. (از --data-length 0 برای عدم استفاده از بارهای داده تصادفی یا مخصوص پروتکل استفاده کنید.) بسته‌های تشخیص سیستم‌عامل (-O) تحت تأثیر قرار نمی‌گیرند زیرا دقت در آنجا نیازمند ثبات کاوشگر است، اما بیشتر بسته‌های پینگ و پویش درگاه از این ویژگی پشتیبانی می‌کنند. این کار سرعت را کمی کاهش می‌دهد، اما می‌تواند یک پویش را کمی کمتر جلب توجه کننده کند.

--ip-options R|S [route]|L [route]|T|U ... ؛ --ip-options hex string (ارسال بسته‌ها با گزینه‌های مشخص‌شده IP)

پروتکل IP[12] چندین گزینه ارائه می‌دهد که ممکن است در هدرهای بسته قرار گیرند. بر خلاف گزینه‌های همه‌جا‌حاضر TCP، گزینه‌های IP به دلیل مسائل عملی و امنیتی به ندرت دیده می‌شوند. در واقع، بسیاری از مسیریاب‌های اینترنتی خطرناک‌ترین گزینه‌ها مانند مسیریابی مبدا (source routing) را مسدود می‌کنند. با این حال، گزینه‌ها همچنان می‌توانند در برخی موارد برای تعیین و دستکاری مسیر شبکه به ماشین‌های هدف مفید باشند. برای مثال، ممکن است بتوانید از گزینه ثبت مسیر (record route) برای تعیین مسیری به یک هدف استفاده کنید حتی زمانی که رویکردهای سنتی‌تر به سبک traceroute شکست می‌خورند. یا اگر بسته‌های شما توسط یک فایروال خاص دور انداخته می‌شوند، ممکن است بتوانید با گزینه‌های مسیریابی مبدا سخت‌گیرانه یا انعطاف‌پذیر مسیر متفاوتی را مشخص کنید.

قدرتمندترین راه برای مشخص کردن گزینه‌های IP این است که مقادیر را به عنوان آرگومان به --ip-options ارسال کنید. قبل از هر عدد هگزادسیمال عبارت \x و سپس دو رقم را قرار دهید. می‌توانید با قرار دادن یک ستاره بعد از کاراکترها و سپس تعداد دفعاتی که می‌خواهید تکرار شوند، نویسه‌های خاصی را تکرار کنید. برای مثال، \x01\x07\x04\x00*36\x01 یک رشته هگز حاوی ۳۶ بایت NUL است.

نرم‌افزار Nmap همچنین یک سازوکار میانبر برای مشخص کردن گزینه‌ها ارائه می‌دهد. کافی است حرف R، T، یا U را به ترتیب برای درخواست record-route، record-timestamp یا هر دو گزینه با هم ارسال کنید. مسیریابی مبدا انعطاف‌پذیر یا سخت‌گیرانه را می‌توان با یک L یا S مشخص کرد که به دنبال آن یک فاصله و سپس فهرستی از آدرس‌های IP جداشده با فاصله قرار دارد.

اگر مایلید گزینه‌ها را در بسته‌های ارسالی و دریافتی مشاهده کنید، گزینه --packet-trace را مشخص نمایید. برای کسب اطلاعات بیشتر و مشاهده مثال‌هایی از استفاده از گزینه‌های IP با Nmap، به نشانی https://seclists.org/nmap-dev/2006/q3/52 مراجعه کنید.

--ttl value (تنظیم فیلد زمان حیات IP)

فیلد زمان حیات (time-to-live) پروتکل IPv4 را در بسته‌های ارسالی روی مقدار داده‌شده تنظیم می‌کند.

--randomize-hosts (تصادفی‌سازی ترتیب میزبان‌های هدف)

به Nmap می‌گوید هر گروه تا ۱۶٬۳۸۴ میزبان را قبل از پویش آن‌ها مخلوط و تصادفی کند. این کار می‌تواند پویش‌ها را برای سیستم‌های مختلف مانیتورینگ شبکه کمتر آشکار سازد، به خصوص زمانی که آن را با گزینه‌های زمان‌بندی کند ترکیب می‌کنید. اگر می‌خواهید روی اندازه‌های گروه بزرگ‌تر تصادفی‌سازی انجام دهید، مقدار PING_GROUP_SZ را در nmap.h افزایش دهید و دوباره کامپایل کنید. یک راه حل جایگزین این است که فهرست IP هدف را با یک پویش فهرستی (-sL -n -oN filename) تولید کنید، آن را با یک اسکریپت Perl تصادفی نمایید، سپس کل فهرست را با -iL به Nmap ارائه دهید.

--spoof-mac MAC address, prefix, or vendor name (جعل آدرس MAC)

از Nmap می‌خواهد از آدرس MAC داده‌شده برای تمام فریم‌های اترنت خامی که ارسال می‌کند استفاده کند. این گزینه مستلزم --send-eth است تا اطمینان حاصل شود که Nmap واقعاً بسته‌های سطح اترنت را ارسال می‌کند. آدرس MAC داده‌شده می‌تواند چندین قالب داشته باشد: اگر صرفاً عدد 0 باشد، Nmap یک آدرس MAC کاملاً تصادفی را برای نشست انتخاب می‌کند. اگر رشته داده‌شده تعداد زوجی از ارقام هگزادسیمال باشد (با جفت‌هایی که به صورت اختیاری با دونقطه جدا شده‌اند)، Nmap از آن‌ها به عنوان MAC استفاده خواهد کرد. اگر کمتر از ۱۲ رقم هگزادسیمال ارائه شود، Nmap باقی‌مانده شش بایت را با مقادیر تصادفی پر می‌کند. اگر آرگومان صفر یا یک رشته هگز نباشد، Nmap در nmap-mac-prefixes جستجو می‌کند تا یک نام سازنده حاوی رشته داده‌شده را پیدا کند (به حروف کوچک و بزرگ حساس نیست). در صورت یافتن تطبیق، Nmap از OUI سازنده (پیشوند سه‌بایتی) استفاده کرده و سه بایت باقی‌مانده را به صورت تصادفی پر می‌کند. مثال‌های معتبر از آرگومان‌های --spoof-mac عبارتند از Apple، 0، 01:02:03:04:05:06، deadbeefcafe، 0020F2 و Cisco. این گزینه فقط بر پویش‌های بسته خام مانند پویش SYN یا تشخیص سیستم‌عامل تأثیر می‌گذارد، نه بر ویژگی‌های اتصال‌گرا مانند تشخیص نسخه یا موتور اسکریپت‌نویسی Nmap.

--proxies فهرست آدرس‌های URL پروکسی جداشده با کاما (رله اتصالات TCP از طریق زنجیره‌ای از پروکسی‌ها)

از Nmap می‌خواهد اتصالات TCP را با هدف نهایی از طریق زنجیره ارائه‌شده از یک یا چند پروکسی HTTP یا SOCKS4 برقرار کند. پروکسی‌ها می‌توانند به پنهان کردن منبع واقعی پویش یا دور زدن برخی محدودیت‌های فایروال کمک کنند، اما می‌توانند با افزایش تاخیر، کارایی پویش را مختل نمایند. کاربران ممکن است نیاز داشته باشند زمان‌های وقفه Nmap و سایر پارامترهای پویش را متناسب با آن تنظیم کنند. به ویژه، مقدار کمتر برای --max-parallelism ممکن است کمک‌کننده باشد زیرا برخی از پروکسی‌ها از پذیرش اتصالات همزمان به اندازه‌ای که Nmap به طور پیش‌فرض باز می‌کند خودداری می‌نمایند.

این گزینه فهرستی از پروکسی‌ها را به عنوان آرگومان می‌پذیرد که به صورت URL در قالب proto://host:port بیان می‌شوند. برای جدا کردن URLهای گره‌ها در یک زنجیره از کاما استفاده کنید. هنوز هیچ احراز هویتی پشتیبانی نمی‌شود. پروتکل‌های معتبر عبارتند از HTTP و SOCKS4.

هشدار: این ویژگی هنوز در حال توسعه است و محدودیت‌هایی دارد. این ویژگی در کتابخانه nsock پیاده‌سازی شده است و بنابراین هیچ تأثیری بر مراحل پینگ، پویش درگاه و کشف سیستم‌عامل در یک پویش ندارد. تاکنون تنها NSE و پویش نسخه از این گزینه بهره‌مند می‌شوند—سایر ویژگی‌ها ممکن است آدرس واقعی شما را فاش کنند. اتصالات SSL هنوز پشتیبانی نمی‌شوند، و همچنین تحلیل DNS در سمت پروکسی نیز پشتیبانی نمی‌شود (نام‌های میزبان همیشه توسط خود Nmap تحلیل می‌شوند).

--badsum (ارسال بسته‌ها با مجموع‌های مقابله‌ای جعلی TCP/UDP)

از Nmap می‌خواهد از یک مجموع مقابله‌ای (checksum) نامعتبر TCP، UDP یا SCTP برای بسته‌های ارسالی به میزبان‌های هدف استفاده کند. از آنجا که تقریباً تمام پشته‌های IP میزبان این بسته‌ها را به درستی دور می‌اندازند، هر پاسخی که دریافت شود احتمالاً از یک فایروال یا IDS می‌آید که زحمت بررسی checksum را به خود نداده است. برای جزئیات بیشتر در مورد این تکنیک، به نشانی https://nmap.org/p60-12.html مراجعه کنید.

--adler32 (استفاده از الگوریتم منسوخ‌شده Adler32 به جای CRC32C برای مجموع‌های مقابله‌ای SCTP)

از Nmap می‌خواهد از الگوریتم منسوخ‌شده Adler32 برای محاسبه مجموع مقابله‌ای SCTP استفاده کند. اگر --adler32 داده نشود، از CRC-32C (Castagnoli) استفاده می‌شود. سند RFC 2960[13] در ابتدا Adler32 را به عنوان الگوریتم checksum برای SCTP تعریف کرد؛ سند RFC 4960[6] بعداً مجموع مقابله‌ای SCTP را بازتعریف کرد تا از CRC-32C استفاده کند. پیاده‌سازی‌های فعلی SCTP باید از CRC-32C استفاده کنند، اما برای برانگیختن پاسخ‌ها از پیاده‌سازی‌های قدیمی و موروثی SCTP، ممکن است استفاده از Adler32 ارجح باشد.

هر ابزار امنیتی تنها به اندازه خروجی که تولید می‌کند مفید است. آزمایش‌ها و الگوریتم‌های پیچیده اگر به شیوه‌ای سازمان‌یافته و قابل درک ارائه نشوند، ارزش چندانی ندارند. با توجه به روش‌های متعددی که Nmap توسط افراد و سایر نرم‌افزارها استفاده می‌شود، هیچ قالب واحدی نمی‌تواند رضایت همه را جلب کند. بنابراین Nmap چندین قالب ارائه می‌دهد، از جمله حالت تعاملی برای خواندن مستقیم توسط انسان و XML برای تجزیه آسان توسط نرم‌افزارها.

علاوه بر ارائه قالب‌های مختلف خروجی، Nmap گزینه‌هایی را برای کنترل پرگویی (verbosity) خروجی و همچنین پیام‌های اشکال‌زدایی (debugging) فراهم می‌کند. انواع خروجی ممکن است به خروجی استاندارد یا به فایل‌های نام‌گذاری‌شده ارسال شوند که Nmap می‌تواند خروجی جدید را به آن‌ها اضافه کرده یا روی آن‌ها بازنویسی کند. فایل‌های خروجی همچنین می‌توانند برای از سرگیری پویش‌های متوقف‌شده استفاده شوند.

نرم‌افزار Nmap خروجی را در پنج قالب مختلف در دسترس قرار می‌دهد. قالب پیش‌فرض خروجی تعاملی (interactive output) نام دارد و به خروجی استاندارد (stdout) ارسال می‌شود. همچنین خروجی عادی (normal output) وجود دارد که شبیه به خروجی تعاملی است با این تفاوت که اطلاعات و هشدارهای کمتری را در زمان اجرا نمایش می‌دهد، زیرا انتظار می‌رود پس از اتمام پویش به جای زمان اجرا مورد تجزیه و تحلیل قرار گیرد.

خروجی XML یکی از مهم‌ترین انواع خروجی است، زیرا می‌تواند به HTML تبدیل شود، به راحتی توسط برنامه‌هایی مانند رابط‌های گرافیکی Nmap تجزیه شود، یا به پایگاه‌های داده وارد گردد.

دو نوع خروجی باقی‌مانده عبارتند از خروجی قابل گرپ (grepable output) ساده که بیشتر اطلاعات یک میزبان هدف را در یک خط قرار می‌دهد، و خروجی اسکریپت‌کید (sCRiPt KiDDi3 0utPUt) برای کاربرانی که خود را حرفه‌ای می‌دانند.

در حالی که خروجی تعاملی پیش‌فرض است و هیچ گزینه خط فرمانی به آن اختصاص داده نشده است، چهار گزینه دیگر از ساختار یکسانی استفاده می‌کنند. آن‌ها یک آرگومان دریافت می‌کنند که همان نام فایلی است که نتایج باید در آن ذخیره شوند. می‌توان چندین قالب را مشخص کرد، اما هر قالب را فقط یک بار می‌توان مشخص نمود. برای مثال، ممکن است بخواهید خروجی عادی را برای بررسی شخصی خود ذخیره کنید در حالی که XML همان پویش را برای تحلیل برنامه‌نویسی ذخیره می‌نمایید. می‌توانید این کار را با گزینه‌های -oX myscan.xml -oN myscan.nmap انجام دهید. در حالی که این فصل از نام‌های ساده‌ای مانند myscan.xml برای اختصار استفاده می‌کند، به طور کلی نام‌های توصیفی‌تر توصیه می‌شوند. نام‌های انتخاب‌شده به سلیقه شخصی بستگی دارد، اگرچه من از نام‌های طولانی استفاده می‌کنم که شامل تاریخ پویش و یک یا دو کلمه در توصیف پویش است و در دایرکتوری به نام شرکتی که پویش می‌کنم قرار می‌گیرد.

در حالی که این گزینه‌ها نتایج را در فایل‌ها ذخیره می‌کنند، Nmap همچنان طبق معمول خروجی تعاملی را به stdout چاپ می‌کند. برای مثال، دستور nmap -oX myscan.xml target خروجی XML را در myscan.xml چاپ می‌کند و خروجی استاندارد را با همان نتایج تعاملی پر می‌کند که در صورت عدم مشخص کردن -oX چاپ می‌کرد. می‌توانید این رفتار را با ارسال یک علامت خط تیره (-) به عنوان آرگومان به یکی از انواع قالب تغییر دهید. این امر باعث می‌شود Nmap خروجی تعاملی را غیرفعال کند و در عوض نتایج را با قالبی که مشخص کرده‌اید به جریان خروجی استاندارد چاپ کند. بنابراین دستور nmap -oX - target فقط خروجی XML را به stdout ارسال خواهد کرد. خطاهای جدی ممکن است همچنان به جریان معمول خطا، stderr، چاپ شوند.

بر خلاف برخی آرگومان‌های Nmap، فاصله بین فلگ گزینه فایل لاگ (مانند -oX) و نام فایل یا خط تیره اجباری است. اگر فلگ‌ها را حذف کنید و آرگومان‌هایی مانند -oG- یا -oXscan.xml بدهید، یک ویژگی سازگاری عقروعقب Nmap باعث ایجاد فایل‌های خروجی در قالب عادی به نام‌های G- و Xscan.xml به ترتیب خواهد شد.

تمام این آرگومان‌ها از تبدیل‌های شبیه به strftime در نام فایل پشتیبانی می‌کنند. عبارت‌های %H، %M، %S، %m، %d، %y و %Y همگی دقیقاً همانند strftime هستند. %T همان %H%M%S، %R همان %H%M و %D همان %m%d%y است. یک % به همراه هر نویسه دیگری صرفاً همان نویسه را تولید می‌کند (%% یک علامت درصد به شما می‌دهد). بنابراین -oX 'scan-%T-%D.xml' از یک فایل XML با نامی به شکل scan-144840-121307.xml استفاده خواهد کرد.

نرم‌افزار Nmap همچنین گزینه‌هایی را برای کنترل پرگویی پویش و افزودن به انتهای فایل‌های خروجی به جای بازنویسی روی آن‌ها ارائه می‌دهد. تمام این گزینه‌ها در زیر شرح داده شده‌اند.

قالب‌های خروجی Nmap

-oN filespec (خروجی عادی)

درخواست می‌کند که خروجی عادی به نام فایل داده‌شده هدایت شود. همان‌طور که در بالا بحث شد، این حالت کمی با خروجی تعاملی متفاوت است.

-oX filespec (خروجی XML)

درخواست می‌کند که خروجی XML به نام فایل داده‌شده هدایت شود. نرم‌افزار Nmap شامل یک تعریف نوع سند (DTD) است که به تجزیه‌کننده‌های XML اجازه می‌دهد تا خروجی XML مربوط به Nmap را اعتبارسنجی کنند. اگرچه در درجه اول برای استفاده برنامه‌نویسی در نظر گرفته شده است، اما می‌تواند به انسان‌ها نیز در تفسیر خروجی XML در Nmap کمک کند. این DTD عناصر معتبر قالب را تعریف می‌کند و اغلب ویژگی‌ها و مقادیری را که می‌توانند بگیرند برمی‌شمارد. آخرین نسخه همیشه از نشانی https://svn.nmap.org/nmap/docs/nmap.dtd در دسترس است.

قالب XML یک فرمت پایدار ارائه می‌دهد که به راحتی توسط نرم‌افزارها تجزیه می‌شود. تجزیه‌کننده‌های رایگان XML برای تمام زبان‌های اصلی رایانه‌ای، از جمله C/C++، Perl، Python و Java در دسترس هستند. حتی بایندرهایی برای اکثر این زبان‌ها نوشته شده است تا خروجی و اجرای Nmap را به طور خاص مدیریت کنند. نمونه‌هایی از این دست عبارتند از Nmap::Scanner[14] و Nmap::Parser[15] در Perl CPAN. تقریباً در تمام مواردی که یک برنامه کاربردی با Nmap تعامل دارد، XML قالب ترجیحی است.

خروجی XML به یک شیوه‌نامه XSL ارجاع می‌دهد که می‌تواند برای قالب‌بندی نتایج به صورت HTML استفاده شود. ساده‌ترین راه برای استفاده از این قابلیت، باز کردن خروجی XML در یک مرورگر وب مانند فایرفاکس است. به طور پیش‌فرض، این کار به دلیل مسیر فایل‌سیستمی ثابت nmap.xsl فقط روی ماشینی که Nmap را روی آن اجرا کرده‌اید (یا ماشینی با پیکربندی مشابه) کار خواهد کرد. از گزینه‌های --webxml یا --stylesheet برای ایجاد فایل‌های قابل حمل XML استفاده کنید که در هر ماشین متصل به وب به صورت HTML رندر می‌شوند.

-oS filespec (خروجی اسکریپت‌کید)

خروجی اسکریپت‌کید شبیه به خروجی تعاملی است، با این تفاوت که برای مطابقت بهتر با هکرهای خودنما که پیش از این به دلیل بزرگ‌نویسی و املای صحیح Nmap آن را تحقیر می‌کردند، بازپردازش شده است. افراد فاقد حس شوخ‌طبعی باید توجه داشته باشند که این گزینه اسکریپت‌کیدها را مسخره می‌کند قبل از اینکه مرا به خاطر ادعای “کمک به آن‌ها” مورد انتقاد قرار دهند.

-oG filespec (خروجی قابل گرپ)

این قالب خروجی در آخر پوشش داده شده است زیرا منسوخ شده است. قالب خروجی XML بسیار قدرتمندتر است و تقریباً به همان اندازه برای کاربران باتجربه راحت است. ساختار XML استانداردی است که ده‌ها تجزیه‌کننده عالی برای آن وجود دارد، در حالی که خروجی قابل گرپ یک هک ساده شخصی است. ساختار XML برای پشتیبانی از ویژگی‌های جدید Nmap به هنگام انتشار قابل گسترش است، در حالی که من اغلب باید آن ویژگی‌ها را از خروجی قابل گرپ به دلیل کمبود فضا برای قرار دادن آن‌ها حذف کنم.

با این حال، خروجی قابل گرپ هنوز کاملاً محبوب است. این قالبی ساده است که هر میزبان را در یک خط فهرست می‌کند و می‌تواند به سادگی با ابزارهای استاندارد یونیکس مانند grep، awk، cut، sed، diff و Perl جستجو و تجزیه شود. حتی من معمولاً از آن برای آزمایش‌های موردی که در خط فرمان انجام می‌شوند استفاده می‌کنم. پیدا کردن تمام میزبان‌هایی که درگاه SSH آن‌ها باز است یا سولاریس اجرا می‌کنند، تنها با یک دستور ساده grep برای شناسایی میزبان‌ها و ارسال پایپ به دستور awk یا cut برای چاپ فیلدهای مورد نظر انجام می‌شود.

خروجی قابل گرپ شامل خطوط توضیحات (خطوطی که با علامت پوند (#) شروع می‌شوند) و خطوط هدف است. یک خط هدف شامل ترکیبی از شش فیلد برچسب‌دار است که با تب جدا شده و با یک دونقطه پایان می‌یابند. این فیلدها عبارتند از: Host، Ports، Protocols، Ignored State، OS، Seq Index، IP ID و Status.

مهم‌ترین این فیلدها معمولاً Ports است که جزئیات مربوط به هر درگاه جالب‌توجه را ارائه می‌دهد. این فیلد یک فهرست جداشده با کاما از ورودی‌های درگاه است. هر ورودی درگاه نشان‌دهنده یک درگاه جالب‌توجه است و به شکل هفت زیرفیلد جداشده با اسلش (/) درمی‌آید. آن زیرفیلدها عبارتند از: شماره درگاه (Port number)، وضعیت (State)، پروتکل (Protocol)، مالک (Owner)، سرویس (Service)، اطلاعات SunRPC و اطلاعات نسخه (Version info).

مانند خروجی XML، این صفحه راهنما اجازه مستندسازی کل قالب را نمی‌دهد. نگاهی دقیق‌تر به قالب خروجی قابل گرپ Nmap در نشانی https://nmap.org/book/output-formats-grepable-output.html در دسترس است.

-oA basename (خروجی به تمام قالب‌ها)

به عنوان یک راحتی، می‌توانید -oA basename را مشخص کنید تا نتایج پویش را به طور همزمان در قالب‌های عادی، XML و قابل گرپ ذخیره کند. آن‌ها به ترتیب در basename.nmap، basename.xml و basename.gnmap ذخیره می‌شوند. مانند اکثر برنامه‌ها، می‌توانید مسیر دایرکتوری را به نام فایل‌ها اضافه کنید، مانند ~/nmaplogs/foocorp/ در یونیکس یا c:\hacking\sco در ویندوز.

گزینه‌های پرگویی و اشکال‌زدایی

-v (افزایش سطح پرگویی)، -vlevel (تنظیم سطح پرگویی)

سطح پرگویی را افزایش می‌دهد و باعث می‌شود Nmap اطلاعات بیشتری را درباره پویش در حال انجام چاپ کند. درگاه‌های باز به محض پیدا شدن نشان داده می‌شوند و برآوردهای زمان اتمام زمانی که Nmap فکر می‌کند یک پویش بیش از چند دقیقه طول می‌کشد ارائه می‌شوند. از آن دو بار یا بیشتر برای پرگویی بیشتر استفاده کنید: -vv، یا یک سطح پرگویی را مستقیماً بدهید، برای مثال -v3.

بیشتر تغییرات فقط بر خروجی تعاملی تأثیر می‌گذارند و برخی نیز بر خروجی عادی و خروجی اسکریپت‌کید تأثیر دارند. سایر انواع خروجی برای پردازش توسط ماشین‌ها در نظر گرفته شده‌اند، بنابراین Nmap می‌تواند به طور پیش‌فرض جزئیات قابل توجهی را در آن قالب‌ها بدون خسته کردن کاربر انسانی ارائه دهد. با این حال، تغییرات کمی در حالت‌های دیگر وجود دارد که در آن‌ها می‌توان اندازه خروجی را با حذف برخی جزئیات به میزان قابل توجهی کاهش داد. برای مثال، یک خط کامنت در خروجی قابل گرپ که فهرستی از تمام درگاه‌های پویش‌شده را ارائه می‌دهد فقط در حالت پرگویی چاپ می‌شود زیرا می‌تواند بسیار طولانی باشد.

-d (افزایش سطح اشکال‌زدایی)، -dlevel (تنظیم سطح اشکال‌زدایی)

هنگامی که حتی حالت پرگویی داده‌های کافی را برای شما فراهم نمی‌کند، اشکال‌زدایی برای سرازیر کردن داده‌های بسیار بیشتر در دسترس است! همانند گزینه پرگویی (-v)، اشکال‌زدایی با یک فلگ خط فرمان (-d) فعال می‌شود و سطح اشکال‌زدایی را می‌توان با چندین بار مشخص کردن آن افزایش داد، مانند -dd، یا با تنظیم مستقیم یک سطح. برای مثال، -d9 سطح ۹ را تنظیم می‌کند. این بالاترین سطح موثر است و هزاران خط تولید خواهد کرد مگر اینکه یک پویش بسیار ساده با تعداد بسیار کمی درگاه و هدف را اجرا کنید.

خروجی اشکال‌زدایی زمانی مفید است که به وجود باگی در Nmap مشکوک شوید، یا اگر صرفاً در مورد اینکه Nmap چه کاری و چرا انجام می‌دهد گیج شده‌اید. از آنجا که این ویژگی بیشتر برای توسعه‌دهندگان در نظر گرفته شده است، خطوط دیباگ همیشه خودتوضیح نیستند. ممکن است چیزی شبیه به این دریافت کنید: Timeout vals: srtt: -1 rttvar: -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. اگر خطی را متوجه نمی‌شوید، تنها راه‌های چاره شما نادیده گرفتن آن، جستجوی آن در کد منبع یا درخواست کمک از لیست توسعه (nmap-dev) است. برخی از خطوط واضح و خودتوضیح هستند، اما با افزایش سطح دیباگ، پیام‌ها مبهم‌تر می‌شوند.

--reason (دلایل وضعیت میزبان و درگاه)

دلیل قرار گرفتن هر درگاه در یک وضعیت خاص و دلیل فعال یا غیرفعال بودن هر میزبان را نشان می‌دهد. این گزینه نوع بسته‌ای را که وضعیت درگاه یا میزبان را تعیین کرده است نمایش می‌دهد. برای مثال، یک بسته RST از یک درگاه بسته یا یک پاسخ echo از یک میزبان فعال. اطلاعاتی که Nmap می‌تواند ارائه دهد بر اساس نوع پویش یا پینگ تعیین می‌شود. پویش SYN و پینگ SYN (-sS و -PS) بسیار دقیق هستند، اما پویش TCP connect (-sT) با پیاده‌سازی فراخوانی سیستمی connect محدود شده است. این ویژگی به طور خودکار توسط گزینه اشکال‌زدایی (-d) فعال می‌شود و نتایج در فایل‌های لاگ XML ذخیره می‌شوند حتی اگر این گزینه مشخص نشده باشد.

--stats-every time (چاپ دوره‌ای آمار زمان‌بندی)

به صورت دوره‌ای پیام وضعیت زمان‌بندی را پس از هر بازه زمانی time چاپ می‌کند. زمان از نوع مشخص‌شده در بخش “زمان‌بندی و کارایی” است؛ بنابراین برای مثال، از --stats-every 10s برای دریافت به‌روزرسانی وضعیت در هر ۱۰ ثانیه استفاده کنید. به‌روزرسانی‌ها در خروجی تعاملی (صفحه نمایش) و خروجی XML چاپ می‌شوند.

--packet-trace (ردیابی بسته‌ها و داده‌های ارسالی و دریافتی)

باعث می‌شود Nmap خلاصه‌ای از هر بسته ارسالی یا دریافتی را چاپ کند. این قابلیت اغلب برای اشکال‌زدایی استفاده می‌شود، اما روشی ارزشمند برای کاربران جدید است تا دقیقاً بفهمند Nmap در پس‌زمینه چه می‌کند. برای جلوگیری از چاپ هزاران خط، ممکن است بخواهید تعداد محدودی از درگاه‌ها را برای پویش مشخص کنید، مانند -p20-30. اگر فقط به فعالیت‌های زیرسیستم تشخیص نسخه اهمیت می‌دهید، به جای آن از --version-trace استفاده کنید. اگر فقط به ردیابی اسکریپت اهمیت می‌دهید، --script-trace را مشخص کنید. با --packet-trace، همه موارد بالا را دریافت می‌کنید.

--open (نمایش فقط درگاه‌های باز (یا احتمالاً باز))

گاهی اوقات فقط به درگاه‌هایی اهمیت می‌دهید که واقعاً می‌توانید به آن‌ها متصل شوید (درگاه‌های باز)، و نمی‌خواهید نتایج با درگاه‌های بسته (closed)، فیلترشده (filtered) و بسته|فیلترشده (closed|filtered) شلوغ شوند. سفارشی‌سازی خروجی معمولاً پس از پویش با استفاده از ابزارهایی مانند grep، awk و Perl انجام می‌شود، اما این ویژگی به دلیل درخواست‌های بسیار زیاد اضافه شد. گزینه --open را مشخص کنید تا فقط میزبان‌هایی با حداقل یک درگاه open، open|filtered یا unfiltered را ببینید و فقط درگاه‌های موجود در آن وضعیت‌ها را مشاهده نمایید. با این سه وضعیت دقیقاً همانند حالت عادی رفتار می‌شود، به این معنی که اگر تعداد زیادی از آن‌ها وجود داشته باشد، ممکن است open|filtered و unfiltered در قالب شمارش خلاصه شوند.

از Nmap 7.40 به بعد، گزینه --open مستلزم --defeat-rst-ratelimit است، زیرا آن گزینه فقط بر درگاه‌های closed و filtered تأثیر می‌گذارد که توسط --open پنهان می‌شوند.

--iflist (فهرست رابط‌ها و مسیرها)

فهرست رابط‌های شبکه و مسیرهای سیستم را همان‌طور که توسط Nmap شناسایی شده‌اند چاپ کرده و خارج می‌شود. این گزینه برای اشکال‌زدایی مشکلات مسیریابی یا تشخیص اشتباه دستگاه (مانند رفتار Nmap با یک اتصال PPP به عنوان اترنت) مفید است.

گزینه‌های متفرقه خروجی

--append-output (افزودن به انتهای فایل‌های خروجی به جای بازنویسی)

هنگامی که یک نام فایل را به یک فلگ قالب خروجی مانند -oX یا -oN اختصاص می‌دهید، آن فایل به طور پیش‌فرض بازنویسی می‌شود. اگر ترجیح می‌دهید محتوای موجود فایل حفظ شود و نتایج جدید به آن اضافه گردد، گزینه --append-output را مشخص کنید. سپس تمام نام فایل‌های خروجی مشخص‌شده در آن اجرای Nmap به جای بازنویسی، به انتهای فایل اضافه می‌شوند. این کار برای داده‌های پویش XML (-oX) به خوبی کار نمی‌کند زیرا فایل حاصل به طور کلی تا زمانی که آن را به صورت دستی اصلاح نکنید به درستی تجزیه نمی‌شود.

--resume filename (از سرگیری پویش لغوشده)

برخی از اجراهای گسترده Nmap زمان بسیار زیادی می‌برند—در حد چندین روز. چنین پویش‌هایی همیشه تا انتها اجرا نمی‌شوند. محدودیت‌ها ممکن است مانع از اجرای Nmap در ساعات کاری شوند، ممکن است شبکه قطع شود، ماشینی که Nmap روی آن اجرا می‌شود ممکن است دچار راه‌اندازی مجدد برنامه‌ریزی‌شده یا برنامه‌ریزی‌نشده شود، یا خود Nmap ممکن است دچار خطا گردد. مدیری که Nmap را اجرا می‌کند ممکن است به هر دلیل دیگری نیز با فشردن ctrl-C آن را لغو کند. راه‌اندازی مجدد کل پویش از ابتدا ممکن است نامطلوب باشد. خوشبختانه، اگر فایل‌های خروجی پویش نگهداری شده باشند، کاربر می‌تواند از Nmap بخواهد که پویش را با هدفی که هنگام توقف اجرا روی آن کار می‌کرد از سر بگیرد. به سادگی گزینه --resume را مشخص کنید و فایل خروجی را به عنوان آرگومان آن ارسال نمایید. هیچ آرگومان دیگری مجاز نیست، زیرا Nmap فایل خروجی را تجزیه می‌کند تا از همان آرگومان‌های مشخص‌شده قبلی استفاده کند. کافی است Nmap را به صورت nmap --resume logfilename فراخوانی کنید. نرم‌افزار Nmap نتایج جدید را به فایل‌های داده مشخص‌شده در اجرای قبلی اضافه می‌کند. پویش‌ها را می‌توان از هر یک از ۳ قالب اصلی خروجی از سر گرفت: عادی، قابل گرپ یا XML.

--noninteractive (غیرفعال‌سازی تعاملات در زمان اجرا)

در مواقعی، مانند اجرای Nmap در پس‌زمینه پوسته، ممکن است نظارت و پاسخ Nmap به ورودی صفحه‌کلید کاربر در حین اجرا نامطلوب باشد (ببینید بخش “تعامل در زمان اجرا” درباره نحوه کنترل Nmap در طول پویش). از گزینه --noninteractive برای جلوگیری از در دست گرفتن کنترل ترمینال توسط Nmap استفاده کنید.

--stylesheet path or URL (تنظیم شیوه‌نامه XSL برای تبدیل خروجی XML)

نرم‌افزار Nmap به همراه یک شیوه‌نامه XSL به نام nmap.xsl برای مشاهده یا ترجمه خروجی XML به HTML ارائه می‌شود. خروجی XML شامل یک دستورالعمل xml-stylesheet است که به nmap.xml در جایی که در ابتدا توسط Nmap نصب شده بود اشاره می‌کند. فایل XML را از طریق یک پردازشگر XSLT مانند xsltproc[16] اجرا کنید تا یک فایل HTML تولید شود. باز کردن مستقیم فایل XML در مرورگر دیگر به خوبی کار نمی‌کند زیرا مرورگرهای مدرن مکان‌هایی را که یک شیوه‌نامه ممکن است از آن‌ها بارگذاری شود محدود می‌کنند. اگر می‌خواهید از شیوه‌نامه متفاوتی استفاده کنید، آن را به عنوان آرگومان به --stylesheet مشخص کنید. شما باید مسیر کامل یا URL را ارسال نمایید. یک فراخوانی رایج به صورت --stylesheet https://nmap.org/svn/docs/nmap.xsl است. این به یک پردازشگر XSLT می‌گوید که آخرین نسخه شیوه‌نامه را از Nmap.Org بارگذاری کند. گزینه --webxml همین کار را با تایپ و حفظ کردن کمتر انجام می‌دهد. بارگذاری XSL از Nmap.Org مشاهده نتایج را روی ماشینی که Nmap (و در نتیجه nmap.xsl) روی آن نصب نشده است آسان‌تر می‌کند. بنابراین URL اغلب مفیدتر است، اما مکان محلی سیستم‌فایل nmap.xsl به دلایل حفظ حریم خصوصی به طور پیش‌فرض استفاده می‌شود.

--webxml (بارگذاری شیوه‌نامه از Nmap.Org)

این یک گزینه راحتی است و چیزی بیش از یک نام مستعار برای --stylesheet https://nmap.org/svn/docs/nmap.xsl نیست.

--no-stylesheet (حذف اعلان شیوه‌نامه XSL از XML)

این گزینه را برای جلوگیری از پیوند دادن هرگونه شیوه‌نامه XSL با خروجی XML توسط Nmap مشخص کنید. دستورالعمل xml-stylesheet حذف می‌شود.

این بخش برخی از گزینه‌های مهم (و نه‌چندان مهم) را توصیف می‌کند که واقعاً در هیچ بخش دیگری جای نمی‌گیرند.

-6 (فعال‌سازی پویش IPv6)

نرم‌افزار Nmap برای محبوب‌ترین ویژگی‌های خود از IPv6 پشتیبانی می‌کند. پویش پینگ، پویش درگاه، تشخیص نسخه و موتور اسکریپت‌نویسی Nmap همگی از IPv6 پشتیبانی می‌نمایند. ساختار دستور مانند معمول است با این تفاوت که شما گزینه -6 را نیز اضافه می‌کنید. البته، اگر به جای نام میزبان یک آدرس را مشخص کنید، باید از ساختار IPv6 استفاده نمایید. یک آدرس ممکن است شبیه به 3ffe:7501:4819:2000:210:f3ff:fe03:14d0 باشد، بنابراین استفاده از نام میزبان توصیه می‌شود. خروجی شبیه به همیشه به نظر می‌رسد، و آدرس IPv6 در خط “interesting ports” تنها نشانه‌ای است که ماهیت IPv6 را مشخص می‌کند.

اگرچه IPv6 دقیقاً جهان را درنوردیده است، اما در برخی کشورها (معمولاً آسیایی) کاربرد قابل توجهی دارد و بیشتر سیستم‌عامل‌های مدرن از آن پشتیبانی می‌کنند. برای استفاده از Nmap با IPv6، هم مبدا و هم هدف پویش شما باید برای IPv6 پیکربندی شده باشند. اگر ارائه‌دهنده خدمات اینترنت شما (مانند بیشتر آن‌ها) آدرس‌های IPv6 را به شما اختصاص نمی‌دهد، کارگزارهای تونل رایگان به طور گسترده در دسترس هستند و با Nmap به خوبی کار می‌کنند. من از سرویس رایگان کارگزار تونل IPv6 در http://www.tunnelbroker.net استفاده می‌کنم. سایر کارگزارهای تونل در ویکی‌پدیا فهرست شده‌اند[17]. تونل‌های 6to4 رویکرد رایگان و محبوب دیگری هستند.

در ویندوز، پویش‌های سوکت خام IPv6 فقط در دستگاه‌های اترنت (نه تونل‌ها) و فقط در ویندوز ویستا و نسخه‌های بعدی پشتیبانی می‌شوند. در شرایط دیگر از گزینه --unprivileged استفاده کنید.

-A (گزینه‌های پویش تهاجمی)

این گزینه قابلیت‌های پیشرفته و تهاجمی اضافی را فعال می‌کند. در حال حاضر این گزینه تشخیص سیستم‌عامل (-O)، پویش نسخه (-sV)، پویش اسکریپت (-sC) و ردیابی مسیر (--traceroute) را فعال می‌نماید. ممکن است در آینده ویژگی‌های بیشتری اضافه شود. هدف این است که یک مجموعه جامع از گزینه‌های پویش را بدون نیاز به حفظ کردن تعداد زیادی فلگ فعال کند. با این حال، از آنجا که پویش اسکریپت با مجموعه پیش‌فرض نفوذی تلقی می‌شود، نباید از -A در برابر شبکه‌های هدف بدون اجازه استفاده کنید. این گزینه فقط ویژگی‌ها را فعال می‌کند، نه گزینه‌های زمان‌بندی (مانند -T4) یا گزینه‌های پرگویی (-v) که ممکن است به آن‌ها نیز نیاز داشته باشید. گزینه‌هایی که نیاز به دسترسی ممتاز دارند (مانند دسترسی root) مانند تشخیص سیستم‌عامل و traceroute تنها در صورتی فعال می‌شوند که آن امتیازات در دسترس باشند.

--datadir directoryname (مشخص کردن مکان سفارشی فایل‌های داده Nmap)

نرم‌افزار Nmap برخی از داده‌های ویژه را در زمان اجرا در فایل‌هایی با نام‌های nmap-service-probes، nmap-services، nmap-protocols، nmap-rpc، nmap-mac-prefixes و nmap-os-db به دست می‌آورد. اگر مکان هر یک از این فایل‌ها (با استفاده از گزینه‌های --servicedb یا --versiondb) مشخص شده باشد، از آن مکان برای آن فایل استفاده می‌شود. پس از آن، Nmap این فایل‌ها را در دایرکتوری مشخص‌شده با گزینه --datadir (در صورت وجود) جستجو می‌کند. هر فایلی که در آنجا یافت نشود، در دایرکتوری مشخص‌شده توسط متغیر محیطی NMAPDIR جستجو می‌شود. مکان بعدی ~/.nmap برای UIDهای واقعی و مؤثر است؛ یا در ویندوز، HOME\AppData\Roaming\nmap (که در آن HOME دایرکتوری خانگی کاربر است، مانند C:\Users\user). به دنبال آن مکان فایل اجرایی nmap و همان مکان با افزودن ../share/nmap قرار دارد. سپس یک مکان کامپایل‌شده مانند /usr/local/share/nmap یا /usr/share/nmap.

--servicedb services file (مشخص کردن فایل سفارشی سرویس‌ها)

از Nmap می‌خواهد به جای فایل داده nmap-services که همراه با Nmap ارائه می‌شود، از فایل سرویس‌های مشخص‌شده استفاده کند. استفاده از این گزینه همچنین باعث می‌شود یک پویش سریع (-F) استفاده شود. برای اطلاعات بیشتر در مورد فایل‌های داده Nmap به توضیحات --datadir مراجعه کنید.

--versiondb service probes file (مشخص کردن فایل سفارشی کاوشگرهای سرویس)

از Nmap می‌خواهد به جای فایل داده nmap-service-probes که همراه با Nmap ارائه می‌شود، از فایل کاوشگرهای سرویس مشخص‌شده استفاده کند. برای اطلاعات بیشتر در مورد فایل‌های داده Nmap به توضیحات --datadir مراجعه نمایید.

--send-eth (استفاده از ارسال در سطح اترنت خام)

از Nmap می‌خواهد بسته‌ها را در لایه اترنت خام (پیوند داده) ارسال کند نه لایه بالاتر IP (شبکه). به طور پیش‌فرض، Nmap موردی را انتخاب می‌کند که به طور کلی برای پلتفرمی که روی آن اجرا می‌شود بهترین است. سوکت‌های خام (لایه IP) به طور کلی برای ماشین‌های یونیکس کارآمدترین هستند، در حالی که فریم‌های اترنت برای عملکرد ویندوز مورد نیاز است زیرا مایکروسافت پشتیبانی از سوکت خام را غیرفعال کرده است. نرم‌افزار Nmap علیرغم این گزینه، زمانی که چاره دیگری وجود نداشته باشد (مانند اتصالات غیراترنت) همچنان از بسته‌های خام IP در یونیکس استفاده می‌کند.

--send-ip (ارسال در سطح IP خام)

از Nmap می‌خواهد بسته‌ها را از طریق سوکت‌های خام IP ارسال کند تا اینکه فریم‌های سطح پایین‌تر اترنت را بفرستد. این گزینه مکمل گزینه --send-eth است که قبلاً مورد بحث قرار گرفت.

--privileged (فرض بر این که کاربر کاملاً دارای دسترسی ممتاز است)

به Nmap می‌گوید صرفاً فرض کند که به اندازه کافی دارای دسترسی ممتاز است تا ارسال‌های سوکت خام، شنود بسته (packet sniffing) و عملیات‌های مشابه را که معمولاً در سیستم‌های یونیکس نیاز به دسترسی ریشه (root) دارند انجام دهد. به طور پیش‌فرض اگر چنین عملیاتی درخواست شود اما geteuid صفر نباشد، Nmap خارج می‌شود. گزینه --privileged همراه با قابلیت‌های هسته لینوکس (capabilities) و سیستم‌های مشابهی که ممکن است برای اجازه دادن به کاربران بدون امتیاز جهت انجام پویش‌های بسته خام پیکربندی شده باشند مفید است. مطمئن شوید که این فلگ گزینه را قبل از هر فلگی برای گزینه‌هایی که نیاز به امتیاز دارند (پویش SYN، تشخیص سیستم‌عامل و غیره) قرار می‌دهید. متغیر محیطی NMAP_PRIVILEGED ممکن است به عنوان یک جایگزین معادل برای --privileged تنظیم شود.

--unprivileged (فرض بر این که کاربر فاقد دسترسی سوکت خام است)

این گزینه برعکس --privileged است. به Nmap می‌گوید با کاربر طوری رفتار کند که گویی فاقد امتیازات سوکت خام شبکه و شنود است. این گزینه برای آزمایش، اشکال‌زدایی یا زمانی که عملکرد شبکه خام سیستم‌عامل شما به نوعی خراب شده است مفید است. متغیر محیطی NMAP_UNPRIVILEGED ممکن است به عنوان یک جایگزین معادل برای --unprivileged تنظیم شود.

--release-memory (آزادسازی حافظه قبل از خروج)

این گزینه فقط برای اشکال‌زدایی نشت حافظه مفید است. باعث می‌شود Nmap حافظه تخصیص‌یافته را درست قبل از خروج آزاد کند تا نشت‌های واقعی حافظه راحت‌تر تشخیص داده شوند. به طور معمول Nmap از این کار صرف‌نظر می‌کند زیرا سیستم‌عامل به هر حال پس از خاتمه فرآیند این کار را انجام می‌دهد.

-V؛ --version (چاپ شماره نسخه)

شماره نسخه Nmap را چاپ کرده و خارج می‌شود.

-h؛ --help (چاپ صفحه خلاصه راهنما)

یک صفحه راهنمای کوتاه با رایج‌ترین فلگ‌های دستور را چاپ می‌کند. اجرای Nmap بدون هیچ آرگومانی همین کار را انجام می‌دهد.

در حین اجرای Nmap، تمام کلیدهای فشرده‌شده ضبط می‌شوند. این کار به شما امکان می‌دهد بدون لغو و راه‌اندازی مجدد برنامه با آن تعامل داشته باشید. برخی کلیدهای ویژه گزینه‌ها را تغییر می‌دهند، در حالی که هر کلید دیگری یک پیام وضعیت را چاپ می‌کند که جزئیات پویش را به شما می‌گوید. قرارداد این است که حروف کوچک مقدار چاپ را افزایش می‌دهند، و حروف بزرگ مقدار چاپ را کاهش می‌دهند. همچنین می‌توانید ‘?’ را برای دریافت راهنما فشار دهید.

v / V

افزایش / کاهش سطح پرگویی (verbosity)

d / D

افزایش / کاهش سطح اشکال‌زدایی (debugging)

p / P

روشن / خاموش کردن ردیابی بسته (packet tracing)

?

چاپ صفحه راهنمای تعامل در زمان اجرا

هر کلید دیگر

چاپ یک پیام وضعیت مانند این:
Stats: 0:00:07 elapsed; 20 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 33.33% done; ETC: 20:57 (0:00:12 remaining)

در اینجا چند مثال از کاربرد Nmap، از موارد ساده و روزمره تا مواردی کمی پیچیده‌تر و خاص‌تر آورده شده است. برخی از آدرس‌های IP و نام‌های دامنه واقعی برای ملموس‌تر شدن مسائل استفاده شده‌اند. به جای آن‌ها باید آدرس‌ها/نام‌های مربوط به شبکه خودتان را جایگزین کنید. در حالی که من فکر نمی‌کنم پویش درگاه سایر شبکه‌ها غیرقانونی باشد یا باید غیرقانونی باشد، برخی از مدیران شبکه از پویش‌های ناخواسته شبکه‌های خود استقبال نمی‌کنند و ممکن است شکایت کنند. گرفتن مجوز از قبل بهترین رویکرد است.

برای اهداف آزمایشی، شما اجازه دارید میزبان scanme.nmap.org را پویش کنید. این مجوز فقط شامل پویش از طریق Nmap است و شامل آزمایش اکسپلویت‌ها یا حملات منع سرویس نمی‌شود. برای حفظ پهنای باند، لطفاً روزانه بیش از دوازده پویش علیه آن میزبان آغاز نکنید. اگر از این سرویس هدف پویش رایگان سوءاستفاده شود، غیرفعال خواهد شد و Nmap خطای Failed to resolve given hostname/IP: scanme.nmap.org را گزارش خواهد داد. این مجوزها همچنین برای میزبان‌های scanme2.nmap.org، scanme3.nmap.org و غیره اعمال می‌شود، اگرچه این میزبان‌ها در حال حاضر وجود ندارند.

nmap -v scanme.nmap.org

این دستور تمام درگاه‌های رزروشده TCP را روی ماشین scanme.nmap.org پویش می‌کند. گزینه -v حالت پرگویی را فعال می‌نماید.

nmap -sS -O scanme.nmap.org/24

یک پویش مخفی SYN را در برابر هر ماشینی که از میان ۲۵۶ IP در شبکه با اندازه /24 که Scanme در آن قرار دارد فعال است آغاز می‌کند. همچنین سعی می‌کند تعیین کند چه سیستم‌عاملی روی هر میزبانی که بالا و فعال است اجرا می‌شود. این دستور به دلیل پویش SYN و تشخیص سیستم‌عامل به امتیازات دسترسی ریشه (root) نیاز دارد.

nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127

شمارش میزبان و یک پویش TCP را در نیمه اول هر یک از ۲۵۵ زیرشبکه هشت‌بیتی ممکن در فضای آدرس 198.116.0.0/16 آغاز می‌کند. این دستور بررسی می‌کند که آیا سیستم‌ها SSH، DNS، POP3 یا IMAP را روی درگاه‌های استاندارد خود اجرا می‌کنند یا هر چیزی روی درگاه ۴۵۶۴ اجرا می‌شود. برای هر یک از این درگاه‌ها که باز یافت شوند، از تشخیص نسخه برای تعیین برنامه در حال اجرا استفاده می‌شود.

nmap -v -iR 100000 -Pn -p 80

از Nmap می‌خواهد ۱۰۰٬۰۰۰ میزبان را به صورت تصادفی انتخاب کرده و آن‌ها را برای وب‌سرورها (درگاه ۸۰) پویش کند. شمارش میزبان با -Pn غیرفعال شده است زیرا ارسال اولیه چند کاوشگر برای تعیین فعال بودن میزبان زمانی که به هر حال فقط یک درگاه را روی هر میزبان هدف کاوش می‌کنید، بیهوده است.

nmap -Pn -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20

این دستور ۴۰۹۶ آدرس IP را برای هرگونه وب‌سرور (بدون پینگ کردن آن‌ها) پویش می‌کند و خروجی را در قالب‌های قابل گرپ و XML ذخیره می‌نماید.

در حالی که این راهنما تمام گزینه‌های اساسی Nmap را با جزئیات شرح می‌دهد، نمی‌تواند به طور کامل نحوه به‌کارگیری آن ویژگی‌ها را برای حل سریع وظایف در دنیای واقعی نشان دهد. برای این منظور، ما کتاب Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning را منتشر کردیم. موضوعات شامل براندازی فایروال‌ها و سامانه‌های تشخیص نفوذ، بهینه‌سازی کارایی Nmap، و خودکارسازی کارهای معمول شبکه با موتور اسکریپت‌نویسی Nmap است. نکات و دستورالعمل‌هایی برای کارهای معمول Nmap مانند موجودی‌برداری شبکه، آزمایش نفوذ، تشخیص نقاط دسترسی بی‌سیم سرکش، و سرکوب شیوع کرم‌های شبکه ارائه شده است. مثال‌ها و نمودارها ارتباطات واقعی را روی خط نشان می‌دهند. بیش از نیمی از کتاب به صورت آنلاین و رایگان در دسترس است. برای اطلاعات بیشتر به https://nmap.org/book مراجعه کنید.

نرم‌افزار Nmap مانند نویسنده‌اش کامل و بی‌نقص نیست. اما شما می‌توانید با ارسال گزارش‌های باگ یا حتی نوشتن وصله‌ها به بهتر شدن آن کمک کنید. اگر Nmap آن‌طور که انتظار دارید رفتار نمی‌کند، ابتدا به آخرین نسخه موجود در https://nmap.org ارتقا دهید. اگر مشکل همچنان ادامه داشت، کمی تحقیق کنید تا مشخص شود آیا قبلاً کشف و برطرف شده است یا خیر. سعی کنید مشکل یا پیام خطا را در گوگل جستجو کنید زیرا انجمن‌های بسیاری را تجمیع می‌کند. اگر نتیجه‌ای نگرفتید، یک گزارش اشکال (Issue) در سامانه ردیابی ما ایجاد کنید (http://issues.nmap.org) و/یا گزارش باگ را به <dev@nmap.org> ارسال نمایید. اگر قبل از ارسال پیام در لیست nmap-dev مشترک شوید، پیام شما از نظارت عبور کرده و سریع‌تر ارسال می‌شود. در https://nmap.org/mailman/listinfo/dev مشترک شوید. لطفاً هر آنچه را که در مورد مشکل متوجه شده‌اید، به همراه نسخه Nmap مورد استفاده و نسخه سیستم‌عاملی که روی آن اجرا می‌شود، قید کنید. سایر پیشنهادات برای بهبود Nmap نیز ممکن است به لیست پستی توسعه‌دهندگان Nmap ارسال شود.

اگر قادر به نوشتن وصله‌ای برای بهبود Nmap یا رفع باگ هستید، این بسیار بهتر است! دستورالعمل‌های ارسال وصله‌ها یا درخواست‌های ادغام گیت (Pull Request) در https://github.com/nmap/nmap/blob/master/CONTRIBUTING.md در دسترس است.

مسائل به ویژه حساس مانند گزارش‌های امنیتی ممکن است مستقیماً برای نویسنده Nmap، فیودور (Fyodor)، به نشانی <fyodor@nmap.org> ارسال شود. تمام گزارش‌ها و نظرات دیگر باید از لیست توسعه‌دهندگان یا سامانه ردیابی مشکلات استفاده کنند زیرا افراد بیشتری آن‌ها را می‌خوانند، دنبال می‌کنند و به آن‌ها پاسخ می‌دهند.

گوردون “فیودور” لیون (Gordon “Fyodor” Lyon) <fyodor@nmap.org> نرم‌افزار Nmap را در سال ۱۹۹۷ نوشت و منتشر کرد. از آن زمان، صدها نفر مشارکت‌های ارزشمندی داشته‌اند، همان‌طور که در فایل CHANGELOG توزیع‌شده با Nmap و همچنین در نشانی https://nmap.org/changelog.html به تفصیل آمده است. دیوید فایفیلد (David Fifield) و دانیل میلر (Daniel Miller) به خاطر مشارکت‌های عظیم چندساله خود شایسته قدردانی ویژه هستند!

پویشگر امنیتی Nmap تحت حق نشر (C) 1996–2022 متعلق به Nmap Software LLC ("The Nmap Project") است. همچنین Nmap یک علامت تجاری ثبت‌شده متعلق به The Nmap Project می‌باشد. این نرم‌افزار تحت مجوز منبع عمومی Nmap (NPSL)[18] منتشر شده است. این مجوز به طور کلی به کاربران نهایی اجازه می‌دهد Nmap را به صورت رایگان دانلود و استفاده کنند. اما اجازه نمی‌دهد Nmap در محصولات نرم‌افزاری یا سخت‌افزاری تجاری (از جمله تجهیزات سخت‌افزاری، ماشین‌های مجازی و برنامه‌های کاربردی سنتی) استفاده و بازتوزیع شود. ما بودجه پروژه را با فروش ویرایش ویژه Nmap OEM برای این منظور تأمین می‌کنیم، همان‌طور که در https://nmap.org/oem توضیح داده شده است. صدها فروشنده بزرگ و کوچک نرم‌افزار قبلاً مجوزهای OEM را خریداری کرده‌اند تا فناوری Nmap مانند کشف میزبان، پویش درگاه، تشخیص سیستم‌عامل، تشخیص نسخه و موتور اسکریپت‌نویسی Nmap را در محصولات خود تعبیه کنند.

پروژه Nmap اجازه بازتوزیع Npcap را دارد که یک درایور و کتابخانه ضبط بسته برای پلتفرم مایکروسافت ویندوز است. نرم‌افزار Npcap یک اثر جداگانه با مجوز مخصوص به خود به جای مجوز Nmap است. از آنجا که مجوز Npcap اجازه بازتوزیع بدون مجوز ویژه را نمی‌دهد، بسته‌های باینری ویندوز Nmap ما که حاوی Npcap هستند ممکن است بدون مجوز ویژه بازتوزیع نشوند.

اگرچه NPSL بر اساس GPLv2 است، اما حاوی مقررات متفاوتی است و مستقیماً سازگار نیست. این مجوز با برخی دیگر از مجوزهای متن‌باز نیز ناسازگار است. در برخی موارد ما می‌توانیم بخش‌هایی از Nmap را مجدداً مجوزدهی کنیم یا مجوزهای ویژه‌ای برای استفاده از آن در سایر نرم‌افزارهای متن‌باز اعطا نماییم. لطفاً برای هرگونه درخواست از این دست با fyodor@nmap.org تماس بگیرید. به طور مشابه، ما نرم‌افزارهای متن‌باز ناسازگار را بدون مجوز ویژه از دارندگان حق نشر در Nmap ادغام نمی‌کنیم.

اگر یک توافق‌نامه مجوز یا قرارداد کتبی برای Nmap (مانند یک مجوز Nmap OEM[19]) دریافت کرده‌اید که شرایطی غیر از این را بیان می‌کند، می‌توانید به جای آن، استفاده و بازتوزیع Nmap را تحت آن شرایط انتخاب کنید.

این راهنمای مرجع Nmap تحت حق نشر (C) 2005–2022 متعلق به Nmap Software LLC است. بدین وسیله تحت نسخه ۳.۰ از مجوز انتساب کریتیو کامنز (Creative Commons Attribution License)[20] قرار می‌گیرد. این به شما امکان می‌دهد تا زمانی که به منبع اصلی ارجاع می‌دهید، اثر را به دلخواه خود بازتوزیع و اصلاح کنید. متناوباً، می‌توانید با این سند به گونه‌ای رفتار کنید که گویی تحت همان مجوز خود Nmap قرار دارد (که قبلاً مورد بحث قرار گرفت).

کد منبع این نرم‌افزار ارائه شده است زیرا ما معتقدیم کاربران حق دارند قبل از اجرای یک برنامه دقیقاً بدانند که چه کاری انجام خواهد داد. این امر همچنین به شما امکان می‌دهد نرم‌افزار را برای حفره‌های امنیتی ممیزی کنید.

کد منبع همچنین به شما اجازه می‌دهد Nmap را به پلتفرم‌های جدید پورت کنید، باگ‌ها را برطرف سازید و ویژگی‌های جدیدی اضافه کنید. از شما بسیار تشویق می‌شود که تغییرات خود را به عنوان درخواست ادغام گیت‌هاب (PR) ارسال کنید یا آن‌ها را به <dev@nmap.org> برای ادغام احتمالی در توزیع اصلی بفرستید. با ارسال چنین تغییراتی، فرض بر این است که شما حق نامحدود و غیرانحصاری برای استفاده مجدد، اصلاح و مجوزدهی مجدد کد را به The Nmap Project واگذار می‌کنید. این امر مهم است زیرا ناتوانی در مجوزدهی مجدد کد باعث ایجاد مشکلات ویرانگری برای سایر پروژه‌های نرم‌افزار آزاد (مانند KDE و NASM) شده است. ما همچنین مجوزهای تجاری Nmap OEM[21] را می‌فروشیم. اگر مایلید شرایط مجوز ویژه‌ای را برای مشارکت‌های خود مشخص کنید، کافی است هنگام ارسال آن‌ها این موضوع را قید نمایید.

این برنامه به این امید که مفید باشد توزیع می‌شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی تجاری بودن یا مناسب بودن برای یک هدف خاص.

همچنین باید توجه داشت که Nmap گاهی اوقات باعث از کار افتادن برنامه‌هایی با نگارش ضعیف، پشته‌های TCP/IP و حتی سیستم‌عامل‌ها شده است. اگرچه این امر بسیار نادر است، اما توجه به آن مهم است. Nmap هرگز نباید در برابر سیستم‌های حساس و حیاتی اجرا شود مگر اینکه آماده پذیرش قطعی سرویس باشید. ما در اینجا اذعان می‌کنیم که Nmap ممکن است سیستم‌ها یا شبکه‌های شما را از کار بیندازد و از هرگونه مسئولیت در قبال خسارات یا مشکلاتی که Nmap می‌تواند ایجاد کند سلب مسئولیت می‌کنیم.

به دلیل خطر جزئی خرابی سیستم‌ها و به این دلیل که تعداد کمی از هکرهای کلاه‌سیاه مایلند از Nmap برای شناسایی قبل از حمله به سیستم‌ها استفاده کنند، مدیرانی هستند که وقتی سیستم آن‌ها پویش می‌شود ناراحت می‌شوند و ممکن است شکایت کنند. بنابراین، اغلب توصیه می‌شود قبل از انجام حتی یک پویش سبک شبکه، مجوز درخواست کنید.

نرم‌افزار Nmap هرگز نباید با امتیازات ویژه (مانند suid root) نصب شود. این کار یک آسیب‌پذیری امنیتی بزرگ ایجاد می‌کند زیرا سایر کاربران روی سیستم (یا مهاجمان) می‌توانند از آن برای ارتقای امتیاز استفاده کنند.

نرم‌افزار Nmap برای استفاده در محیط‌های خطرناک که نیازمند عملکرد بدون نقص و ضدخرابی (fail-safe) هستند و در آن‌ها نقص نرم‌افزار می‌تواند مستقیماً منجر به مرگ، آسیب شخصی یا آسیب‌های شدید فیزیکی یا محیطی شود، طراحی، ساخته یا در نظر گرفته نشده است.

این محصول شامل نرم‌افزارهایی است که توسط Bunyad نرم‌افزار آپاچی (Apache Software Foundation)[22] توسعه یافته است. نسخه اصلاح‌شده‌ای از کتابخانه ضبط بسته قابل حمل Libpcap[23] همراه با Nmap توزیع شده است. نسخه ویندوز Nmap به جای آن از کتابخانه Npcap[24] مشتق‌شده از Libpcap استفاده می‌کند. پشتیبانی از عبارت‌های باقاعده توسط کتابخانه PCRE[25] ارائه می‌شود که نرم‌افزاری متن‌باز است و توسط فیلیپ هیزل (Philip Hazel) نوشته شده است. برخی عملکردهای شبکه خام از کتابخانه شبکه Libdnet[26] استفاده می‌کنند که توسط داگ سانگ (Dug Song) نوشته شده است. نسخه اصلاح‌شده‌ای از آن با Nmap توزیع می‌شود. نرم‌افزار Nmap می‌تواند به صورت اختیاری با جعبه‌ابزار رمزنگاری OpenSSL[27] برای پشتیبانی از تشخیص نسخه SSL پیوند داده شود. موتور اسکریپت‌نویسی Nmap از یک نسخه تعبیه‌شده از زبان برنامه‌نویسی Lua[10] استفاده می‌کند. کتابخانه طبقه‌بندی خطی Liblinear[28] برای تکنیک‌های یادگیری ماشین تشخیص سیستم‌عامل IPv6[29] ما استفاده می‌شود.

تمام نرم‌افزارهای شخص ثالث شرح‌داده‌شده در این پاراگراف تحت مجوزهای نرم‌افزاری به سبک BSD به صورت رایگان قابل بازتوزیع هستند.

بسته‌های باینری برای ویندوز و Mac OS X شامل کتابخانه‌های پشتیبانی لازم برای اجرای Zenmap و Ndiff با پایتون و PyGTK هستند. (پلتفرم‌های یونیکس معمولاً نصب این کتابخانه‌ها را آسان می‌کنند، بنابراین بخشی از بسته‌ها نیستند). فهرستی از این کتابخانه‌های پشتیبانی و مجوزهای آن‌ها در فایل‌های LICENSES گنجانده شده است.

این نرم‌افزار تا حدی از طریق Google Summer of Code[30] و برنامه DARPA CINDER[31] (DARPA-BAA-10-84) پشتیبانی مالی شده است.

نرم‌افزار Nmap تنها زمانی از رمزنگاری استفاده می‌کند که با پشتیبانی اختیاری OpenSSL کامپایل شده و با OpenSSL پیوند داده شود. هنگامی که بدون پشتیبانی OpenSSL کامپایل شود، The Nmap Project معتقد است که Nmap مشمول کنترل صادرات مقررات مدیریت صادرات ایالات متحده (EAR)[32] نیست. به این ترتیب، هیچ ECCN (شماره طبقه‌بندی کنترل صادرات) قابل اعتمالی وجود ندارد و صادرات نیازی به مجوز خاص یا سایر مجوزهای دولتی ندارد.

هنگامی که با پشتیبانی OpenSSL کامپایل شود یا به صورت کد منبع توزیع گردد، The Nmap Project معتقد است که Nmap تحت شماره ECCN ایالات متحده به شرح 5D002[33] (“Information Security Software”) قرار می‌گیرد. ما Nmap را تحت استثنای TSU برای نرم‌افزارهای رمزنگاری در دسترس عموم تعریف‌شده در EAR 740.13(e)[34] توزیع می‌کنیم.

1.
Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning
2.
RFC 1122
3.
RFC 792
4.
RFC 950
5.
UDP
6.
SCTP
7.
TCP RFC
8.
RFC 959
9.
RFC 1323
10.
زبان برنامه‌نویسی Lua
11.
اولویت عملگرها
12.
پروتکل IP
13.
RFC 2960
14.
Nmap::Scanner
15.
Nmap::Parser
16.
xsltproc
17.
فهرست‌شده در ویکی‌پدیا
18.
مجوز منبع عمومی Nmap (NPSL)
19.
مجوز Nmap OEM
20.
مجوز انتساب کریتیو کامنز
21.
Nmap OEM
22.
بنیاد نرم‌افزار آپاچی (Apache Software Foundation)
23.
کتابخانه ضبط بسته قابل حمل Libpcap
24.
کتابخانه Npcap
25.
کتابخانه PCRE
26.
Libdnet
27.
جعبه‌ابزار رمزنگاری OpenSSL
28.
کتابخانه طبقه‌بندی خطی Liblinear
29.
تکنیک‌های یادگیری ماشین تشخیص سیستم‌عامل IPv6
30.
Google Summer of Code
31.
برنامه DARPA CINDER
https://www.fbo.gov/index?s=opportunity&mode=form&id=585e02a51f77af5cb3c9e06b9cc82c48&tab=core&_cview=1
32.
مقررات مدیریت صادرات (EAR)
33.
5D002
34.
EAR 740.13(e)
03/27/2026 Nmap