Skipping tests to speed up long scans

Nmap scans break down into different phases. When we are working with a large list of hosts, we can save up time by skipping tests that return information we don't need. By carefully selecting our scan flags, we can significantly improve the performance of our scans.

This recipe explains the process that takes place behind the curtains when scanning, and how to skip certain phases in order to speed up long scans.

How to do it...

To perform a full port scan with the timing template set to aggressive, and without the reverse DNS resolution or ping, use the following command:

# nmap -T4 -n -Pn -p- 74.207.244.221

The command we just used gives us the following output:

Nmap scan report for 74.207.244.221
Host is up (0.11s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
9929/tcp open  nping-echo

Nmap done: 1 IP address (1 host up) scanned in 60.84 seconds

Compare the running time that we got against a full port scan with default arguments, using the following command:

# nmap -p- scanme.nmap.org

The command we just used gives us the following output:

Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.11s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
9929/tcp open  nping-echo

Nmap done: 1 IP address (1 host up) scanned in 77.45 seconds

This time difference really adds up when you work with a large number of hosts. I recommend that you think about your objectives and determine the information you need, in order to consider the possibility of skipping some scanning phases.

How it works...

Nmap scans are divided in several phases. Some of them require some arguments to be set in order to run, but others, such as the reverse DNS resolution, are executed by default. Let's review the phases that can be skipped, and their corresponding Nmap flag:

  • Target enumeration: In this phase Nmap parses the target list. This phase can't exactly be skipped, but you can save DNS forward lookups by using only the IP addresses as targets.
  • Host discovery: This is the phase, where Nmap establishes if the targets are online and in the network. By default, Nmap performs an ICMP echo request ping for external hosts, but it supports several methods and different combinations. To skip the host discovery phase (no ping) use the flag -Pn. Let's see the packet trace of scans with and without -Pn, using the following command:
    $ nmap -Pn -p80 -n --packet-trace scanme.nmap.org
    

    The command we just used gives us the following output:

    SENT (0.0864s) TCP 106.187.53.215:62670 > 74.207.244.221:80 S ttl=46 id=4184 iplen=44  seq=3846739633 win=1024 <mss 1460>
    RCVD (0.1957s) TCP 74.207.244.221:80 > 106.187.53.215:62670 SA ttl=56 id=0 iplen=44  seq=2588014713 win=14600 <mss 1460>
    Nmap scan report for scanme.nmap.org (74.207.244.221)
    Host is up (0.11s latency).
    PORT   STATE SERVICE
    80/tcp open  http
    
    Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
    

    For scanning without skipping host discovery we have the following command:

    $ nmap -p80 -n –packet-trace scanme.nmap.org
    

    The output of this command is:

    SENT (0.1099s) ICMP 106.187.53.215 > 74.207.244.221 Echo request (type=8/code=0) ttl=59 id=12270 iplen=28
    SENT (0.1101s) TCP 106.187.53.215:43199 > 74.207.244.221:443 S ttl=59 id=38710 iplen=44  seq=1913383349 win=1024 <mss 1460>
    SENT (0.1101s) TCP 106.187.53.215:43199 > 74.207.244.221:80 A ttl=44 id=10665 iplen=40  seq=0 win=1024
    SENT (0.1102s) ICMP 106.187.53.215 > 74.207.244.221 Timestamp request (type=13/code=0) ttl=51 id=42939 iplen=40
    RCVD (0.2120s) ICMP 74.207.244.221 > 106.187.53.215 Echo reply (type=0/code=0) ttl=56 id=2147 iplen=28
    SENT (0.2731s) TCP 106.187.53.215:43199 > 74.207.244.221:80 S ttl=51 id=34952 iplen=44  seq=2609466214 win=1024 <mss 1460>
    RCVD (0.3822s) TCP 74.207.244.221:80 > 106.187.53.215:43199 SA ttl=56 id=0 iplen=44  seq=4191686720 win=14600 <mss 1460>
    Nmap scan report for scanme.nmap.org (74.207.244.221)
    Host is up (0.10s latency).
    PORT   STATE SERVICE
    80/tcp open  http
    Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds
    
  • Reverse DNS resolution: Nmap performs reverse DNS lookups, as often hostnames may reveal additional information, such as the hostname mail.company.com. This step can be skipped by adding the argument -n to your scan arguments. Let's see the traffic generated by the two scans with and without reverse DNS resolution, using the following command:
    $ nmap -n -Pn -p80 --packet-trace scanme.nmap.org
    

    The command we just used gives us the following output:

    SENT (0.1832s) TCP 106.187.53.215:45748 > 74.207.244.221:80 S ttl=37 id=33309 iplen=44  seq=2623325197 win=1024 <mss 1460>
    RCVD (0.2877s) TCP 74.207.244.221:80 > 106.187.53.215:45748 SA ttl=56 id=0 iplen=44  seq=3220507551 win=14600 <mss 1460>
    Nmap scan report for scanme.nmap.org (74.207.244.221)
    Host is up (0.10s latency).
    PORT   STATE SERVICE
    80/tcp open  http
    
    Nmap done: 1 IP address (1 host up) scanned in 0.32 seconds
    

    For scanning without skipping reverse DNS resolution we have the following command:

    $ nmap -Pn -p80 --packet-trace scanme.nmap.org
    

    This command gives us the following output:

    NSOCK (0.0600s) UDP connection requested to 106.187.36.20:53 (IOD #1) EID 8
    NSOCK (0.0600s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID                                                  18
    NSOCK (0.0600s) UDP connection requested to 106.187.35.20:53 (IOD #2) EID 24
    NSOCK (0.0600s) Read request from IOD #2 [106.187.35.20:53] (timeout: -1ms) EID                                                  34
    NSOCK (0.0600s) UDP connection requested to 106.187.34.20:53 (IOD #3) EID 40
    NSOCK (0.0600s) Read request from IOD #3 [106.187.34.20:53] (timeout: -1ms) EID                                                  50
    NSOCK (0.0600s) Write request for 45 bytes to IOD #1 EID 59 [106.187.36.20:53]:                                                  =............221.244.207.74.in-addr.arpa.....
    NSOCK (0.0600s) Callback: CONNECT SUCCESS for EID 8 [106.187.36.20:53]
    NSOCK (0.0600s) Callback: WRITE SUCCESS for EID 59 [106.187.36.20:53]
    NSOCK (0.0600s) Callback: CONNECT SUCCESS for EID 24 [106.187.35.20:53]
    NSOCK (0.0600s) Callback: CONNECT SUCCESS for EID 40 [106.187.34.20:53]
    NSOCK (0.0620s) Callback: READ SUCCESS for EID 18 [106.187.36.20:53] (174 bytes)
    NSOCK (0.0620s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID                                                  66
    NSOCK (0.0620s) nsi_delete() (IOD #1)
    NSOCK (0.0620s) msevent_cancel() on event #66 (type READ)
    NSOCK (0.0620s) nsi_delete() (IOD #2)
    NSOCK (0.0620s) msevent_cancel() on event #34 (type READ)
    NSOCK (0.0620s) nsi_delete() (IOD #3)
    NSOCK (0.0620s) msevent_cancel() on event #50 (type READ)
    SENT (0.0910s) TCP 106.187.53.215:46089 > 74.207.244.221:80 S ttl=42 id=23960 ip                                                 len=44  seq=1992555555 win=1024 <mss 1460>
    RCVD (0.1932s) TCP 74.207.244.221:80 > 106.187.53.215:46089 SA ttl=56 id=0 iplen                                                 =44  seq=4229796359 win=14600 <mss 1460>
    Nmap scan report for scanme.nmap.org (74.207.244.221)
    Host is up (0.10s latency).
    PORT   STATE SERVICE
    80/tcp open  http
    
    Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
    
  • Port scanning: In this phase, Nmap determines the state of the ports. By default it uses SYN scanning, but several port scanning techniques are supported. This phase can be skipped with the argument -sn:
    $ nmap -sn -R --packet-trace 74.207.244.221
    SENT (0.0363s) ICMP 106.187.53.215 > 74.207.244.221 Echo request (type=8/code=0) ttl=56 id=36390 iplen=28
    SENT (0.0364s) TCP 106.187.53.215:53376 > 74.207.244.221:443 S ttl=39 id=22228 iplen=44  seq=155734416 win=1024 <mss 1460>
    SENT (0.0365s) TCP 106.187.53.215:53376 > 74.207.244.221:80 A ttl=46 id=36835 iplen=40  seq=0 win=1024
    SENT (0.0366s) ICMP 106.187.53.215 > 74.207.244.221 Timestamp request (type=13/code=0) ttl=50 id=2630 iplen=40
    RCVD (0.1377s) TCP 74.207.244.221:443 > 106.187.53.215:53376 RA ttl=56 id=0 iplen=40  seq=0 win=0
    NSOCK (0.1660s) UDP connection requested to 106.187.36.20:53 (IOD #1) EID 8
    NSOCK (0.1660s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID 18
    NSOCK (0.1660s) UDP connection requested to 106.187.35.20:53 (IOD #2) EID 24
    NSOCK (0.1660s) Read request from IOD #2 [106.187.35.20:53] (timeout: -1ms) EID 34
    NSOCK (0.1660s) UDP connection requested to 106.187.34.20:53 (IOD #3) EID 40
    NSOCK (0.1660s) Read request from IOD #3 [106.187.34.20:53] (timeout: -1ms) EID 50
    NSOCK (0.1660s) Write request for 45 bytes to IOD #1 EID 59 [106.187.36.20:53]: [............221.244.207.74.in-addr.arpa.....
    NSOCK (0.1660s) Callback: CONNECT SUCCESS for EID 8 [106.187.36.20:53]
    NSOCK (0.1660s) Callback: WRITE SUCCESS for EID 59 [106.187.36.20:53]
    NSOCK (0.1660s) Callback: CONNECT SUCCESS for EID 24 [106.187.35.20:53]
    NSOCK (0.1660s) Callback: CONNECT SUCCESS for EID 40 [106.187.34.20:53]
    NSOCK (0.1660s) Callback: READ SUCCESS for EID 18 [106.187.36.20:53] (174 bytes)
    NSOCK (0.1660s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID 66
    NSOCK (0.1660s) nsi_delete() (IOD #1)
    NSOCK (0.1660s) msevent_cancel() on event #66 (type READ)
    NSOCK (0.1660s) nsi_delete() (IOD #2)
    NSOCK (0.1660s) msevent_cancel() on event #34 (type READ)
    NSOCK (0.1660s) nsi_delete() (IOD #3)
    NSOCK (0.1660s) msevent_cancel() on event #50 (type READ)
    Nmap scan report for scanme.nmap.org (74.207.244.221)
    Host is up (0.10s latency).
    Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
    

    In the previous example, we can see that an ICMP echo request and a reverse DNS lookup were performed, but no port scanning was done.

There's more...

I recommend that you also run a couple of test scans to measure the speeds of the different DNS servers, if you plan on performing reverse DNS lookups. I've found that ISPs tend to have the slowest DNS servers, but you can set your DNS server by specifying the argument --dns-servers. To use Google's DNS servers, use the argument --dns-servers 8.8.8.8,8.8.4.4:

# nmap -R --dns-servers 8.8.8.8,8.8.4.4 -O scanme.nmap.org

You can test your DNS server speed by comparing the scan times. The following command tells Nmap to not ping or scan the port, and only perform a reverse DNS lookup:

$ nmap -R -Pn -sn 74.207.244.221
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up.
Nmap done: 1 IP address (1 host up) scanned in 1.01 seconds

Scanning phases of Nmap

Nmap scans are divided into the following phases:

  • Script pre-scanning: This phase is only executed when you use the options -sC or --script, and it attempts to retrieve additional host information via a collection of NSE scripts.
  • Target enumeration: In this phase, Nmap parses the target(s) and resolves it into an IP address.
  • Host discovery: This is the phase where Nmap determines if the target(s) is online and in the network by performing the specified host discovery technique(s). The option -Pn can be used to skip this phase.
  • Reverse DNS resolution: In this phase, Nmap performs a reverse DNS lookup to obtain a hostname for each target. The argument -R can be used to force DNS resolution, and the argument-n can be used to skip it.
  • Port scanning: During this phase, Nmap determines the state of the ports. It can be skipped by using the argument -sn.
  • Version detection: This phase is in charge of detecting the advanced version for the ports that were found open. It is only executed when the argument -sV is set.
  • OS detection: In this phase, Nmap attempts to determine the operating system of the target. It is only executed when the option -O is present.
  • Traceroute: In this phase Nmap performs a traceroute to the targets. This phase only runs when the option --traceroute is set.
  • Script scanning: In this phase, the NSE scripts are run depending on their execution rules.
  • Output: In this phase, Nmap formats all of the gathered information and returns it to the user in the specified format.
  • Script post-scanning: In this phase, the NSE scripts with post-scan execution rules are evaluated and given a chance to run. If there are no post-scan NSE scripts in the default category, this phase will be skipped, unless the argument --script is specified.

Debugging Nmap scans

If something unexpected happens during an Nmap scan, turn on the debugging to get additional information. Nmap uses the flag -d for the debugging level, and you can set any integer between 0 and 9:

$ nmap -p80 --script http-google-email -d4 <target>

Aggressive detection

Nmap has a special flag to activate aggressive detection -A. An aggressive mode enables OS detection (-O), version detection (-sV), script scanning (-sC), and traceroute (--traceroute). Needless to say this mode sends a lot more probes and is more likely to be detected, but provides a lot of valuable host information. We can use one of the following commands for the aggressive mode:

# nmap -A <target>

Or

# nmap -sC -sV -O <target>

See also

  • The Scanning an IP address range recipe
  • The Reading targets from a text file recipe
  • The Excluding a host list from your scan section in the Reading targets from a text file recipe
  • The Selecting the correct timing template recipe
  • The Adjusting timing parameters recipe
  • The Adjusting performance parameters recipe
  • The Distributing a scan among several clients by using Dnmap recipe
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.133.156.107