Host Discovering (Ricerca di host)

Uno dei primi passi in qualsiasi approccio di mappatura di una rete è quello di ridurre un intervallo di indirizzi IP (talvolta di notevoli dimensioni) ad una lista di host attivi o interessanti. Uno scan di ogni porta di ogni singolo indirizzo IP è lento e generalmente non necessario. Ovviamente ciò che rende un host interessante dipende in larga misura dalle motivazioni della scansione. Gli amministratori di rete possono essere interessati solo a host sui quali è in esecuzione uno specifico servizio, mentre chi fa auditing di sicurezza è più interessato a ogni singola periferica dotata di un indirizzo IP. Un sistemista può accontentarsi di semplici ping ICMP per trovare gli host sulla propria rete, ma un penetration tester esterno può dover usare un insieme di molti differenti probing (tentativi di scansione) per cercare di evitare le restrizioni imposte da un firewall.

Poiché le necessità di host discovering sono così diverse, Nmap offre una notevole varietà di opzioni per la customizzazione delle tecniche usate. Il semplice host discovery è spesso chiamato «ping scan», anche se va molto oltre il semplice pacchetto ICMP di tipo "echo request" associato al famoso strumento di ping. Un utente può evitare il passaggio per l'utility «ping» usando una List Scan (scansione di tipo lista: -sL) o disabilitando il ping (-Pn), oppure mettendo alla prova la rete usando combinazioni arbitrarie di probe TCP SYN/ACK, UDP e ICMP su differenti porte. Lo scopo di questi approcci è quello di sollecitare una risposta che dimostri l'esistenza di un host o di un dispositivo di rete con quell'indirizzo IP. In molte reti solo una piccola percentuale di indirizzi IP è attiva in ogni momento, specialmente negli spazi di indirizzamento privati previsti dall'RFC 1918 come ad esempio 10.0.0.0/8. Una rete di questo tipo ha 16 milioni di possibili IP, anche se è di uso comune in aziende con meno di un migliaio di macchine. L'host discovery può trovare queste macchine in un mare di indirizzi IP non consecutivi.

Se non viene fornita alcuna opzione di host discovery, Nmap manda di default ad ogni macchina obiettivo un pacchetto ICMP di tipo "echo request", un pacchetto TCP SYN alla porta 443, un pacchetto TCP ACK alla porta 80 e un pacchetto ICMP di tipo "timestamp request" (per IPv6, il pacchetto ICMP di tipo "timestamp request" viene escluso dato che non fa parte del ICMPv6). Questa default è l'equivalente delle opzioni -PE -PS443 -PA80 -PP. Eccezioni a questo comportamento sono le scansioni ARP (per IPv4) e Neighbor Discovery (per IPv6) che sono usate per tutti gli obiettivi in una rete ethernet locale. Se Nmap viene lanciato da un utente non privilegiato all'interno di un ambiente UNIX, i probe di default saranno pacchetti SYN alle porte 80 e 443 inviati mediante la chiamata di sistema connect. Questo tipo di host discovery è spesso sufficiente quando si deve effettuare una scansione su reti locali, anche se per un security auditing si raccomanda di usare un set di opzioni più avanzato.

L'opzione -P* (che permette di scegliere il tipo di ping) può essere combinata. Si possono inoltre aumentare le probabilità di bypassare firewall particolarmente restrittivi mandando molti tipi di probe diversi usando porte o flag TCP differenti e svariati codici ICMP. Inoltre si tenga presente che l'ARP/Neighbor Discovery (-PR) viene effettuata di default all'interno di una rete locale, anche se vengono specificate altre opzioni -P*, poiché è quasi sempre più veloce e più efficiente.

Di default, Nmap lancia un host discovery e in seguito un port scan su tutti gli host che sono online. Questo approccio viene tenuto anche quando si specificano metodi non standard per l'host discovery come i probe UDP (-PU). Si consulti la spiegazione per l'opzione -sn per sapere come effettuare solo host discovery; si usi -Pn per evitare l'host discovery e fare un portscan di tutti gli host di destinazione. Le seguenti opzioni controllano il comportamento dell'host discovery:

-sL (List Scan)

La List Scan è una forma banale di host discovery che semplicemente elenca ogni host delle reti specificate, senza inviare alcun pacchetto agli host obiettivo. Di default Nmap effettua una risoluzione inversa mediante DNS sugli host per ottenerne il nome completo. Spesso è sorprendente vedere quante informazioni utili possono fornire dei semplici hostname. Ad esempio, fw.chi è il nome del firewall di un'azienda di Chicago. Nmap mostra anche il numero totale di indirizzi IP alla fine della scansione. La lista scan è un buon controllo per essere sicuri di avere gli indirizzi IP corretti per la propria scansione. Se gli host mostrano nomi di dominio non conosciuti, vale la pena indagare oltre per evitare di scansionare la rete dell'azienda sbagliata.

Poiché l'idea è quella di stampare semplicemente una lista di obiettivi, le opzioni per funzionalità di livello più alto (come ad esempio il port scanning, le indagini sul tipo di sistema operativo in esecuzione o il ping scan) non possono essere combinate con questa. Se si vuole disabilitare il ping scan e mantenere allo stesso tempo la possibilità di utilizzare funzionalità di alto livello, si legga la sezione sull'opzione -Pn (No ping).

-sn (No port scan)

Questa opzione indica a Nmap di non effettuare un port scan dopo un host discovery e di mostrare gli host che hanno risposto. Quest'opzione è spesso conosciuta come «ping scan», ma si può anche richiedere il traceroute ed eseguire script host NSE. Quest'azione è un gradino più invadente della List Scan, e spesso può essere usata per lo stesso scopo. Essa permette una mappatura di una rete obiettivo senza attrarre molta attenzione. Sapere quanti host sono attivi è più utile ad un attaccante rispetto ad una semplice List Scan di ogni indirizzo IP e nome di host.

Gli amministratori di sistema trovano spesso questa opzione utile allo stesso modo. Può essere usata facilmente per enumerare le macchine disponibili in una rete o tenere sotto osservazione la disponibilità di un singolo server. Questo approccio viene anche chiamato «ping sweep», ed è più affidabile di un ping all'indirizzo broadcast poiché molti host non rispondono alle richieste di questa categoria.

L'opzione -sn invia di default un pacchetto ICMP di tipo "echo request", un pacchetto TCP SYN alla porta 443, un pacchetto TCP ACK alla porta 80 e un pacchetto ICMP di tipo "timestamp request". Quando viene eseguita da un utente non privilegiato, viene inviati solo i pacchetti SYN (usando la chiamata connect ) alle porte 80 e 443 dell'obiettivo. Quando invece un utente privilegiato prova ad effettuare una scansione all'interno di una rete locale, vengono usate richieste ARP a meno che non venga specificata l'opzione --send-ip. L'opzione -sn può essere usata in combinazione con qualsiasi tipo di discovery probe (ovvero la famiglia di opzioni -P*, tranne -Pn) per avere una migliore flessibilità. Se viene usato uno qualsiasi di questi probe con opzioni sul numero di porta, allora i probe di default vengono annullati. Si raccomanda di usare queste tecniche avanzate se ci sono dei firewall restrittivi tra l'host che lancia Nmap e le reti di destinazione, altrimenti le destinazioni potrebbero non essere raggiunte nel caso in cui il firewall dovesse bloccare i probe o le risposte a questi ultimi.

Nelle versioni precedenti di Nmap, l'opzione -sn era chiamata -sP.

-Pn (No ping)

Questa opzione evita del tutto il passaggio di ricerca degli host di Nmap. Normalmente Nmap usa questo passaggio per trovare le macchine attive da sottoporre ad una scansione più approfondita. Di default, Nmap esegue un probing approfondito (come ad esempio un port scan, una version detection dei servizi o un Operating System detection) solo sugli host che sono stati trovati attivi. Disabilitare l'host discovery attraverso l'opzione -Pn obbliga Nmap a tentare la scansione richiesta su tutti gli host destinazione specificati. Quindi se si specifica sulla linea di comando una rete di destinazione di classe B (in CIDR /16) verranno sottoposti a scansione tutti i 65.535 indirizzi IP. A differenza della List Scan (nel quale l'host discovery viene saltato) anziché interrompersi e mostrare la lista di destinazioni, Nmap continua ad eseguire le funzioni richieste come se ogni IP di destinazione fosse attivo. Per evitare sia un ping scan che un port scan, ma permettere l'esecuzione degli script NSE, utilizzare le due opzioni -Pn -sn insieme.

Per le macchine in una rete ethernet locale, la scansione ARP verrà ancora eseguita (a meno che siano specificate le opzioni --disable-arp-ping e --send-ip) in quanto Nmap necessita degli indirizzi fisici (MAC addresses) per ulteriori scansioni degli hosts. Nelle versioni precedenti di Nmap, -Pn era chiamata -P0 e -PN.

-PS <port list> (TCP SYN Ping)

Questa opzione invia un pacchetto TCP vuoto con il flag SYN attivo. La porta di destinazione di default è la 80 (configurabile durante la compilazione cambiando il parametro di define DEFAULT_TCP_PROBE_PORT nel file nmap.h), ma si possono specificare altre porte come parametro. La sintassi è la stessa dell'opzione -p tranne che gli indicatori del tipo di porta T: non sono permessi. Da notare che non ci devono essere spazi tra -PS e il numero di porta, ad esempio -PS22. Nel caso di più porte specificate, separate da virgola (ad esempio -PS22-25,80,113,1050,35000), si tenterà un probe verso ogni porta in parallelo.

Il flag SYN indica al sistema remoto che si sta tentando di stabilire una connessione. Normalmente la porta di destinazione dovrebbe essere chiusa, e un pacchetto di RST (reset) viene mandato indietro. Se la porta fosse aperta, il destinatario effettuerà il secondo passo della connessione TCP a tre vie (3-way-handshake) rispondendo con un pacchetto TCP SYN/ACK. La macchina che sta eseguendo Nmap interromperà la connessione inviando un pacchetto RST al posto di mandare l'usuale pacchetto ACK che completerebbe l'handshake e stabilirebbe una connessione completa. Il pacchetto RST viene mandato dal kernel della macchina che sta eseguendo Nmap, non da Nmap stesso.

A Nmap non interessa se la porta è aperta o chiusa. In ogni caso l'RST o il SYN/ACK ricevuti indicano che l'host è disponibile e risponde alle connessioni.

Nelle macchine UNIX solo l'utente privilegiato root generalmente è abilitato all'invio e alla ricezione di pacchetti TCP "raw" (non formattati, grezzi). Per quanto riguarda gli utenti non privilegiati si deve ricorrere alla chiamata di sistema connect, la quale viene lanciata su ogni porta di destinazione. Questo ha l'effetto di inviare pacchetti SYN all'host di destinazione come per stabilire una connessione. Se la connect restituisce rapidamente un messaggio di successo o un messaggio di errore ECONNREFUSED significa che lo stack TCP sottostante deve aver ricevuto un SYN/ACK o un RST e l'host viene marcato come disponibile. Se il tentativo di connessione viene lasciato in sospeso fino al raggiungimento di un certo timeout l'host è marcato come down o non disponibile.

-PA <portlist> (TCP ACK Ping)

Il ping TCP ACK è molto simile al ping SYN appena discusso. La differenza, come si può facilmente indovinare, consiste nel fatto che viene sollevato il flag TCP ACK al posto del SYN. Un tale pacchetto ACK finge di confermare dei dati inviati in una connessione TCP già stabilita, anche se tale connessione non esiste. In questo modo un host remoto risponderà sempre con un pacchetto RST, svelando così la propria esistenza e il fatto che siano attivi.

L'opzione -PA usa la stessa porta di default del SYN probe (ovvero la porta 80) e può ricevere in input un elenco di porte di destinazione nello stesso formato. Se un utente non privilegiato tenta quest'approccio si usa la scorciatoia della connect spiegata in precedenza. Questa scorciatoia non è ottimale perché in ogni caso la connect invia un pacchetto SYN e non un ACK.

La ragione per offrire entrambi i tipi di probe (SYN e ACK) è quella di massimizzare le possibilità di bypassare firewall. Molti amministratori configurano router e semplici firewall per bloccare pacchetti SYN in arrivo tranne quelli destinati a servizi pubblici come il sito web aziendale o il mail server. Questo impedisce ogni altro tipo di connessione in entrata garantendo al tempo stesso agli utenti di effettuare connessioni verso l'esterno senza incontrare ostacoli. Questo approccio "non-stateful" (per "non-stateful" si intende in questo caso la capacità di un firewall di tenere traccia delle connessioni che lo attraversano, NdT) utilizza poche risorse sul firewall/router ed è largamente supportato da filtri software e hardware. Il firewall di Linux conosciuto come Netfilter/iptables offre l'opzione --syn per implementare questo approccio "stateless". Quando un firewall implementa regole di questo tipo, un probe SYN (-PS) viene facilmente bloccato quando viene mandato ad una porta chiusa. In questi casi un probe ACK passerebbe indisturbato, come se non vi fossero quelle regole.

Un altro tipo comune di firewall utilizza regole "stateful" che lasciano cadere (drop) pacchetti non attesi. Questa caratteristica era inizialmente disponibile solo su firewall di fascia alta, anche se è diventata sempre più comune nel corso degli anni. Il sistema Netfilter/iptables la supporta mediante l'opzione --state, la quale marca pacchetti a seconda dello stato della connessione. Un probe SYN funzionerà più facilmente verso un tale sistema, poiché pacchetti ACK non attesi sono generalmente riconosciuti come non validi e lasciati cadere. Una soluzione a questa situazione poco piacevole è quella di inviare entrambe le tipologie di probe specificando le opzioni -PS e -PA.

-PU <portlist> (UDP Ping)

Un'altra opzione di host discovery è il ping UDP, la quale manda un pacchetto UDP alle porte indicate. Per molte porte, il pacchetto sarà vuoto, anche se utilizzare un payload specifico del protocollo aumentale probabilità di risposta. Vedi la sezione «UDP payloads: nmap-payloads» (https://nmap.org/book/nmap-payloads.html) per una descrizione del database dei payloads. Il contenuto del pacchetto può essere gestito con le opzioni --data, --data-string e --data-length.

L'elenco di porte va specificato nello stesso formato già discusso in precedenza nelle opzioni -PS e -PA. Se non si specifica alcuna porta viene usata la 40125 di default. Questo valore può essere impostato durante la compilazione cambiando il parametro DEFAULT_UDP_PROBE_PORT nel file nmap.h. Si usa di default una porta poco comune perché inviare dati ad una porta già aperta è spesso non desiderabile per questo tipo particolare di scansione.

Una volta raggiunta una porta UDP chiusa sulla macchina di destinazione, il probe UDP dovrebbe provocare un pacchetto ICMP di tipo "port unreachable" (porta irraggiungibile). Questo indica a Nmap che l'host è funzionante e disponibile. Altri tipi di pacchetti ICMP di errore, come ad esempio host o rete "unreachable" (non disponibile) o "TTL exceeded" (superato il tempo di vita del pacchetto) indicano un host non funzionante o irraggiungibile. Una mancanza di risposta viene interpretata alla stessa maniera. Se si raggiunge una porta aperta la maggior parte dei servizi semplicemente ignorano il pacchetto vuoto e non rimandano alcuna risposta. Questo spiega perché il probe di default è la porta 40125, la quale si usa molto raramente. Pochi servizi, tra i quali «chargen», rispondono a un pacchetto UDP vuoto, rivelando così a Nmap la disponibilità della macchina in questione.

Il vantaggio primario di questo tipo di scansione è che riesce a bypassare firewall e filtri che controllano solo pacchetti TCP. Ad esempio, una volta avevo un router a banda larga wireless Linksys BEFW11S4. L'interfaccia esterna di questa periferica filtrava tutte le porte TCP di default, ma i probe UDP provocavano messaggi di "Port unreachable" rivelando così l'esistenza del device.

-PY <port list> (SCTP INIT Ping)

Questa opzione invia un pacchetto SCTP contenente un INIT chunk minimale. La porta di destinazione di default è la 80 (configurabile durante la compilazione cambiando il valore di DEFAULT_SCTP_PROBE_PORT_SPEC nel file nmap.h). Altre porte possono essere specificate come parametro. La sintassi è la stessa dell'opzione -p tranne che gli indicatori del tipo di porta S: non sono permessi. Da notare che non ci devono essere spazi tra -PY e il numero di porta, ad esempio -PY22. Nel caso di più porte specificate, separate da virgola (ad esempio -PY22,80,179,5060), si tenterà un probe verso ogni porta in parallelo.

L'INIT chunk suggerisce al sistema remoto che stai tentando di stabilire un'associazione. Normalmente la porta di destinazione dovrebbe essere chiusa e un ABORT chunk verrà inviato come risposta. Se la porta invece dovesse essere aperta, l'obiettivo passerà al secondo step della connessione SCTP a quattro vie (four-way-handshake) rispondendo con un INIT-ACK chunk. Se la macchina che sta eseguendo Nmap ha la funzione di SCTP stack, abbatte l'associazione nascente rispondendo con un ABORT chunk invece che inviare un COOKIE-ECHO chunk, che sarebbe lo step successivo nel processo di associazione. Il pacchetto ABORT viene mandato dal kernel della macchina che sta eseguendo Nmap in risposta ad un INIT-ACK inaspettato, non da Nmap stesso.

Ad Nmap non interessa se la porta di destinazione risulta aperta o chiusa. Entrambi i pacchetti discussi in precedenza (ABORT e INIT-ACK) ricevuti in risposta, indicano ad Nmap che l'host è disponibile e risponde alle connessioni.

Sulle macchine Unix, solo l'utente privilegiato root generalmente è abilitato ad inviare e ricevere pacchetti SCTP "raw" (non formattati, grezzi). Usare SCTP INIT Pings (-PY) non è attualmente possibile per gli utenti non privilegiati.

-PE; -PP; -PM (ICMP Ping Types)

In aggiunta ai meno comuni tipi di host discovery TCP, UDP e SCTP discussi in precedenza, Nmap può anche mandare i pacchetti standard come il famoso programma ping. Nmap manda un pacchetto ICMP type 8 ("echo request") all'indirizzo IP di destinazione, aspettandosi un type 0 ("echo reply") di ritorno dagli host disponibili. Sfortunatamente per chi deve scoprire la topologia di una rete, molti host e firewall ora bloccano questo tipo di pacchetti anziché rispondere come richiesto dall'RFC 1122. Per questa ragione le scansioni basate solo su ICMP sono raramente abbastanza affidabili nei riguardi di destinazioni sconosciute su Internet. Tuttavia per i sistemisti di rete che devono tenere sotto controllo una rete interna, esse possono essere un approccio pratico ed efficiente. Si usi l'opzione -PE per abilitare questo comportamento di "echo request".

Mentre la "echo request" è la richiesta standard del ping ICMP, Nmap non si ferma qui. Gli standard ICMP (RFC 792 e RFC 950) specificano inoltre i pacchetti "timestamp request", "information request" e "address mask request" (rispettivamente "richiesta di timestamp", ovvero data e ora, "richiesta di informazioni" e "richiesta della maschera di rete") mediante i codici ICMP 13, 15 e 17. Dato che lo scopo dichiarato di questo tipo di richieste è quello di avere informazioni quali la maschera di rete e l'ora corrente, essi possono facilmente essere usati per l'host discovery. Un sistema che risponde è funzionante e disponibile. Nmap non implementa allo stato attuale pacchetti di "information request", poiché in genere non sono supportati comunemente. L'RFC 1122 specifica che «un host NON DOVREBBE implementare questi messaggi» (il maiuscolo negli RFC indica comportamenti precisi). Il timestamp (data e ora) e le richieste di maschera di rete possono essere inviate rispettivamente mediante le opzioni -PP e -PM. Una risposta di tipo timestamp (codice ICMP 14) o di tipo address mask (codice 18) rivela che un host è disponibile. Queste due richieste possono essere utili qualora un amministratore dovesse bloccare i pacchetti di "echo request" ma dimenticarsi che altre query ICMP possono essere usate per lo stesso scopo.

-PO <protocol list> (IP Protocol Ping)

Una delle nuove opzioni di host discovery è la IP Protocol Ping, la quale invia pacchetti IP con lo specifico numero di protocollo impostato nel loro IP header. La lista dei protocolli ha lo stesso formato della lista delle porte vista in precedenza nelle opzioni di host discovery TCP, UDP e SCTP. Se nessun protocollo viene specificato, di default vengono inviati pacchetti IP multipli per ICMP (protocollo 1), IGMP (protocollo 2) e IP-in-IP (protocollo 4). I protocolli di default possono essere configurati in fase di compilazione cambiando il valore di DEFAULT_PROTO_PROBE_PORT_SPEC nel file nmap.h. Si tenga presente che per i protocolli ICMP, IGMP, TCP (protocollo 6), UDP (protocollo 17) e SCTP (protocollo 132), i pacchetti vengono inviati con i loro opportuni headers mentre gli altri protocolli vengono inviati senza nessun dato aggiuntivo oltre all'IP header (a meno che non siano specificate le opzioni --data, --data-string o --data-length).

Questo metodo di host discovery cerca sia risposte utilizzando lo stesso protocollo di un probe, che messaggi "unreachable" utilizzando il protocollo ICMP, che significa che il protocollo non è supportato dall'host di destinazione. Entrambe le risposte indicano che l'obiettivo è attivo.

-PR (ARP Ping)

Una delle situazioni più comuni di utilizzo di Nmap è la scansione di una LAN ethernet. Nella maggior parte delle LAN, specialmente quelle in cui viene usato il benedetto intervallo di indirizzi privati specificato dall'RFC 1918, la maggior parte degli indirizzi IP è inutilizzato. Quando Nmap prova ad inviare pacchetti IP raw come le "echo request" ICMP, il sistema operativo deve determinare l'indirizzo hardware (ARP) corrispondente all'indirizzo IP di destinazione, in modo da poter indirizzare correttamente il frame ethernet. Questo è spesso lento e problematico, in quanto i sistemi operativi non sono stati scritti prevedendo di dover fare milioni di richieste ARP verso host inesistenti in un breve lasso di tempo.

L'ARP scan lascia a Nmap e ai suoi algoritmi ottimizzati l'incarico delle richieste ARP. Nel caso in cui si riceva una risposta, Nmap non si deve neanche preoccupare dei ping basati su IP perché a questo punto sa già che l'host è raggiungibile. Questo rende l'ARP scan molto veloce e molto più affidabile delle normali scansioni basate su IP. Infatti questo è il comportamento di default quando si deve effettuare uno scan su host che Nmap riconosce come presenti nella rete locale. Anche se vengono specificati differenti tipi di ping (come -PE o -PS), Nmap usa comunque ARP per ogni target che è sulla stessa LAN. Se non si vuole assolutamente un ARP scan, specificare l'opzione --disable-arp-ping.

Per IPv6 (opzione -6), -PR utilizza ICMPv6 Neighbor Discovery al posto di ARP. Neighbor Discovery, definito nell'RFC 4861, può essere visto come l'equivalente per IPv6 di ARP.

--disable-arp-ping (No ARP or ND Ping)

Nmap normalmente esegue un ARP o IPv6 Neighbor Discovery (ND) discovery degli host locali connessi ad una rete ethernet, anche se altre opzioni di host discovery, come -Pn o -PE, vengono utilizzate. Per disabilitare questo comportamento implicito, utilizzare l'opzione --disable-arp-ping.

Il comportamento di default è solitamente più veloce, ma quest'opzione è utile nelle reti che utilizzano un proxy ARP, nelle quali un router risponde in modo speculare a tutte le richieste ARP, facendo sembrare attivi tutti gli obiettivi di un ARP scan.

--traceroute (Trace path to host)

I traceroutes vengono eseguiti in fase di post-scan utilizzando informazioni provenienti dai risultati della scansione per determinare la porta e il protocollo che più probabilmente raggiungono l'obiettivo. Opera con tutte le tipologie di scansione tranne le connect scans (-sT) e le idle scans (-sI). Tutti i tracciamenti utilizzano il modello di timing dinamico ("dynamic timing model") di Nmap e vengono eseguiti in parallelo.

Traceroute lavora inviando pacchetti con un basso TTL (time-to-live) in attesa di ricevere un messaggio ICMP "Time Exceeded" dagli intermediari (hops) posti tra la macchina che esegue la scansione e l'host obiettivo. Le implementazioni standard di traceroute iniziano con un TTL settato a 1 e aumentano il TTL finché l'host di destinazione non viene raggiunto. I traceroute di Nmap iniziano con un alto TTL e lo diminuiscono fino ad arrivare a zero. Lavorare a ritroso consente ad Nmap di utilizzare intelligenti algoritmi di caching per velocizzare il tracciamento su più host. In media Nmap invia 5-10 pacchetti in meno per host, in base alle condizioni della rete. Se una singola subnet viene scansionate (ad esempio 192.168.0.0/24) Nmap potrebbe dover inviare solo due pacchetti per la maggior parte degli host.

-n (No DNS resolution)

Indica a Nmap di non effettuare mai una risoluzione inversa del nome mediante DNS sugli indirizzi IP rilevati. Poiché il DNS è spesso lento anche con il risolutore parallelo integrato di Nmap, questa opzione rende l'intero processo di scansione più veloce.

-R (DNS resolution for all targets)

Indica a Nmap di effettuare sempre la risoluzione inversa dei nomi mediante DNS sugli indirizzi IP rilevati. Generalmente la risoluzione inversa viene effettuata solo quando un host viene rilevato come attivo.

--system-dns (Use system DNS resolver)

Di default Nmap risolve gli indirizzi IP mandando richieste direttamente ai name servers (server dei nomi) configurati sulla macchina su cui è in esecuzione Nmap. Molte richieste (spesso nell'ordine delle dozzine) sono effettuate in parallelo per migliorare le performance. Si specifichi quest'opzione se si vuole usare il proprio DNS (richiedendo un indirizzo IP alla volta usando la system call getnameinfo). Questa operazione è più lenta e raramente utile a meno che non ci sia un bug nel codice di risoluzione dei nomi di Nmap (per favore si contattino gli sviluppatori se questo è il caso). Il resolver di sistema è sempre usato per le scansioni su IPv6.

--dns-servers <server1>[,<server2>][,...]]; (Servers to use for reverse DNS queries)

Di default Nmap cercherà di determinare i server DNS da usare per le reverse query usando il file resolv.conf (UNIX) o il Registro (Win32) sulla macchina su cui viene eseguito. In alternativa si può usare quest'opzione per indicare server alternativi. Tuttavia quest'opzione viene ignorata nel caso si specifichi l'opzione --system-dns o se si sta eseguendo una scansione IPv6. L'uso di più server DNS è spesso più veloce specialmente se si specificano server DNS autoritari per lo spazio IP di destinazione. Quest'opzione inoltre attrae meno l'attenzione, dato che le tue richieste possono essere rimbalzate praticamente da ogni server DNS su Internet.

Quest'opzione torna utile anche quando si eseguono scansioni di reti private. Alle volte solo alcuni name server forniscono le correte informazioni di reverse e non sempre potresti sapere dove questi si trovano. Puoi scansionare la rete sulla porta 53 (magari con una version detection), quindi provare delle List Scan (-sL) di Nmap specificando ogni volta un name server diverso con l'opzione --dns-servers finché non si trova quello desiderato.