home | help
NMAP(1) 		 Nmap Network Scanning (PRE-REL 		 NMAP(1)

NAME
     nmap - Network exploration tool and security / port scanner

SYNOPSIS
     nmap [Scan Type...] [Options] {target specification}

DESCRIPTION
     Nmap  ("Network Mapper") is an open source tool for network exploration and
     security auditing. It was designed to rapidly scan large networks, although
     it works fine against single hosts. Nmap uses raw IP packets in novel  ways
     to determine what hosts are available on the network, what services (appli-
     cation  name  and version) those hosts are offering, what operating systems
     (and OS versions) they are running, what type of  packet  filters/firewalls
     are  in  use,  and  dozens of other characteristics. While Nmap is commonly
     used for security audits, many systems and network administrators	find  it
     useful  for  routine  tasks such as network inventory, managing service up-
     grade schedules, and monitoring host or service uptime.

     The output from Nmap is a list of scanned targets, with supplemental infor-
     mation on each depending on the options used. Key among that information is
     the "interesting ports table". That table lists the port number and  proto-
     col,  service  name, and state. The state is either open, filtered, closed,
     or unfiltered. Open means that an application on the target machine is lis-
     tening for connections/packets on that port.  Filtered means that	a  fire-
     wall,  filter,  or other network obstacle is blocking the port so that Nmap
     cannot tell whether it is open or closed.	Closed ports have no application
     listening on them, though they could open up at any time. Ports are classi-
     fied as unfiltered when they are responsive to Nmap's probes, but Nmap can-
     not determine whether they are open or closed. Nmap reports the state  com-
     binations	open|filtered and closed|filtered when it cannot determine which
     of the two states describe a port. The port table may also include software
     version details when version detection has been requested. When an IP  pro-
     tocol  scan  is  requested (-sO), Nmap provides information on supported IP
     protocols rather than listening ports.

     In addition to the interesting ports table, Nmap can provide further infor-
     mation on targets, including reverse DNS names, operating	system	guesses,
     device types, and MAC addresses.

     A typical Nmap scan is shown in Example 15.1, "A representative Nmap scan".
     The  only Nmap arguments used in this example are -A, to enable OS and ver-
     sion detection, script scanning, and traceroute; -T4 for faster  execution;
     and then the two target hostnames.

     Example 15.1. A representative Nmap scan

	 # nmap -A -T4 scanme.nmap.org playground

	 Starting Nmap ( http://nmap.org )
	 Interesting ports on scanme.nmap.org (205.217.153.62):
	 (The 1663 ports scanned but not shown below are in state: filtered)
	 PORT	 STATE	SERVICE VERSION
	 22/tcp  open	ssh	OpenSSH 3.9p1 (protocol 1.99)
	 53/tcp  open	domain
	 70/tcp  closed gopher
	 80/tcp  open	http	Apache httpd 2.0.52 ((Fedora))
	 113/tcp closed auth
	 Device type: general purpose
	 Running: Linux 2.4.X|2.5.X|2.6.X
	 OS details: Linux 2.4.7 - 2.6.11, Linux 2.6.0 - 2.6.11
	 Uptime 33.908 days (since Thu Jul 21 03:38:03 2005)

	 Interesting ports on playground.nmap.org (192.168.0.40):
	 (The 1659 ports scanned but not shown below are in state: closed)
	 PORT	  STATE SERVICE       VERSION
	 135/tcp  open	msrpc	      Microsoft Windows RPC
	 139/tcp  open	netbios-ssn
	 389/tcp  open	ldap?
	 445/tcp  open	microsoft-ds  Microsoft Windows XP microsoft-ds
	 1002/tcp open	windows-icfw?
	 1025/tcp open	msrpc	      Microsoft Windows RPC
	 1720/tcp open	H.323/Q.931   CompTek AquaGateKeeper
	 5800/tcp open	vnc-http      RealVNC 4.0 (Resolution 400x250; VNC port: 5900)
	 5900/tcp open	vnc	      VNC (protocol 3.8)
	 MAC Address: 00:A0:CC:63:85:4B (Lite-on Communications)
	 Device type: general purpose
	 Running: Microsoft Windows NT/2K/XP
	 OS details: Microsoft Windows XP Pro RC1+ through final release
	 Service Info: OSs: Windows, Windows XP

	 Nmap finished: 2 IP addresses (2 hosts up) scanned in 88.392 seconds

     The newest version of Nmap can be obtained from http://nmap.org. The newest
     version of the man page is available at http://nmap.org/book/man.html.

OPTIONS SUMMARY
     This options summary is printed when Nmap is run with no arguments, and the
     latest  version is always available at http://nmap.org/data/nmap.usage.txt.
     It helps people remember the most common options, but is no substitute  for
     the in-depth documentation in the rest of this manual. Some obscure options
     aren't even included here.

	 Nmap 4.68 ( http://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
	   -sP: Ping Scan - go no further than determining if host is online
	   -PN: Treat all hosts as online -- skip host discovery
	   -PS/PA/PU [portlist]: TCP SYN/ACK or UDP 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
	 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
	   -sO: IP protocol scan
	   -b <FTP relay host>: FTP bounce scan
	   --traceroute: Trace hop path to each host
	   --reason: Display the reason a port is in a particular state
	 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
	   -F: Fast mode - Scan fewer ports than the default scan
	   -r: Scan ports consecutively - 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-trace: Show all data sent and received
	   --script-updatedb: Update the script database.
	 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 milliseconds, unless you append '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 <time>: 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
	 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
	   --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 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 twice or more for greater effect)
	   -d[level]: Set or increase debugging level (Up to 9 is meaningful)
	   --open: Only show open (or possibly open) ports
	   --packet-trace: Show all packets sent and received
	   --iflist: Print host interfaces and routes (for debugging)
	   --log-errors: Log errors/warnings to the normal-format output file
	   --append-output: Append to rather than clobber specified output files
	   --resume <filename>: Resume an aborted scan
	   --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: Enables OS detection and 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 -sP 192.168.0.0/16 10.0.0.0/8
	   nmap -v -iR 10000 -PN -p 80
	 SEE THE MAN PAGE FOR MANY MORE OPTIONS, DESCRIPTIONS, AND EXAMPLES

TARGET SPECIFICATION
     Everything  on  the Nmap command-line that isn't an option (or option argu-
     ment) is treated as a target host specification. The simplest  case  is  to
     specify a target IP address or hostname for scanning.

     Sometimes	you  wish  to  scan a whole network of adjacent hosts. For this,
     Nmap supports CIDR-style addressing. You can append /numbits to an  IP  ad-
     dress  or	hostname and Nmap will scan every IP address for which the first
     numbits are the same as for the reference IP or hostname given.  For  exam-
     ple, 192.168.10.0/24 would scan the 256 hosts between 192.168.10.0 (binary:
     11000000  10101000  00001010 00000000) and 192.168.10.255 (binary: 11000000
     10101000 00001010 11111111), inclusive. 192.168.10.40/24 would  do  exactly
     the  same	thing.	Given that the host scanme.nmap.org is at the IP address
     205.217.153.62, the specification scanme.nmap.org/16 would scan the  65,536
     IP  addresses between 205.217.0.0 and 205.217.255.255. The smallest allowed
     value is /0, which scans the whole Internet. The largest value is 32, which
     scans just the named host or IP address because all address bits are fixed.

     CIDR notation is short but not always flexible  enough.  For  example,  you
     might  want  to scan 192.168.0.0/16 but skip any IPs ending with .0 or .255
     because they are commonly broadcast addresses. Nmap supports  this  through
     octet  range  addressing.	Rather than specify a normal IP address, you can
     specify a comma separated list of numbers or ranges for each octet. For ex-
     ample, 192.168.0-255.1-254 will skip all addresses in the range that end in
     .0 and or .255. Ranges need not be limited to the final octets: the  speci-
     fier  0-255.0-255.13.37  will  perform an Internet-wide scan for all IP ad-
     dresses ending in 13.37. This sort of broad sampling can be useful for  In-
     ternet surveys and research.

     IPv6  addresses can only be specified by their fully qualified IPv6 address
     or hostname. CIDR and octet ranges aren't supported for IPv6  because  they
     are rarely useful.

     Nmap  accepts  multiple  host  specifications on the command line, and they
     don't  need  to  be  the  same  type.  The  command  nmap	 scanme.nmap.org
     192.168.0.0/16 10.0.0,1,3-7.0-255 does what you would expect.

     While targets are usually specified on the command lines, the following op-
     tions are also available to control target selection:

     -iL <inputfilename> (Input from list)
	 Reads	target specifications from inputfilename. Passing a huge list of
	 hosts is often awkward on the command line, yet it is a common  desire.
	 For  example,	your  DHCP  server might export a list of 10,000 current
	 leases that you wish to scan. Or maybe you want  to  scan  all  IP  ad-
	 dresses  except  for those to locate hosts using unauthorized static IP
	 addresses. Simply generate the list of hosts  to  scan  and  pass  that
	 filename  to  Nmap  as an argument to the -iL option. Entries can be in
	 any of the formats accepted by Nmap on the command  line  (IP	address,
	 hostname, CIDR, IPv6, or octet ranges). Each entry must be separated by
	 one  or more spaces, tabs, or newlines. You can specify a hyphen (-) as
	 the filename if you want Nmap to read hosts from standard input  rather
	 than an actual file.

     -iR <num hosts> (Choose random targets)
	 For  Internet-wide  surveys  and other research, you may want to choose
	 targets at random. The num hosts argument tells Nmap how  many  IPs  to
	 generate.  Undesirable IPs such as those in certain private, multicast,
	 or unallocated address ranges are automatically skipped. The argument 0
	 can be specified for a never-ending scan. Keep in mind that  some  net-
	 work administrators bristle at unauthorized scans of their networks and
	 may  complain.  Use  this option at your own risk! If you find yourself
	 really bored one rainy afternoon, try the command nmap -sS -PS80 -iR  0
	 -p 80 to locate random web servers for browsing.

     --exclude <host1[,host2][,host3],...> (Exclude hosts/networks)
	 Specifies  a  comma-separated	list  of targets to be excluded from the
	 scan even if they are part of the overall network  range  you	specify.
	 The  list  you pass in uses normal Nmap syntax, so it can include host-
	 names, CIDR netblocks, octet ranges, etc. This can be useful  when  the
	 network you wish to scan includes untouchable mission-critical servers,
	 systems that are known to react adversely to port scans, or subnetworks
	 administered by other people.

     --excludefile <exclude_file> (Exclude list from file)
	 This offers the same functionality as the --exclude option, except that
	 the excluded targets are provided in a newline, space, or tab delimited
	 exclude_file rather than on the command line.

HOST DISCOVERY
     One of the very first steps in any network reconnaissance mission is to re-
     duce a (sometimes huge) set of IP ranges into a list of active or interest-
     ing  hosts. Scanning every port of every single IP address is slow and usu-
     ally unnecessary. Of course what makes a host interesting	depends  greatly
     on  the  scan  purposes.  Network	administrators may only be interested in
     hosts running a certain service, while security  auditors	may  care  about
     every single device with an IP address. An administrator may be comfortable
     using  just  an ICMP ping to locate hosts on his internal network, while an
     external penetration tester may use a diverse set of dozens of probes in an
     attempt to evade firewall restrictions.

     Because host discovery needs are so diverse, Nmap offers a wide variety  of
     options  for  customizing	the techniques used. Host discovery is sometimes
     called ping scan, but it goes well beyond	the  simple  ICMP  echo  request
     packets  associated  with the ubiquitous ping tool. Users can skip the ping
     step entirely with a list scan (-sL) or by disabling ping (-PN), or  engage
     the network with arbitrary combinations of multi-port TCP SYN/ACK, UDP, and
     ICMP  probes. The goal of these probes is to solicit responses which demon-
     strate that an IP address is actually active (is being used by  a	host  or
     network  device). On many networks, only a small percentage of IP addresses
     are active at any given time. This is particularly common with private  ad-
     dress space such as 10.0.0.0/8. That network has 16 million IPs, but I have
     seen  it used by companies with less than a thousand machines. Host discov-
     ery can find those machines in a sparsely allocated sea of IP addresses.

     If no host discovery options are given, Nmap sends a TCP  ACK  packet  des-
     tined for port 80 and an ICMP echo request query to each target machine. An
     exception	to this is that an ARP scan is used for any targets which are on
     a local ethernet network. For unprivileged Unix shell users, a  SYN  packet
     is  sent instead of the ack using the connect() system call. These defaults
     are equivalent to the -PA -PE options. This host discovery is often  suffi-
     cient when scanning local networks, but a more comprehensive set of discov-
     ery probes is recommended for security auditing.

     The -P* options (which select ping types) can be combined. You can increase
     your odds of penetrating strict firewalls by sending many probe types using
     different	TCP  ports/flags  and  ICMP  codes. Also note that ARP discovery
     (-PR) is done by default against targets on a local ethernet  network  even
     if  you  specify  other -P* options, because it is almost always faster and
     more effective.

     By default, Nmap does host discovery and then performs a port scan  against
     each host it determines is online. This is true even if you specify non-de-
     fault host discovery types such as UDP probes (-PU). Read about the -sP op-
     tion  to  learn how to perform only host discovery, or use -PN to skip host
     discovery and port scan all target hosts.	The  following	options  control
     host discovery:

     -sL (List Scan)
	 The  list scan is a degenerate form of host discovery that simply lists
	 each host of the network(s) specified, without sending any  packets  to
	 the target hosts. By default, Nmap still does reverse-DNS resolution on
	 the  hosts to learn their names. It is often surprising how much useful
	 information simple hostnames give out. For example, fw.chi is the  name
	 of  one  company's Chicago firewall. Nmap also reports the total number
	 of IP addresses at the end. The list scan is a good sanity check to en-
	 sure that you have proper IP addresses for your targets. If  the  hosts
	 sport domain names you do not recognize, it is worth investigating fur-
	 ther to prevent scanning the wrong company's network.

	 Since	the  idea is to simply print a list of target hosts, options for
	 higher level functionality such as port scanning, OS detection, or ping
	 scanning cannot be combined with this. If  you  wish  to  disable  ping
	 scanning  while  still performing such higher level functionality, read
	 up on the -PN option.

     -sP (Ping Scan)
	 This option tells Nmap to only perform a ping	scan  (host  discovery),
	 then  print out the available hosts that responded to the scan. No fur-
	 ther testing (such as port scanning or OS detection) is performed. This
	 is one step more intrusive than the list scan, and can  often	be  used
	 for  the same purposes. It allows light reconnaissance of a target net-
	 work without attracting much attention. Knowing how many hosts  are  up
	 is  more  valuable  to attackers than the list provided by list scan of
	 every single IP and host name.

	 Systems administrators often find this option valuable as well. It  can
	 easily  be  used  to  count  available machines on a network or monitor
	 server availability. This is often called a ping sweep, and is more re-
	 liable than pinging the broadcast address because many hosts do not re-
	 ply to broadcast queries.

	 The -sP option sends an ICMP echo request and a TCP packet to	port  80
	 by default. When executed by an unprivileged user, only a SYN packet is
	 sent  (using  a connect() call) to port 80 on the target. When a privi-
	 leged user tries to scan targets on a local ethernet network,	ARP  re-
	 quests  (-PR)	are  used unless --send-ip was specified. The -sP option
	 can be combined with any of the discovery probe types (the -P* options,
	 excluding -PN) for greater flexibility. If any of those probe type  and
	 port number options are used, the default probes (ACK and echo request)
	 are  overridden.  When strict firewalls are in place between the source
	 host running Nmap and the target network, using  those  advanced  tech-
	 niques  is  recommended. Otherwise hosts could be missed when the fire-
	 wall drops probes or their responses.

     -PN (No ping)
	 This option skips the Nmap discovery stage altogether.  Normally,  Nmap
	 uses  this  stage to determine active machines for heavier scanning. By
	 default, Nmap only performs heavy probing such as port  scans,  version
	 detection,  or OS detection against hosts that are found to be up. Dis-
	 abling host discovery with -PN causes Nmap  to  attempt  the  requested
	 scanning  functions  against every target IP address specified. So if a
	 class B sized target address space (/16) is specified	on  the  command
	 line,	all  65,536  IP  addresses are scanned. Proper host discovery is
	 skipped as with the list scan, but instead of stopping and printing the
	 target list, Nmap continues to perform requested functions as	if  each
	 target  IP  is  active.  For  machines on a local ethernet network, ARP
	 scanning will still be performed (unless --send-ip  is  specified)  be-
	 cause	Nmap  needs MAC addresses to further scan target hosts. This op-
	 tion flag for this used to be P0 (uses zero), but was renamed to  avoid
	 confusion with protocol ping's PO (uses the letter O) flag.

     -PS [portlist] (TCP SYN Ping)
	 This  option  sends  an empty TCP packet with the SYN flag set. The de-
	 fault destination port is 80 (configurable at compile time by	changing
	 DEFAULT_TCP_PROBE_PORT_SPEC  in  nmap.h). Alternate ports can be speci-
	 fied as a parameter. The syntax is the same as for the -p  except  that
	 port  type  specifiers  like T: are not allowed. Examples are -PS22 and
	 -PS22-25,80,113,1050,35000. Note that there can be no space between -PS
	 and the port list. If multiple probes are specified they will	be  sent
	 in parallel.

	 The  SYN  flag suggests to the remote system that you are attempting to
	 establish a connection. Normally the destination port will  be  closed,
	 and a RST (reset) packet sent back. If the port happens to be open, the
	 target will take the second step of a TCP 3-way-handshake by responding
	 with a SYN/ACK TCP packet. The machine running Nmap then tears down the
	 nascent  connection by responding with a RST rather than sending an ACK
	 packet which would complete the 3-way-handshake and  establish  a  full
	 connection. The RST packet is sent by the kernel of the machine running
	 Nmap in response to the unexpected SYN/ACK, not by Nmap itself.

	 Nmap  does  not care whether the port is open or closed. Either the RST
	 or SYN/ACK response discussed previously tell Nmap  that  the	host  is
	 available and responsive.

	 On  Unix boxes, only the privileged user root is generally able to send
	 and receive raw TCP packets. For unprivileged users,  a  workaround  is
	 automatically	employed  whereby the connect() system call is initiated
	 against each target port. This has the effect of sending a  SYN  packet
	 to  the  target  host, in an attempt to establish a connection. If con-
	 nect() returns with a quick success or an ECONNREFUSED failure, the un-
	 derlying TCP stack must have received a SYN/ACK or RST and the host  is
	 marked  available.  If  the  connection attempt is left hanging until a
	 timeout is reached, the host is marked as down. This workaround is also
	 used for IPv6 connections, as raw IPv6 packet building support  is  not
	 yet available in Nmap.

     -PA [portlist] (TCP ACK Ping)
	 The  TCP  ACK ping is quite similar to the just-discussed SYN ping. The
	 difference, as you could likely guess, is that the TCP ACK flag is  set
	 instead  of the SYN flag. Such an ACK packet purports to be acknowledg-
	 ing data over an established TCP connection, but no such connection ex-
	 ists. So remote hosts should always respond with a RST packet, disclos-
	 ing their existence in the process.

	 The -PA option uses the same default port as the SYN probe (80) and can
	 also take a list of destination ports in the same format. If an unpriv-
	 ileged user tries this, or an IPv6 target is specified,  the  connect()
	 workaround  discussed	previously is used. This workaround is imperfect
	 because connect() is actually sending a SYN packet rather than an ACK.

	 The reason for offering both SYN and ACK ping probes is to maximize the
	 chances of bypassing firewalls. Many administrators  configure  routers
	 and  other  simple  firewalls	to block incoming SYN packets except for
	 those destined for public services like the company web  site	or  mail
	 server.  This	prevents other incoming connections to the organization,
	 while allowing users to make unobstructed outgoing connections  to  the
	 Internet.  This  non-stateful	approach  takes  up few resources on the
	 firewall/router and is widely supported by hardware and  software  fil-
	 ters.	The  Linux Netfilter/iptables firewall software offers the --syn
	 convenience option to implement this stateless approach. When stateless
	 firewall rules such as this are in place, SYN	ping  probes  (-PS)  are
	 likely  to  be blocked when sent to closed target ports. In such cases,
	 the ACK probe shines as it cuts right through these rules.

	 Another common type of firewall uses stateful	rules  that  drop  unex-
	 pected  packets.  This  feature  was initially found mostly on high-end
	 firewalls, though it has become much more common over	the  years.  The
	 Linux	Netfilter/iptables  system supports this through the --state op-
	 tion, which categorizes packets based on connection state. A SYN  probe
	 is more likely to work against such a system, as unexpected ACK packets
	 are  generally  recognized  as  bogus	and  dropped. A solution to this
	 quandary is to send both SYN and ACK probes by specifying -PS and -PA.

     -PU [portlist] (UDP Ping)
	 Another host discovery option is the UDP ping,  which	sends  an  empty
	 (unless  --data-length is specified) UDP packet to the given ports. The
	 portlist takes the same format as with the previously discussed -PS and
	 -PA options. If no ports are specified, the default is 31338. This  de-
	 fault	 can   be   configured	 at   compile-time   by   changing   DE-
	 FAULT_UDP_PROBE_PORT_SPEC in nmap.h. A highly uncommon port is used  by
	 default  because  sending  to	open ports is often undesirable for this
	 particular scan type.

	 Upon hitting a closed port on the target machine, the UDP probe  should
	 elicit  an  ICMP  port  unreachable packet in return. This signifies to
	 Nmap that the machine is up and available. Many other types of ICMP er-
	 rors, such as host/network unreachables or TTL exceeded are  indicative
	 of  a	down or unreachable host. A lack of response is also interpreted
	 this way. If an open port is reached, most services simply  ignore  the
	 empty	packet	and fail to return any response. This is why the default
	 probe port is 31338, which is highly unlikely to be in use. A few  ser-
	 vices,  such  as chargen, will respond to an empty UDP packet, and thus
	 disclose to Nmap that the machine is available.

	 The primary advantage of this scan type is that it  bypasses  firewalls
	 and  filters  that only screen TCP. For example, I once owned a Linksys
	 BEFW11S4 wireless broadband router. The external interface of this  de-
	 vice  filtered  all  TCP  ports  by default, but UDP probes would still
	 elicit port unreachable messages and thus give away the device.

     -PE; -PP; -PM (ICMP Ping Types)
	 In addition to the unusual TCP and UDP host discovery	types  discussed
	 previously,  Nmap  can send the standard packets sent by the ubiquitous
	 ping program. Nmap sends an ICMP type 8 (echo request)  packet  to  the
	 target  IP  addresses,  expecting  a type 0 (echo reply) in return from
	 available hosts. Unfortunately for network explorers,	many  hosts  and
	 firewalls  now  block these packets, rather than responding as required
	 by RFC 1122[1]. For this reason, ICMP-only scans  are	rarely	reliable
	 enough against unknown targets over the Internet. But for system admin-
	 istrators  monitoring	an internal network, they can be a practical and
	 efficient approach. Use the -PE option to enable this echo request  be-
	 havior.

	 While	echo request is the standard ICMP ping query, Nmap does not stop
	 there. The ICMP standard (RFC 792[2]) also specifies timestamp request,
	 information request, and address mask request packets as codes 13,  15,
	 and 17, respectively. While the ostensible purpose for these queries is
	 to  learn information such as address masks and current times, they can
	 easily be used for host discovery. A system  that  replies  is  up  and
	 available.  Nmap does not currently implement information request pack-
	 ets, as they are not widely supported. RFC 1122 insists  that	"a  host
	 SHOULD  NOT  implement  these	messages".  Timestamp  and  address mask
	 queries can be sent with the -PP and -PM options, respectively. A time-
	 stamp reply (ICMP code 14) or address mask reply  (code  18)  discloses
	 that  the host is available. These two queries can be valuable when ad-
	 ministrators specifically block echo request packets  while  forgetting
	 that other ICMP queries can be used for the same purpose.

     -PO [protolist] (IP Protocol Ping)
	 The  newest  host discovery option is the IP protocol ping, which sends
	 IP packets with the specified protocol number set in their  IP  header.
	 The  protocol list takes the same format as do port lists in the previ-
	 ously discussed TCP and UDP host discovery options. If no protocols are
	 specified, the default is to send multiple IP packets for ICMP  (proto-
	 col  1), IGMP (protocol 2), and IP-in-IP (protocol 4). The default pro-
	 tocols  can   be   configured	 at   compile-time   by   changing   DE-
	 FAULT_PROTO_PROBE_PORT_SPEC  in  nmap.h.  Note that for the ICMP, IGMP,
	 TCP (protocol 6), and UDP (protocol 17), the packets are sent with  the
	 proper  protocol  headers  while other protocols are sent with no addi-
	 tional data beyond the IP header (unless the  --data-length  option  is
	 specified).

	 This  host  discovery	method looks for either responses using the same
	 protocol as a probe, or ICMP protocol unreachable messages  which  sig-
	 nify  that  the given protocol isn't supported on the destination host.
	 Either type of response signifies that the target host is alive.

     -PR (ARP Ping)
	 One of the most common Nmap usage scenarios is to scan an ethernet LAN.
	 On most LANs, especially those using private address  ranges  specified
	 by  RFC  1918[3],  the  vast majority of IP addresses are unused at any
	 given time. When Nmap tries to send a raw IP packet  such  as	an  ICMP
	 echo request, the operating system must determine the destination hard-
	 ware  (ARP) address corresponding to the target IP so that it can prop-
	 erly address the ethernet frame. This is often  slow  and  problematic,
	 since	operating systems weren't written with the expectation that they
	 would need to do millions of ARP requests against unavailable hosts  in
	 a short time period.

	 ARP  scan  puts  Nmap and its optimized algorithms in charge of ARP re-
	 quests. And if it gets a response back, Nmap doesn't even need to worry
	 about the IP-based ping packets since it already knows the host is  up.
	 This  makes ARP scan much faster and more reliable than IP-based scans.
	 So it is done by default when scanning ethernet hosts that Nmap detects
	 are on a local ethernet network. Even if different ping types (such  as
	 -PE or -PS) are specified, Nmap uses ARP instead for any of the targets
	 which	are  on  the same LAN. If you absolutely don't want to do an ARP
	 scan, specify --send-ip.

     --traceroute (Trace path to host)
	 Traceroutes are performed post-scan using information from the scan re-
	 sults to determine the port and protocol most likely to reach the  tar-
	 get.  It  works with all scan types except connect scans (-sT) and idle
	 scans (-sI). All traces use Nmap's dynamic timing model  and  are  per-
	 formed in parallel.

	 Traceroute works by sending packets with a low TTL (time-to-live) in an
	 attempt  to  elicit  ICMP Time Exceeded messages from intermediate hops
	 between the scanner and the target host. Standard traceroute  implemen-
	 tation  start	with a TTL of 1 and increment the TTL until the destina-
	 tion host is reached. Nmap's traceroute starts with a high TTL and then
	 decrements the TTL until it reaches 0. Doing it backwards lets nmap em-
	 ploy clever caching algorithms to speed up traces over multiple  hosts.
	 On average nmap sends 5-10 fewer packets per host, depending on network
	 conditions.  If  a single subnet is being scanned (i.e. 192.168.0.0/24)
	 nmap may only have to send a single packet to most hosts.

     --reason (Host and port state reasons)
	 Shows the reason each port is set to a specific state	and  the  reason
	 each  host  is  up or down. This option displays the type of the packet
	 that determined a port or hosts state. For example, A RST packet from a
	 closed port or an echo reply from an alive host. The  information  Nmap
	 can provide is determined by the type of scan or ping. The SYN scan and
	 SYN  ping (-sS and -PT) are very detailed, but the TCP connect scan and
	 ping (-sT) are limited by the	implementation	of  the  connect  system
	 call.	This  feature  is automatically enabled by the debug option (-d)
	 and the results are stored in XML log files even if this option is  not
	 specified.

     -n (No DNS resolution)
	 Tells	Nmap  to  never  do  reverse DNS resolution on the active IP ad-
	 dresses it finds. Since DNS can be slow even with Nmap's built-in  par-
	 allel stub resolver, this option can slash scanning times.

     -R (DNS resolution for all targets)
	 Tells	Nmap  to  always  do reverse DNS resolution on the target IP ad-
	 dresses. Normally reverse DNS is only performed against responsive (on-
	 line) hosts.

     --system-dns (Use system DNS resolver)
	 By default, Nmap resolves IP addresses by sending queries  directly  to
	 the  name  servers  configured  on your host and then listening for re-
	 sponses. Many requests (often dozens) are performed in parallel to  im-
	 prove	performance. Specify this option to use your system resolver in-
	 stead (one IP at a time via the getnameinfo() call). This is slower and
	 rarely useful unless you find a  bug  in  the	Nmap  parallel	resolver
	 (please  let us know if you do). The system resolver is always used for
	 IPv6 scans.

     --dns-servers <server1[,server2],...>  (Servers  to  use  for  reverse  DNS
     queries)
	 By  default Nmap will try to determine your DNS servers (for rDNS reso-
	 lution) from your resolv.conf file (Unix) or the Registry (Win32).  Al-
	 ternatively, you may use this option to specify alternate servers. This
	 option  is  not  honored if you are using --system-dns or an IPv6 scan.
	 Using multiple DNS servers is often faster, especially  if  you  choose
	 authoritative	servers  for  your target IP space. This option can also
	 improve stealth, as your requests can be bounced off just about any re-
	 cursive DNS server on the internet.

	 This option also comes in handy when scanning private	networks.  Some-
	 times	only a few name servers provide proper rDNS information, and you
	 may not even know where they are. You can scan the network for port  53
	 (perhaps with version detection), then try Nmap list scans (-sL) speci-
	 fying	each name server one at a time with --dns-servers until you find
	 one which works.

PORT SCANNING BASICS
     While Nmap has grown in functionality over the years, it began as an  effi-
     cient  port scanner, and that remains its core function. The simple command
     nmap target scans more than 1660 TCP ports on the host target.  While  many
     port  scanners  have traditionally lumped all ports into the open or closed
     states, Nmap is much more granular. It divides ports into six states: open,
     closed, filtered, unfiltered, open|filtered, or closed|filtered.

     These states are not intrinsic properties of the port itself, but	describe
     how  Nmap sees them. For example, an Nmap scan from the same network as the
     target may show port 135/tcp as open, while a scan at the	same  time  with
     the same options from across the Internet might show that port as filtered.

     The six port states recognized by Nmap

     open
	 An  application is actively accepting TCP connections or UDP packets on
	 this port. Finding these is often the primary goal  of  port  scanning.
	 Security-minded  people  know	that each open port is an avenue for at-
	 tack. Attackers and pen-testers want to exploit the open  ports,  while
	 administrators  try  to  close  or  protect them with firewalls without
	 thwarting legitimate users. Open ports are also interesting for non-se-
	 curity scans because they show services available for use on  the  net-
	 work.

     closed
	 A  closed  port  is  accessible (it receives and responds to Nmap probe
	 packets), but there is no application listening  on  it.  They  can  be
	 helpful  in showing that a host is up on an IP address (host discovery,
	 or ping scanning), and as part of OS detection.  Because  closed  ports
	 are reachable, it may be worth scanning later in case some open up. Ad-
	 ministrators  may want to consider blocking such ports with a firewall.
	 Then they would appear in the filtered state, discussed next.

     filtered
	 Nmap cannot determine whether the port is open because packet filtering
	 prevents its probes from reaching the port. The filtering could be from
	 a dedicated firewall device, router rules, or host-based firewall soft-
	 ware. These ports frustrate attackers because they  provide  so  little
	 information.  Sometimes  they	respond with ICMP error messages such as
	 type 3 code 13 (destination unreachable: communication administratively
	 prohibited), but filters that simply drop probes without responding are
	 far more common. This forces Nmap to retry several times just	in  case
	 the  probe was dropped due to network congestion rather than filtering.
	 This slows down the scan dramatically.

     unfiltered
	 The unfiltered state means that a port is accessible, but Nmap  is  un-
	 able  to  determine  whether  it  is open or closed. Only the ACK scan,
	 which is used to map firewall	rulesets,  classifies  ports  into  this
	 state.  Scanning  unfiltered ports with other scan types such as Window
	 scan, SYN scan, or FIN scan, may help resolve whether the port is open.

     open|filtered
	 Nmap places ports in this state when it is unable to determine  whether
	 a  port  is  open or filtered. This occurs for scan types in which open
	 ports give no response. The lack of response could  also  mean  that  a
	 packet  filter  dropped  the probe or any response it elicited. So Nmap
	 does not know for sure whether the port is open or being filtered.  The
	 UDP, IP protocol, FIN, null, and Xmas scans classify ports this way.

     closed|filtered
	 This  state  is used when Nmap is unable to determine whether a port is
	 closed or filtered. It is only used for the IP ID idle scan.

PORT SCANNING TECHNIQUES
     As a novice performing automotive repair, I can struggle for  hours  trying
     to  fit  my rudimentary tools (hammer, duct tape, wrench, etc.) to the task
     at hand. When I fail miserably and tow my jalopy to a real mechanic, he in-
     variably fishes around in a huge tool chest until pulling out  the  perfect
     gizmo which makes the job seem effortless. The art of port scanning is sim-
     ilar.  Experts  understand the dozens of scan techniques and choose the ap-
     propriate one (or combination) for a given task.  Inexperienced  users  and
     script  kiddies, on the other hand, try to solve every problem with the de-
     fault SYN scan. Since Nmap is free, the only barrier to port scanning  mas-
     tery  is knowledge. That certainly beats the automotive world, where it may
     take great skill to determine that you need a strut spring compressor, then
     you still have to pay thousands of dollars for it.

     Most of the scan types are only available to privileged users. This is  be-
     cause they send and receive raw packets, which requires root access on Unix
     systems.  Using  an administrator account on Windows is recommended, though
     Nmap sometimes works for unprivileged users on that platform  when  WinPcap
     has  already been loaded into the OS. Requiring root privileges was a seri-
     ous limitation when Nmap was released in 1997, as many users only	had  ac-
     cess  to  shared shell accounts. Now, the world is different. Computers are
     cheaper, far more people have always-on direct Internet access, and desktop
     Unix systems (including Linux and Mac OS X) are prevalent. A  Windows  ver-
     sion  of  Nmap  is now available, allowing it to run on even more desktops.
     For all these reasons, users have less need to run Nmap from limited shared
     shell accounts. This is fortunate, as the privileged options make Nmap  far
     more powerful and flexible.

     While  Nmap  attempts to produce accurate results, keep in mind that all of
     its insights are based on packets returned by the target machines (or fire-
     walls in front of them). Such hosts may be untrustworthy and send responses
     intended to confuse or mislead Nmap. Much more common are non-RFC-compliant
     hosts that do not respond as they should to Nmap  probes.	FIN,  null,  and
     Xmas  scans  are  particularly susceptible to this problem. Such issues are
     specific to certain scan types and so are discussed in the individual  scan
     type entries.

     This  section  documents  the dozen or so port scan techniques supported by
     Nmap. Only one method may be used at a time, except that UDP scan (-sU) may
     be combined with any one of the TCP scan types. As a memory aid, port  scan
     type  options  are of the form -sC, where C is a prominent character in the
     scan name, usually the first. The one exception to this is  the  deprecated
     FTP  bounce scan (-b). By default, Nmap performs a SYN Scan, though it sub-
     stitutes a connect scan if the user does not have proper privileges to send
     raw packets (requires root access on Unix) or if IPv6 targets  were  speci-
     fied. Of the scans listed in this section, unprivileged users can only exe-
     cute connect and FTP bounce scans.

     -sS (TCP SYN scan)
	 SYN  scan is the default and most popular scan option for good reasons.
	 It can be performed quickly, scanning thousands of ports per second  on
	 a fast network not hampered by restrictive firewalls. SYN scan is rela-
	 tively  unobtrusive  and stealthy, since it never completes TCP connec-
	 tions. It also works against any compliant TCP stack  rather  than  de-
	 pending   on	idiosyncrasies	 of   specific	 platforms   as   Nmap's
	 FIN/null/Xmas, Maimon and idle scans do. It also allows clear, reliable
	 differentiation between the open, closed, and filtered states.

	 This technique is often referred to as half-open scanning, because  you
	 don't	open a full TCP connection. You send a SYN packet, as if you are
	 going to open a real connection and then wait for a response. A SYN/ACK
	 indicates the port is listening (open), while a RST (reset) is  indica-
	 tive  of  a  non-listener. If no response is received after several re-
	 transmissions, the port is marked as filtered. The port is also  marked
	 filtered  if  an ICMP unreachable error (type 3, code 1,2, 3, 9, 10, or
	 13) is received.

     -sT (TCP connect scan)
	 TCP connect scan is the default TCP scan type when SYN scan is  not  an
	 option.  This	is  the case when a user does not have raw packet privi-
	 leges or is scanning IPv6 networks. Instead of writing raw  packets  as
	 most  other scan types do, Nmap asks the underlying operating system to
	 establish a connection with the target machine and port by issuing  the
	 connect() system call. This is the same high-level system call that web
	 browsers,  P2P clients, and most other network-enabled applications use
	 to establish a connection. It is part of a programming interface  known
	 as  the Berkeley Sockets API. Rather than read raw packet responses off
	 the wire, Nmap uses this API to obtain status information on each  con-
	 nection attempt.

	 When  SYN  scan  is  available, it is usually a better choice. Nmap has
	 less control over the high level connect() call than with raw	packets,
	 making it less efficient. The system call completes connections to open
	 target  ports	rather than performing the half-open reset that SYN scan
	 does. Not only does this take longer and require more packets to obtain
	 the same information, but target machines are more likely  to	log  the
	 connection.  A  decent IDS will catch either, but most machines have no
	 such alarm system. Many services on your average Unix system will add a
	 note to syslog, and sometimes a cryptic error message, when  Nmap  con-
	 nects	and  then  closes the connection without sending data. Truly pa-
	 thetic services crash when this happens, though that  is  uncommon.  An
	 administrator	who sees a bunch of connection attempts in her logs from
	 a single system should know that she has been connect scanned.

     -sU (UDP scans)
	 While most popular services on the Internet run over the TCP  protocol,
	 UDP[4]  services  are	widely deployed. DNS, SNMP, and DHCP (registered
	 ports 53, 161/162, and 67/68) are three of the most common. Because UDP
	 scanning is generally slower and more difficult than TCP, some security
	 auditors ignore these ports. This is a mistake, as exploitable UDP ser-
	 vices are quite common and attackers certainly don't ignore  the  whole
	 protocol. Fortunately, Nmap can help inventory UDP ports.

	 UDP  scan  is	activated with the -sU option. It can be combined with a
	 TCP scan type such as SYN scan (-sS) to check both protocols during the
	 same run.

	 UDP scan works by sending an empty (no data) UDP header to  every  tar-
	 geted	port.  If an ICMP port unreachable error (type 3, code 3) is re-
	 turned, the port is closed. Other  ICMP  unreachable  errors  (type  3,
	 codes	1,  2,	9, 10, or 13) mark the port as filtered. Occasionally, a
	 service will respond with a UDP packet, proving that it is open. If  no
	 response  is  received after retransmissions, the port is classified as
	 open|filtered. This means that the  port  could  be  open,  or  perhaps
	 packet  filters are blocking the communication. Versions scan (-sV) can
	 be used to help differentiate the truly open ports  from  the	filtered
	 ones.

	 A  big  challenge  with UDP scanning is doing it quickly. Open and fil-
	 tered ports rarely send any response, leaving Nmap to time out and then
	 conduct retransmissions just in case the probe or response  were  lost.
	 Closed  ports	are often an even bigger problem. They usually send back
	 an ICMP port unreachable error. But unlike  the  RST  packets	sent  by
	 closed  TCP ports in response to a SYN or connect scan, many hosts rate
	 limit ICMP port unreachable messages by default. Linux and Solaris  are
	 particularly  strict  about  this. For example, the Linux 2.4.20 kernel
	 limits  destination  unreachable  messages  to  one  per   second   (in
	 net/ipv4/icmp.c).

	 Nmap detects rate limiting and slows down accordingly to avoid flooding
	 the network with useless packets that the target machine will drop. Un-
	 fortunately,  a  Linux-style  limit  of  one  packet per second makes a
	 65,536-port scan take more than 18 hours. Ideas for speeding  your  UDP
	 scans up include scanning more hosts in parallel, doing a quick scan of
	 just  the  popular  ports first, scanning from behind the firewall, and
	 using --host-timeout to skip slow hosts.

     -sN; -sF; -sX (TCP Null, FIN, and Xmas scans)
	 These three scan types (even more are possible with the --scanflags op-
	 tion described in the next section) exploit a subtle  loophole  in  the
	 TCP RFC[5] to differentiate between open and closed ports. Page 65 says
	 that  "if  the [destination] port state is CLOSED .... an incoming seg-
	 ment not containing a RST causes a RST to be sent in  response."   Then
	 the  next  page  discusses  packets sent to open ports without the SYN,
	 RST, or ACK bits set, stating that: "you are unlikely to get here,  but
	 if you do, drop the segment, and return."

	 When scanning systems compliant with this RFC text, any packet not con-
	 taining SYN, RST, or ACK bits will result in a returned RST if the port
	 is  closed  and no response at all if the port is open. As long as none
	 of those three bits are included, any combination of  the  other  three
	 (FIN, PSH, and URG) are OK. Nmap exploits this with three scan types:

	 Null scan (-sN)
	     Does not set any bits (TCP flag header is 0)

	 FIN scan (-sF)
	     Sets just the TCP FIN bit.

	 Xmas scan (-sX)
	     Sets  the	FIN,  PSH,  and URG flags, lighting the packet up like a
	     Christmas tree.

	 These three scan types are exactly the same in behavior except for  the
	 TCP  flags  set in probe packets. If a RST packet is received, the port
	 is considered closed, while no response means it is open|filtered.  The
	 port  is  marked filtered if an ICMP unreachable error (type 3, code 1,
	 2, 3, 9, 10, or 13) is received.

	 The key advantage to these scan types is that they  can  sneak  through
	 certain  non-stateful	firewalls  and packet filtering routers. Another
	 advantage is that these scan types are a little more stealthy than even
	 a SYN scan. Don't count on this though--most modern IDS products can be
	 configured to detect them. The big downside is  that  not  all  systems
	 follow RFC 793 to the letter. A number of systems send RST responses to
	 the  probes  regardless of whether the port is open or not. This causes
	 all of the ports to be labeled closed. Major operating systems that  do
	 this  are  Microsoft Windows, many Cisco devices, BSDI, and IBM OS/400.
	 This scan does work against most  Unix-based  systems	though.  Another
	 downside  of these scans is that they can't distinguish open ports from
	 certain filtered ones, leaving you with the response open|filtered.

     -sA (TCP ACK scan)
	 This scan is different than the others discussed  so  far  in	that  it
	 never	determines open (or even open|filtered) ports. It is used to map
	 out firewall rulesets, determining whether they are stateful or not and
	 which ports are filtered.

	 The ACK scan probe packet has only the ACK flag  set  (unless	you  use
	 --scanflags).	When  scanning unfiltered systems, open and closed ports
	 will both return a RST packet. Nmap then  labels  them  as  unfiltered,
	 meaning that they are reachable by the ACK packet, but whether they are
	 open  or closed is undetermined. Ports that don't respond, or send cer-
	 tain ICMP error messages back (type 3, code 1, 2, 3, 9, 10, or 13), are
	 labeled filtered.

     -sW (TCP Window scan)
	 Window scan is exactly the same as ACK scan except that it exploits  an
	 implementation  detail  of  certain systems to differentiate open ports
	 from closed ones, rather than always printing unfiltered when a RST  is
	 returned.  It	does  this  by examining the TCP Window field of the RST
	 packets returned. On some systems, open ports	use  a	positive  window
	 size  (even  for  RST packets) while closed ones have a zero window. So
	 instead of always listing a port as unfiltered when it receives  a  RST
	 back,	Window	scan  lists the port as open or closed if the TCP Window
	 value in that reset is positive or zero, respectively.

	 This scan relies on an implementation detail of a minority  of  systems
	 out  on  the Internet, so you can't always trust it. Systems that don't
	 support it will usually return all ports closed. Of course, it is  pos-
	 sible	that the machine really has no open ports. If most scanned ports
	 are closed but a few common port numbers (such as 22, 25, 53) are  fil-
	 tered,  the  system  is  most likely susceptible. Occasionally, systems
	 will even show the exact opposite behavior. If  your  scan  shows  1000
	 open  ports  and  3 closed or filtered ports, then those three may very
	 well be the truly open ones.

     -sM (TCP Maimon scan)
	 The Maimon scan is named after its discoverer,  Uriel	Maimon.  He  de-
	 scribed  the  technique  in  Phrack Magazine issue #49 (November 1996).
	 Nmap, which included this technique, was  released  two  issues  later.
	 This technique is exactly the same as null, FIN, and Xmas scans, except
	 that  the probe is FIN/ACK. According to RFC 793[5] (TCP), a RST packet
	 should be generated in response to such a probe  whether  the	port  is
	 open  or  closed.  However, Uriel noticed that many BSD-derived systems
	 simply drop the packet if the port is open.

     --scanflags (Custom TCP scan)
	 Truly advanced Nmap users need not limit themselves to the canned  scan
	 types	offered.  The  --scanflags  option allows you to design your own
	 scan by specifying arbitrary TCP flags. Let your creative juices  flow,
	 while	evading  intrusion  detection systems whose vendors simply paged
	 through the Nmap man page adding specific rules!

	 The --scanflags argument can be a numerical flag value such as  9  (PSH
	 and  FIN),  but  using symbolic names is easier. Just mash together any
	 combination of URG, ACK, PSH, RST, SYN, and FIN. For  example,  --scan-
	 flags	URGACKPSHRSTSYNFIN  sets everything, though it's not very useful
	 for scanning. The order these are specified in is irrelevant.

	 In addition to specifying the desired flags, you can specify a TCP scan
	 type (such as -sA or -sF). That base type tells Nmap how  to  interpret
	 responses.  For example, a SYN scan considers no-response to indicate a
	 filtered port, while a FIN scan treats the same as open|filtered.  Nmap
	 will behave the same way it does for the base scan type, except that it
	 will use the TCP flags you specify instead. If you don't specify a base
	 type, SYN scan is used.

     -sI <zombie host[:probeport]> (idle scan)
	 This advanced scan method allows for a truly blind TCP port scan of the
	 target (meaning no packets are sent to the target from your real IP ad-
	 dress).  Instead,  a unique side-channel attack exploits predictable IP
	 fragmentation ID sequence generation on the zombie host to glean infor-
	 mation about the open ports on the target. IDS systems will display the
	 scan as coming from the zombie machine you specify (which  must  be  up
	 and  meet certain criteria).  This fascinating scan type is too complex
	 to fully describe in this reference guide, so I wrote and posted an in-
	 formal paper with full details at http://nmap.org/book/idlescan.html.

	 Besides being extraordinarily stealthy (due to its blind nature),  this
	 scan  type permits mapping out IP-based trust relationships between ma-
	 chines. The port listing shows open ports from the perspective  of  the
	 zombie  host.	 So  you can try scanning a target using various zombies
	 that you think might be trusted (via router/packet filter rules).

	 You can add a colon followed by a port number to the zombie host if you
	 wish to probe a particular port on the zombie for IP ID changes. Other-
	 wise Nmap will use the port it uses by default for TCP pings (80).

     -sO (IP protocol scan)
	 IP protocol scan allows you to determine which IP protocols (TCP, ICMP,
	 IGMP, etc.) are supported by target machines. This isn't technically  a
	 port  scan, since it cycles through IP protocol numbers rather than TCP
	 or UDP port numbers. Yet it still uses the -p option to select  scanned
	 protocol numbers, reports its results within the normal port table for-
	 mat,  and  even  uses	the same underlying scan engine as the true port
	 scanning methods. So it is close enough to a port scan that it  belongs
	 here.

	 Besides  being  useful in its own right, protocol scan demonstrates the
	 power of open source software. While the  fundamental	idea  is  pretty
	 simple,  I had not thought to add it nor received any requests for such
	 functionality. Then in the summer of 2000, Gerhard Rieger conceived the
	 idea, wrote an excellent patch implementing it,  and  sent  it  to  the
	 nmap-hackers mailing list. I incorporated that patch into the Nmap tree
	 and released a new version the next day. Few pieces of commercial soft-
	 ware  have users enthusiastic enough to design and contribute their own
	 improvements!

	 Protocol scan works in a similar fashion to UDP scan. Instead of  iter-
	 ating through the port number field of a UDP packet, it sends IP packet
	 headers  and  iterates through the 8-bit IP protocol field. The headers
	 are usually empty, containing no data and not even  the  proper  header
	 for  the claimed protocol. The three exceptions are TCP, UDP, and ICMP.
	 A proper protocol header for those is included since some systems won't
	 send them otherwise and because Nmap already has  functions  to  create
	 them.	Instead of watching for ICMP port unreachable messages, protocol
	 scan is on the lookout for ICMP protocol unreachable messages. If  Nmap
	 receives  any response in any protocol from the target host, Nmap marks
	 that protocol as open. An ICMP protocol unreachable error (type 3, code
	 2) causes the protocol to be marked as closed	Other  ICMP  unreachable
	 errors  (type	3,  code  1,  3,  9, 10, or 13) cause the protocol to be
	 marked filtered (though they prove that ICMP is open at the same time).
	 If no response is  received  after  retransmissions,  the  protocol  is
	 marked open|filtered

     -b <FTP relay host> (FTP bounce scan)
	 An  interesting feature of the FTP protocol (RFC 959[6]) is support for
	 so-called proxy FTP connections. This allows a user to connect  to  one
	 FTP server, then ask that files be sent to a third-party server. Such a
	 feature  is  ripe for abuse on many levels, so most servers have ceased
	 supporting it. One of the abuses this feature allows is causing the FTP
	 server to port scan other hosts. Simply ask the FTP server  to  send  a
	 file  to each interesting port of a target host in turn. The error mes-
	 sage will describe whether the port is open or not. This is a good  way
	 to bypass firewalls because organizational FTP servers are often placed
	 where they have more access to other internal hosts than any old Inter-
	 net  host  would.  Nmap supports FTP bounce scan with the -b option. It
	 takes an argument of the form username:password@server:port.  Server is
	 the name or IP address of a vulnerable FTP server.  As  with  a  normal
	 URL, you may omit username:password, in which case anonymous login cre-
	 dentials (user: anonymous password:-wwwuser@) are used. The port number
	 (and preceding colon) may be omitted as well, in which case the default
	 FTP port (21) on server is used.

	 This  vulnerability  was widespread in 1997 when Nmap was released, but
	 has largely been fixed. Vulnerable servers are still around, so  it  is
	 worth trying when all else fails. If bypassing a firewall is your goal,
	 scan  the target network for open port 21 (or even for any FTP services
	 if you scan all ports with version detection), then try a  bounce  scan
	 using	each.  Nmap will tell you whether the host is vulnerable or not.
	 If you are just trying to cover your tracks, you don't need to (and, in
	 fact, shouldn't) limit yourself to hosts on the target network.  Before
	 you  go  scanning random Internet addresses for vulnerable FTP servers,
	 consider that sysadmins may not appreciate you abusing their servers in
	 this way.

PORT SPECIFICATION AND SCAN ORDER
     In addition to all of the scan methods discussed  previously,  Nmap  offers
     options  for  specifying which ports are scanned and whether the scan order
     is randomized or sequential. By default, Nmap scans all ports up to and in-
     cluding 1024 as well as higher numbered ports listed in  the  nmap-services
     file for the protocol(s) being scanned.

     -p <port ranges> (Only scan specified ports)
	 This  option  specifies  which ports you want to scan and overrides the
	 default. Individual port numbers are OK, as are ranges separated  by  a
	 hyphen (e.g. 1-1023). The beginning and/or end values of a range may be
	 omitted,  causing  Nmap  to  use  1 and 65535, respectively. So you can
	 specify -p- to scan ports from 1 through 65535. Scanning port	zero  is
	 allowed  if  you specify it explicitly. For IP protocol scanning (-sO),
	 this option specifies	the  protocol  numbers	you  wish  to  scan  for
	 (0-255).

	 When scanning both TCP and UDP ports, you can specify a particular pro-
	 tocol	by  preceding  the port numbers by T: or U:. The qualifier lasts
	 until you specify another  qualifier.	For  example,  the  argument  -p
	 U:53,111,137,T:21-25,80,139,8080  would  scan UDP ports 53,111,and 137,
	 as well as the listed TCP ports. Note that to scan both UDP & TCP,  you
	 have  to  specify -sU and at least one TCP scan type (such as -sS, -sF,
	 or -sT). If no protocol qualifier is given, the port numbers are  added
	 to all protocol lists.

	 Ports	can  also be specified by name according to what the port is re-
	 ferred to in the nmap-services. You can even use the wildcards * and  ?
	 with  the names. For example, to scan FTP and all ports whose names be-
	 gin with http, use -p ftp,http*. Be careful about shell expansions  and
	 quote the argument to -p if unsure.

	 Ranges  of ports can be surrounded by square brackets to indicate ports
	 inside that range that appear in nmap-services. For example,  the  fol-
	 lowing  will scan all ports in nmap-services equal to or below 1024: -p
	 [-1024]. Be careful with shell expansions and quote the argument to  -p
	 if unsure.

     -F (Fast (limited port) scan)
	 Specifies  that you only wish to scan for ports listed in the nmap-ser-
	 vices file which comes with nmap (or the protocols file for -sO).  This
	 is  much  faster  than scanning all 65535 ports on a host. Because this
	 list contains so many TCP ports (more than 1200), the speed  difference
	 from  a default TCP scan (about 1650 ports) isn't dramatic. The differ-
	 ence can be enormous if you specify your own  tiny  nmap-services  file
	 using the --servicedb or --datadir options.

     -r (Don't randomize ports)
	 By default, Nmap randomizes the scanned port order (except that certain
	 commonly  accessible  ports are moved near the beginning for efficiency
	 reasons). This randomization is normally desirable, but you can specify
	 -r for sequential port scanning instead.

SERVICE AND VERSION DETECTION
     Point Nmap at a remote machine and it might tell  you  that  ports  25/tcp,
     80/tcp,  and  53/udp  are	open.  Using its nmap-services database of about
     2,200 well-known services, Nmap would report that those ports probably cor-
     respond to a mail server (SMTP), web server (HTTP), and name  server  (DNS)
     respectively. This lookup is usually accurate--the vast majority of daemons
     listening	on  TCP  port 25 are, in fact, mail servers. However, you should
     not bet your security on this! People can and do run  services  on  strange
     ports.

     Even  if  Nmap is right, and the hypothetical server above is running SMTP,
     HTTP, and DNS servers, that is not a lot of information. When doing vulner-
     ability assessments (or even simple network inventories) of your  companies
     or clients, you really want to know which mail and DNS servers and versions
     are running. Having an accurate version number helps dramatically in deter-
     mining  which  exploits  a server is vulnerable to. Version detection helps
     you obtain this information.

     After TCP and/or UDP ports are discovered using one of the other scan meth-
     ods, version detection interrogates those ports  to  determine  more  about
     what  is actually running. The nmap-service-probes database contains probes
     for querying various services and match expressions to recognize and  parse
     responses.  Nmap  tries  to  determine the service protocol (e.g. FTP, SSH,
     telnet, HTTP), the application name (e.g. ISC BIND, Apache  httpd,  Solaris
     telnetd), the version number, hostname, device type (e.g. printer, router),
     the  OS  family  (e.g.  Windows, Linux) and sometimes miscellaneous details
     like whether an X server is open to connections, the SSH protocol	version,
     or the KaZaA user name). Of course, most services don't provide all of this
     information.  If Nmap was compiled with OpenSSL support, it will connect to
     SSL servers to deduce the service listening behind that  encryption  layer.
     When  RPC	services are discovered, the Nmap RPC grinder (-sR) is automati-
     cally used to determine the RPC program and version numbers. Some UDP ports
     are left in the open|filtered state after a UDP port scan is unable to  de-
     termine whether the port is open or filtered. Version detection will try to
     elicit  a	response from these ports (just as it does with open ports), and
     change the state to open if  it  succeeds.   open|filtered  TCP  ports  are
     treated  the  same way. Note that the Nmap -A option enables version detec-
     tion among other things.  A paper documenting the workings, usage, and cus-
     tomization     of	   version	detection      is      available      at
     http://nmap.org/book/vscan.html.

     When  Nmap  receives  responses from a service but cannot match them to its
     database, it prints out a special fingerprint and a URL for you  to  submit
     if  to if you know for sure what is running on the port. Please take a cou-
     ple minutes to make the submission so that your find can benefit  everyone.
     Thanks  to these submissions, Nmap has about 3,000 pattern matches for more
     than 350 protocols such as SMTP, FTP, HTTP, etc.

     Version detection is enabled and controlled with the following options:

     -sV (Version detection)
	 Enables version detection, as discussed above. Alternatively,	you  can
	 use -A, which enables version detection among other things.

     --allports (Don't exclude any ports from version detection)
	 By  default,  Nmap  version  detection skips TCP port 9100 because some
	 printers simply print anything sent to that port, leading to dozens  of
	 pages	of HTTP GET requests, binary SSL session requests, etc. This be-
	 havior can be changed by modifying or removing the Exclude directive in
	 nmap-service-probes, or you can specify --allports to	scan  all  ports
	 regardless of any Exclude directive.

     --version-intensity <intensity> (Set version scan intensity)
	 When  performing  a  version scan (-sV), nmap sends a series of probes,
	 each of which	is  assigned  a  rarity  value	between  1  and  9.  The
	 lower-numbered  probes  are  effective against a wide variety of common
	 services, while the higher numbered ones are rarely useful. The  inten-
	 sity  level  specifies  which	probes should be applied. The higher the
	 number, the more likely it is the service will be correctly identified.
	 However, high intensity scans take longer. The intensity  must  be  be-
	 tween 0 and 9. The default is 7. When a probe is registered to the tar-
	 get  port  via  the  nmap-service-probes ports directive, that probe is
	 tried regardless of intensity level. This ensures that the  DNS  probes
	 will  always  be attempted against any open port 53, the SSL probe will
	 be done against 443, etc.

     --version-light (Enable light mode)
	 This is a convenience alias for --version-intensity 2. This light  mode
	 makes	version  scanning much faster, but it is slightly less likely to
	 identify services.

     --version-all (Try every single probe)
	 An alias for --version-intensity 9, ensuring that every single probe is
	 attempted against each port.

     --version-trace (Trace version scan activity)
	 This causes Nmap to print out extensive debugging info about what  ver-
	 sion  scanning  is  doing.  It  is  a	subset	of  what  you  get  with
	 --packet-trace.

     -sR (RPC scan)
	 This method works in conjunction with the various port scan methods  of
	 Nmap.	It  takes  all the TCP/UDP ports found open and floods them with
	 SunRPC program NULL commands in an attempt to	determine  whether  they
	 are  RPC  ports,  and if so, what program and version number they serve
	 up. Thus you can effectively obtain the same info as rpcinfo -p even if
	 the target's portmapper is behind a firewall (or protected by TCP wrap-
	 pers). Decoys do not currently work with RPC scan.  This  is  automati-
	 cally	enabled  as  part  of version scan (-sV) if you request that. As
	 version detection includes this and is much more comprehensive, -sR  is
	 rarely needed.

OS DETECTION
     One of Nmap's best-known features is remote OS detection using TCP/IP stack
     fingerprinting.  Nmap  sends  a series of TCP and UDP packets to the remote
     host and examines practically every bit in the responses. After  performing
     dozens of tests such as TCP ISN sampling, TCP options support and ordering,
     IP  ID  sampling,	and the initial window size check, Nmap compares the re-
     sults to its nmap-os-db database of more than 800 known OS fingerprints and
     prints out the OS details if there is a match. Each fingerprint includes  a
     freeform textual description of the OS, and a classification which provides
     the  vendor  name	(e.g.  Sun), underlying OS (e.g. Solaris), OS generation
     (e.g. 10), and device type (general purpose, router, switch, game	console,
     etc).

     If  Nmap  is  unable  to guess the OS of a machine, and conditions are good
     (e.g. at least one open port and one closed port  were  found),  Nmap  will
     provide  a URL you can use to submit the fingerprint if you know (for sure)
     the OS running on the machine. By doing this you contribute to the pool  of
     operating	systems  known	to  Nmap  and  thus it will be more accurate for
     everyone.

     OS detection enables several other tests which make use of information that
     is gathered during the process anyway. One of these is uptime  measurement,
     which  uses  the TCP timestamp option (RFC 1323[7]) to guess when a machine
     was last rebooted. This is only reported for machines  which  provide  this
     information.  Another  is	TCP Sequence Predictability Classification. This
     measures approximately how hard it is to establish a forged TCP  connection
     against  the remote host. It is useful for exploiting source-IP based trust
     relationships (rlogin, firewall filters, etc) or for hiding the  source  of
     an attack. This sort of spoofing is rarely performed any more, but many ma-
     chines are still vulnerable to it. The actual difficulty number is based on
     statistical  sampling  and may fluctuate. It is generally better to use the
     English classification such as "worthy challenge" or "trivial  joke".  This
     is  only  reported in normal output in verbose (-v) mode. When verbose mode
     is enabled along with -O, IP ID sequence generation is also reported.  Most
     machines  are  in	the "incremental" class, which means that they increment
     the ID field in the IP header for each packet they send.  This  makes  them
     vulnerable to several advanced information gathering and spoofing attacks.

     A	paper documenting the workings, usage, and customization of OS detection
     is available at http://nmap.org/book/osdetect.html.

     OS detection is enabled and controlled with the following options:

     -O (Enable OS detection)
	 Enables OS detection, as discussed above. Alternatively, you can use -A
	 to enable OS detection along with other things.

     --osscan-limit (Limit OS detection to promising targets)
	 OS detection is far more effective if at least one open and one  closed
	 TCP  port  are found. Set this option and Nmap will not even try OS de-
	 tection against hosts that do not meet this  criteria.  This  can  save
	 substantial time, particularly on -PN scans against many hosts. It only
	 matters when OS detection is requested with -O or -A.

     --osscan-guess; --fuzzy (Guess OS detection results)
	 When  Nmap  is unable to detect a perfect OS match, it sometimes offers
	 up near-matches as possibilities. The match has to be	very  close  for
	 Nmap  to  do this by default. Either of these (equivalent) options make
	 Nmap guess more aggressively. Nmap will still tell you when  an  imper-
	 fect match is printed and display its confidence level (percentage) for
	 each guess.

     --max-os-tries (Set the maximum number of OS detection tries against a tar-
     get)
	 When  Nmap  performs  OS detection against a target and fails to find a
	 perfect match, it usually repeats the attempt. By default,  Nmap  tries
	 five  times  if conditions are favorable for OS fingerprint submission,
	 and  twice  when  conditions  aren't  so  good.  Specifying   a   lower
	 --max-os-tries value (such as 1) speeds Nmap up, though you miss out on
	 retries  which could potentially identify the OS. Alternatively, a high
	 value may be set to allow even more retries when conditions are  favor-
	 able.	This  is rarely done, except to generate better fingerprints for
	 submission and integration into the Nmap OS database.

NMAP SCRIPTING ENGINE (NSE)
     The Nmap Scripting Engine (NSE) combines the efficiency of  Nmap's  network
     handling with the versatility of the lightweight scripting language Lua[8],
     thus providing innumerable opportunities. A more extensive documentation of
     the NSE (including its API) can be found at http://nmap.org/book/nse.html.

     The target of the NSE is to provide Nmap with a flexible infrastructure for
     extending	its capabilities and offering its users a simple way of creating
     customized tests. Uses for the NSE include (but definitely are not  limited
     to):

     Enhanced  version	detection  (category version)--While Nmap already offers
     its Service and Version detection system, which is unmatched  in  terms  of
     efficiency and scope, this power has its downside when it comes to services
     requiring	more  complex  probes. The Skype-Protocol version 2 for instance
     can be identified by sending 2 independent probes to it, which the built-in
     system is not laid out for: a simple NSE-script can do the job  and  update
     the port's service information.

     Malware-detection	(category malware)--Both attackers and worms often leave
     backdoors--be it in form of SMTP-servers listening on uncommon ports mostly
     used by spammers for mail relay, or in form of an FTP-server giving  crack-
     ers  access  to critical data. A few lines of Lua code can help to identify
     those loopholes easily.

     Vulnerability Detection (category vuln)--NSE's capacity in detecting  risks
     ranges  from testing whether an SMTP server supports relaying mail from ar-
     bitrary domains to testing whether an HTTP server is vulnerable  to  direc-
     tory traversal attacks.

     Determination  of	Authentication	Credentials  (category auth)--NSE can be
     used for determining authentication credentials on the  target's  services,
     with a common method being brute-force attack.

     Network Discovery and Information Gathering (categories safe, intrusive and
     discovery)--By  providing	you with a scripting language and a really effi-
     cient asynchronous network API on the one hand and the information gathered
     during earlier stages of a scan on the other hand	the  NSE  is  suited  to
     write client programs for the services listening on a target machine. These
     clients  may  collect  information  like: listings of available NFS/SMB/RPC
     shares, the number of channels of an irc-network  or  currently  logged  on
     users.

     To reflect those different uses and to simplify the choice of which scripts
     to run, each script contains a field associating it with one or more of the
     above  mentioned categories. To maintain the matching from scripts to cate-
     gories a file called script.db is	installed  along  with	the  distributed
     scripts.  Therefore,  if  you, for example, want to see if a machine is in-
     fected by any worm Nmap provides a script	for  you  can  simply  run  nmap
     --script=malware  target-ip  and  check  the output afterwards. The version
     scripts are always run implicitly when  a	script-scan  is  requested.  The
     script.db	 is   a  Lua-script  itself  and  can  be  updated  through  the
     --script-updatedb option.

     A NSE-script basically is a chunk of Lua-code which has (among some  infor-
     mational  fields, like name, id and categories) 2 functions: a test whether
     the particular script should be run against a certain host or port  (called
     a hostrule or portrule respectively) and an action to be carried out if the
     test returns true. Scripts have access to most information gathered by Nmap
     during earlier stages. For each host this includes the IP address, hostname
     and  (if  available) operating system. If a script is targeted at a port it
     has access to the portnumber, the protocol (tcp, udp or ssl),  the  service
     running  behind  that port, and optionally information from a version-scan.
     NSE scripts by convention have an nse extension. Although you are	not  re-
     quired  to  follow this for the moment, this may change in the future. Nmap
     will issue a warning if a file has any other extension. More extensive doc-
     umentation on the NSE, including a description of its API can be  found  at
     http://nmap.org/book/nse.html.

     -sC
	 Performs  a script scan using the default set of scripts. It is equiva-
	 lent to --script=default. Some of the scripts in this category are con-
	 sidered intrusive and should not be run against a target network  with-
	 out permission.

     --script <script-categories|directory|filename|all>
	 Runs  a  script scan (like -sC) with the scripts you have chosen rather
	 than the defaults. Arguments can be script categories,  single  scripts
	 or  directories  with	scripts  which	are to be run against the target
	 hosts instead of the default set. Nmap will try to interpret the  argu-
	 ments	at  first  as categories and afterwards as files or directories.
	 Absolute paths are used as is, relative paths are searched in the  fol-
	 lowing places until found:

	 --datadir/;  $(NMAPDIR)/;  ~user/nmap/ (not searched on Windows); NMAP-
	 DATADIR/ or ./. A scripts/ subdirectory is also tried in each of these.
	 Give the argument all to execute all scripts in the Nmap  script  data-
	 base.

	 If  a directory is specified and found, Nmap loads all NSE scripts (any
	 filenames with the nse extension) from that directory. They  must  have
	 the  filename	extension nse. Nmap does not recurse into subdirectories
	 to find scripts. When individual file names are specified, the file ex-
	 tension does not have to be nse.

	 Nmap scripts are stored in a scripts subdirectory of the Nmap data  di-
	 rectory  by  default.	Scripts  are  indexed  in  a  database stored in
	 scripts/script.db. The database lists all of the scripts in each  cate-
	 gory. A single script may be in several categories.

     --script-args <name1=value1,name2={name3=value3},name4=value4>
	 lets  you  provide  arguments	to  NSE-scripts. Arguments are passed as
	 name=value pairs. The provided argument is processed and stored  inside
	 a  Lua  table, to which all scripts have access. The names are taken as
	 strings (which must be alphanumeric values) and used as keys inside the
	 argument-table. Values are either strings or  tables  themselves  (sur-
	 rounded  by  `{'  and `}'. Subtables make it possible to override argu-
	 ments for specific scripts (e.g. when you want to provide different lo-
	 gin/password pairs for different scripts). For example, you could  pass
	 the   comma-separated	 arguments:   user=bar,password=foo,  and  anon-
	 FTP={password=nobody@foobar.com}. If you want to override an option  to
	 a  script,  you  should  index the subtable with the script's id, since
	 this is the only way the script knows about its special argument.

     --script-trace
	 This option does what --packet-trace does, just one ISO  layer  higher.
	 If  this  option  is  specified all incoming and outgoing communication
	 performed by a script is printed. The	displayed  information	includes
	 the  communication protocol, the source, the target and the transmitted
	 data. If more than 5% of all transmitted data is  not	printable,  then
	 the trace output is in a hex dump format.

     --script-updatedb
	 updates  the  script database which stores a mapping from category tags
	 to filenames. The database is a Lua script which is interpreted once to
	 choose a set of scripts from the categories provided  to  the	--script
	 argument.  It should be run if you have changed the categories field of
	 a script, if you have added new scripts or if you have removed  scripts
	 from the scripts/ directory.

TIMING AND PERFORMANCE
     One  of my highest Nmap development priorities has always been performance.
     A default scan (nmap hostname) of a host on my local network takes a  fifth
     of  a second. That is barely enough time to blink, but adds up when you are
     scanning tens or hundreds of thousands of hosts. Moreover, certain scan op-
     tions such as UDP scanning and version detection can  increase  scan  times
     substantially.  So  can  certain  firewall configurations, particularly re-
     sponse rate limiting. While Nmap utilizes parallelism and many advanced al-
     gorithms to accelerate these scans, the user has ultimate control over  how
     Nmap  runs.  Expert  users carefully craft Nmap commands to obtain only the
     information they care about while meeting their time constraints.

     Techniques for improving scan times include  omitting  non-critical  tests,
     and  upgrading  to the latest version of Nmap (performance enhancements are
     made frequently). Optimizing timing parameters can also make a  substantial
     difference. Those options are listed below.

     Some  options accept a time parameter. This is specified in milliseconds by
     default, though you can append `s', `m', or `h' to  the  value  to  specify
     seconds,  minutes,  or hours. So the --host-timeout arguments 900000, 900s,
     and 15m all do the same thing.

     --min-hostgroup <numhosts>;  --max-hostgroup  <numhosts>  (Adjust	parallel
     scan group sizes)
	 Nmap  has  the  ability  to port scan or version scan multiple hosts in
	 parallel. Nmap does this by dividing the target IP  space  into  groups
	 and  then  scanning  one group at a time. In general, larger groups are
	 more efficient. The downside is that host results can't be provided un-
	 til the whole group is finished. So if Nmap started out  with	a  group
	 size  of 50, the user would not receive any reports (except for the up-
	 dates offered in verbose mode) until the first 50 hosts are completed.

	 By default, Nmap takes a  compromise  approach  to  this  conflict.  It
	 starts  out  with a group size as low as five so the first results come
	 quickly and then increases the groupsize to as high as 1024. The  exact
	 default  numbers  depend  on the options given. For efficiency reasons,
	 Nmap uses larger group sizes for UDP or few-port TCP scans.

	 When a maximum group size is specified with --max-hostgroup, Nmap  will
	 never exceed that size. Specify a minimum size with --min-hostgroup and
	 Nmap  will  try  to keep group sizes above that level. Nmap may have to
	 use smaller groups than you specify if  there	are  not  enough  target
	 hosts	left on a given interface to fulfill the specified minimum. Both
	 may be set to keep the group size within a specific range, though  this
	 is rarely desired.

	 These	options do not have an effect during the host discovery phase of
	 a scan. This includes plain ping scans  (-sP).  Host  discovery  always
	 works in large groups of hosts to improve speed and accuracy.

	 The  primary  use  of these options is to specify a large minimum group
	 size so that the full scan runs more quickly. A common choice is 256 to
	 scan a network in Class C sized chunks. For a scan with many ports, ex-
	 ceeding that number is unlikely to help much. For scans of just  a  few
	 port numbers, host group sizes of 2048 or more may be helpful.

     --min-parallelism	<numprobes>; --max-parallelism <numprobes> (Adjust probe
     parallelization)
	 These options control the total number of probes that may be  outstand-
	 ing  for a host group. They are used for port scanning and host discov-
	 ery. By default, Nmap calculates  an  ever-changing  ideal  parallelism
	 based	on network performance. If packets are being dropped, Nmap slows
	 down and allows fewer outstanding probes. The ideal probe number slowly
	 rises as the network proves itself worthy. These options place  minimum
	 or  maximum  bounds on that variable. By default, the ideal parallelism
	 can drop to 1 if the network proves unreliable and rise to several hun-
	 dred in perfect conditions.

	 The most common usage is to set --min-parallelism to  a  number  higher
	 than one to speed up scans of poorly performing hosts or networks. This
	 is a risky option to play with, as setting it too high may affect accu-
	 racy.	Setting  this also reduces Nmap's ability to control parallelism
	 dynamically based on network conditions. A value of ten might	be  rea-
	 sonable, though I only adjust this value as a last resort.

	 The  --max-parallelism  option  is sometimes set to one to prevent Nmap
	 from sending more than one probe at a time to hosts. This can be useful
	 in combination with --scan-delay (discussed later), although the latter
	 usually serves the purpose well enough by itself.

     --min-rtt-timeout <time>, --max-rtt-timeout  <time>,  --initial-rtt-timeout
     <time> (Adjust probe timeouts)
	 Nmap maintains a running timeout value for determining how long it will
	 wait for a probe response before giving up or retransmitting the probe.
	 This  is  calculated based on the response times of previous probes. If
	 the network latency shows itself to be significant and  variable,  this
	 timeout  can  grow to several seconds. It also starts at a conservative
	 (high) level and may stay that way for a while when  Nmap  scans  unre-
	 sponsive hosts.

	 Specifying a lower --max-rtt-timeout and --initial-rtt-timeout than the
	 defaults  can	cut  scan times significantly. This is particularly true
	 for pingless (-PN) scans, and those against heavily filtered  networks.
	 Don't	get  too aggressive though. The scan can end up taking longer if
	 you specify such a low value that many probes are timing  out	and  re-
	 transmitting while the response is in transit.

	 If  all the hosts are on a local network, 100 milliseconds is a reason-
	 able aggressive --max-rtt-timeout value. If routing is involved, ping a
	 host on the network first with the ICMP ping utility, or with a  custom
	 packet  crafter  such	as  hping2  that is more likely to get through a
	 firewall. Look at the maximum round trip time out of ten packets or so.
	 You might want to double that for the --initial-rtt-timeout and  triple
	 or  quadruple	it for the --max-rtt-timeout. I generally do not set the
	 maximum RTT below 100 ms, no matter what the ping times are. Nor  do  I
	 exceed 1000 ms.

	 --min-rtt-timeout  is	a rarely used option that could be useful when a
	 network is so unreliable that even Nmap's default  is	too  aggressive.
	 Since	Nmap  only reduces the timeout down to the minimum when the net-
	 work seems to be reliable, this need is unusual and should be	reported
	 as a bug to the nmap-dev mailing list.

     --max-retries <numtries> (Specify the maximum number of port scan probe re-
     transmissions)
	 When  Nmap receives no response to a port scan probe, it could mean the
	 port is filtered. Or maybe the probe or response was simply lost on the
	 network. It is also possible that the target host has rate limiting en-
	 abled that temporarily blocked the response. So Nmap tries again by re-
	 transmitting the initial probe. If Nmap detects poor network  reliabil-
	 ity,  it may try many more times before giving up on a port. While this
	 benefits accuracy, it also lengthen scan  times.  When  performance  is
	 critical,  scans  may	be sped up by limiting the number of retransmis-
	 sions allowed. You can even specify --max-retries 0 to prevent any  re-
	 transmissions, though that is rarely recommended.

	 The default (with no -T template) is to allow ten retransmissions. If a
	 network  seems reliable and the target hosts aren't rate limiting, Nmap
	 usually only does one retransmission. So most target scans aren't  even
	 affected  by  dropping --max-retries to a low value such as three. Such
	 values can substantially speed scans of slow (rate limited) hosts.  You
	 usually lose some information when Nmap gives up on ports early, though
	 that  may be preferable to letting the --host-timeout expire and losing
	 all information about the target.

     --host-timeout <time> (Give up on slow target hosts)
	 Some hosts simply take a long time to scan. This may be due  to  poorly
	 performing  or  unreliable networking hardware or software, packet rate
	 limiting, or a restrictive firewall. The slowest  few	percent  of  the
	 scanned  hosts  can eat up a majority of the scan time. Sometimes it is
	 best to cut  your  losses  and  skip  those  hosts  initially.  Specify
	 --host-timeout with the maximum amount of time you are willing to wait.
	 I often specify 30m to ensure that Nmap doesn't waste more than half an
	 hour  on  a  single host. Note that Nmap may be scanning other hosts at
	 the same time during that half an hour as well, so it isn't a	complete
	 loss. A host that times out is skipped. No port table, OS detection, or
	 version detection results are printed for that host.

     --scan-delay <time>; --max-scan-delay <time> (Adjust delay between probes)
	 This  option  causes Nmap to wait at least the given amount of time be-
	 tween each probe it sends to a given host. This is particularly  useful
	 in the case of rate limiting. Solaris machines (among many others) will
	 usually  respond  to  UDP scan probe packets with only one ICMP message
	 per second. Any more than  that  sent	by  Nmap  will	be  wasteful.  A
	 --scan-delay  of 1s will keep Nmap at that slow rate. Nmap tries to de-
	 tect rate limiting and  adjust  the  scan  delay  accordingly,  but  it
	 doesn't  hurt	to  specify  it explicitly if you already know what rate
	 works best.

	 When Nmap adjusts the scan delay upward to cope with rate limiting, the
	 scan slows down dramatically. The --max-scan-delay option specifies the
	 largest delay that Nmap will allow. Setting this value too low can lead
	 to wasteful packet retransmissions and possible missed ports  when  the
	 target implements strict rate limiting.

	 Another  use  of --scan-delay is to evade threshold based intrusion de-
	 tection and prevention systems (IDS/IPS).

     --min-rate <number> (Specify a minimum scanning rate)
	 Nmap's dynamic timing does a good job of finding an  appropriate  speed
	 at  which to scan. Sometimes, however, you may happen to know an appro-
	 priate scanning rate for a network, or you may have to guarantee that a
	 scan will be finished by a certain time. When the --min-rate option  is
	 given	Nmap will do its best to send packets as fast or faster than the
	 given rate. The argument is  a  positive  real  number  representing  a
	 packet  rate  in packets per second. For example, specifying --min-rate
	 300 means that Nmap will try to keep the sending rate at or  above  300
	 packets  per  second. Specifying a minimum rate does not keep Nmap from
	 going faster if conditions warrant.

	 There are two conditions when the actual scanning rate may  fall  below
	 the  specified  minimum. The first is if the minimum is faster than the
	 fastest rate at which Nmap can send, which is dependent on hardware. In
	 this case Nmap will send packets as fast as possible, but be aware that
	 such high rates are likely to cause a loss of accuracy. The second case
	 is when Nmap has nothing to send, for example at the end of a scan when
	 the last probes have been sent and Nmap is waiting for them to time out
	 or be responded to. It's normal to see the scanning rate  drop  at  the
	 end of a scan or in between groups of hosts.

	 Specifying  a	minimum  rate  should be done with care. Scanning faster
	 than a network can support may lead to a  loss  of  accuracy.	In  some
	 cases,  using	a  faster rate can make a scan take longer than it would
	 with a slower rate. This is because Nmap's adaptive retransmission will
	 detect the network congestion caused by an excessive scanning rate  and
	 increase the number of retransmissions in order to improve accuracy. So
	 even  though  packets	are sent at a higher rate, more packets are sent
	 overall. Cap the number of retransmissions with the  --max-retries  op-
	 tion if you need to set an upper limit on total scan time.

	 The --min-rate option is global, affecting an entire scan, not individ-
	 ual  hosts.  It  only affects port and host discovery scans. Other fea-
	 tures like OS detection implement their own timing.

     --defeat-rst-ratelimit
	 Many hosts have long used rate limiting to reduce the	number	of  ICMP
	 error	messages  (such as port-unreachable errors) they send. Some sys-
	 tems now apply similar rate limits to the RST (reset) packets they gen-
	 erate. This can slow Nmap down dramatically as it adjusts its timing to
	 reflect those rate limits. You can tell Nmap to ignore those rate  lim-
	 its  (for  port scans such as SYN scan which don't treat non-responsive
	 ports as open) by specifying --defeat-rst-ratelimit.

	 Using this option can	reduce	accuracy,  as  some  ports  will  appear
	 non-responsive  because Nmap didn't wait long enough for a rate-limited
	 RST response. With a SYN scan, the non-response results in the port be-
	 ing labeled filtered rather than the closed state we see when RST pack-
	 ets are received. This optional is useful when you only care about open
	 ports, and distinguishing between closed and filtered ports isn't worth
	 the extra time.

     -T <paranoid|sneaky|polite|normal|aggressive|insane>  (Set  a  timing  tem-
     plate)
	 While	the  fine-grained timing controls discussed in the previous sec-
	 tion are powerful and effective, some people find them confusing. More-
	 over, choosing the appropriate values can sometimes take more time than
	 the scan you are trying to optimize. So Nmap offers a simpler approach,
	 with six timing templates. You can specify them with the -T option  and
	 their	number (0-5) or their name. The template names are paranoid (0),
	 sneaky (1), polite (2), normal (3), aggressive (4), and insane (5). The
	 first two are for IDS evasion. Polite mode slows down the scan  to  use
	 less bandwidth and target machine resources. Normal mode is the default
	 and  so -T3 does nothing. Aggressive mode speeds scans up by making the
	 assumption that you are on a reasonably fast and reliable network.  Fi-
	 nally	insane mode assumes that you are on an extraordinarily fast net-
	 work or are willing to sacrifice some accuracy for speed.

	 These templates allow the user to specify how aggressive they	wish  to
	 be,  while  leaving Nmap to pick the exact timing values. The templates
	 also make some minor speed adjustments for which  fine-grained  control
	 options  do not currently exist. For example, -T4 prohibits the dynamic
	 scan delay from exceeding 10 ms for TCP ports and -T5 caps  that  value
	 at  5 ms.  Templates  can be used in combination with fine-grained con-
	 trols, and the fine-grained controls will you specify will take  prece-
	 dence	over the timing template default for that parameter. I recommend
	 using -T4 when scanning reasonably modern and reliable  networks.  Keep
	 that option even when you add fine-grained controls so that you benefit
	 from those extra minor optimizations that it enables.

	 If you are on a decent broadband or ethernet connection, I would recom-
	 mend always using -T4. Some people love -T5 though it is too aggressive
	 for  my  taste.  People  sometimes specify -T2 because they think it is
	 less likely to crash hosts or because they consider  themselves  to  be
	 polite in general. They often don't realize just how slow -T polite re-
	 ally  is. Their scan may take ten times longer than a default scan. Ma-
	 chine crashes and bandwidth problems are rare with the  default  timing
	 options  (-T3)  and so I normally recommend that for cautious scanners.
	 Omitting version detection is far more effective than playing with tim-
	 ing values at reducing these problems.

	 While -T0 and -T1 may be useful for avoiding IDS alerts, they will take
	 an extraordinarily long time to scan thousands of  machines  or  ports.
	 For such a long scan, you may prefer to set the exact timing values you
	 need rather than rely on the canned -T0 and -T1 values.

	 The  main  effects  of  T0 are serializing the scan so only one port is
	 scanned at a time, and waiting five minutes between sending each probe.
	 T1 and T2 are similar but they only wait 15 seconds  and  0.4	seconds,
	 respectively, between probes.	T3 is Nmap's default behavior, which in-
	 cludes  parallelization.   T4	does the equivalent of --max-rtt-timeout
	 1250 --initial-rtt-timeout 500 --max-retries 6 and sets the maximum TCP
	 scan  delay  to  10  milliseconds.    T5   does   the	 equivalent   of
	 --max-rtt-timeout  300  --min-rtt-timeout  50 --initial-rtt-timeout 250
	 --max-retries 2 --host-timeout 15m as well as setting the  maximum  TCP
	 scan delay to 5 ms.

FIREWALL/IDS EVASION AND SPOOFING
     Many Internet pioneers envisioned a global open network with a universal IP
     address  space allowing virtual connections between any two nodes. This al-
     lows hosts to act as true peers, serving and  retrieving  information  from
     each other. People could access all of their home systems from work, chang-
     ing  the  climate control settings or unlocking the doors for early guests.
     This vision of universal connectivity has been  stifled  by  address  space
     shortages	and  security  concerns. In the early 1990s, organizations began
     deploying firewalls for the express purpose of reducing connectivity.  Huge
     networks  were  cordoned  off  from  the unfiltered Internet by application
     proxies, network address translation, and packet filters. The  unrestricted
     flow  of information gave way to tight regulation of approved communication
     channels and the content that passes over them.

     Network obstructions such as firewalls can make mapping a	network  exceed-
     ingly  difficult. It will not get any easier, as stifling casual reconnais-
     sance is often a key goal of implementing the devices.  Nevertheless,  Nmap
     offers many features to help understand these complex networks, and to ver-
     ify  that	filters are working as intended. It even supports mechanisms for
     bypassing poorly implemented defenses. One of the best  methods  of  under-
     standing  your network security posture is to try to defeat it. Place your-
     self in the mind-set of an attacker, and deploy techniques from  this  sec-
     tion  against your networks. Launch an FTP bounce scan, idle scan, fragmen-
     tation attack, or try to tunnel through one of your own proxies.

     In addition to restricting network  activity,  companies  are  increasingly
     monitoring traffic with intrusion detection systems (IDS). All of the major
     IDSs  ship with rules designed to detect Nmap scans because scans are some-
     times a precursor to attacks. Many of these products have recently  morphed
     into  intrusion prevention systems (IPS) that actively block traffic deemed
     malicious. Unfortunately for network administrators and IDS vendors,  reli-
     ably  detecting bad intentions by analyzing packet data is a tough problem.
     Attackers with patience, skill, and the help of certain  Nmap  options  can
     usually  pass  by IDSs undetected. Meanwhile, administrators must cope with
     large numbers of false positive results where innocent activity is misdiag-
     nosed and alerted on or blocked.

     Occasionally people suggest that Nmap should not offer features for evading
     firewall rules or sneaking past IDSs. They argue that  these  features  are
     just  as likely to be misused by attackers as used by administrators to en-
     hance security. The problem with this logic is  that  these  methods  would
     still  be	used  by attackers, who would just find other tools or patch the
     functionality into Nmap. Meanwhile, administrators would find it that  much
     harder  to  do  their jobs. Deploying only modern, patched FTP servers is a
     far more powerful defense than trying to prevent the distribution of  tools
     implementing the FTP bounce attack.

     There  is	no  magic  bullet  (or Nmap option) for detecting and subverting
     firewalls and IDS systems. It takes skill and experience. A tutorial is be-
     yond the scope of this reference guide, which only lists the  relevant  op-
     tions and describes what they do.

     -f (fragment packets); --mtu (using the specified MTU)
	 The  -f  option causes the requested scan (including ping scans) to use
	 tiny fragmented IP packets. The idea is to split up the TCP header over
	 several packets to make it harder for packet filters, intrusion  detec-
	 tion  systems,  and  other  annoyances to detect what you are doing. Be
	 careful with this! Some programs have trouble handling these tiny pack-
	 ets. The old-school sniffer named Sniffit segmentation faulted  immedi-
	 ately	upon receiving the first fragment. Specify this option once, and
	 Nmap splits the packets into 8 bytes or less after the IP header. So  a
	 20-byte  TCP header would be split into 3 packets. Two with eight bytes
	 of the TCP header, and one with the final four. Of course each fragment
	 also has an IP header. Specify -f again to use 16  bytes  per	fragment
	 (reducing  the number of fragments). Or you can specify your own offset
	 size with the --mtu option. Don't also specify -f if you use --mtu. The
	 offset must be a multiple of 8. While fragmented packets won't  get  by
	 packet  filters  and firewalls that queue all IP fragments, such as the
	 CONFIG_IP_ALWAYS_DEFRAG option in the Linux kernel, some networks can't
	 afford the performance hit this causes and thus leave it disabled. Oth-
	 ers can't enable this because fragments may take different routes  into
	 their	networks. Some source systems defragment outgoing packets in the
	 kernel. Linux with the iptables connection tracking module is one  such
	 example.  Do a scan while a sniffer such as Wireshark is running to en-
	 sure that sent packets are fragmented. If your host OS is causing prob-
	 lems, try the --send-eth option to bypass the IP  layer  and  send  raw
	 ethernet frames.

     -D <decoy1 [,decoy2][,ME],...> (Cloak a scan with decoys)
	 Causes  a  decoy scan to be performed, which makes it appear to the re-
	 mote host that the host(s) you specify as decoys are scanning the  tar-
	 get  network  too.  Thus  their  IDS  might report 5-10 port scans from
	 unique IP addresses, but they won't know which IP was scanning them and
	 which were innocent decoys. While this can be defeated  through  router
	 path  tracing,  response-dropping,  and  other active mechanisms, it is
	 generally an effective technique for hiding your IP address.

	 Separate each decoy host with commas, and you can optionally use ME  as
	 one  of  the decoys to represent the position for your real IP address.
	 If you put ME in the 6th position or later, some common port  scan  de-
	 tectors  (such  as Solar Designer's excellent Scanlogd) are unlikely to
	 show your IP address at all. If you don't use ME, nmap will put you  in
	 a  random  position. You can also use RND to generate a random, non-re-
	 served IP address, or RND:<number> to generate <number> addresses.

	 Note that the hosts you use as decoys should be up or you  might  acci-
	 dentally  SYN flood your targets. Also it will be pretty easy to deter-
	 mine which host is scanning if only one is actually up on the	network.
	 You  might want to use IP addresses instead of names (so the decoy net-
	 works don't see you in their nameserver logs).

	 Decoys are used both in the initial ping scan (using ICMP, SYN, ACK, or
	 whatever) and during the actual port scanning phase.  Decoys  are  also
	 used  during  remote OS detection (-O). Decoys do not work with version
	 detection or TCP connect scan. When a scan delay is in effect, the  de-
	 lay  is enforced between each batch of spoofed probes, not between each
	 individual probe. Because decoys are sent as a batch all at once,  they
	 may temporarily violate congestion control limits.

	 It  is  worth	noting that using too many decoys may slow your scan and
	 potentially even make it less accurate. Also, some ISPs will filter out
	 your spoofed packets, but many do not restrict spoofed  IP  packets  at
	 all.

     -S <IP_Address> (Spoof source address)
	 In  some  circumstances,  Nmap may not be able to determine your source
	 address ( Nmap will tell you if this is the case). In	this  situation,
	 use  -S  with	the IP address of the interface you wish to send packets
	 through.

	 Another possible use of this flag is to spoof the scan to make the tar-
	 gets think that someone else is scanning them. Imagine a company  being
	 repeatedly port scanned by a competitor! The -e option and -PN are gen-
	 erally required for this sort of usage. Note that you usually won't re-
	 ceive	reply  packets	back  (they  will be addressed to the IP you are
	 spoofing), so Nmap won't produce useful reports.

     -e <interface> (Use specified interface)
	 Tells Nmap what interface to send and receive packets on.  Nmap  should
	 be  able  to detect this automatically, but it will tell you if it can-
	 not.

     --source-port <portnumber>; -g <portnumber> (Spoof source port number)
	 One surprisingly common misconfiguration is to trust traffic based only
	 on the source port number. It is easy	to  understand	how  this  comes
	 about.  An  administrator  will set up a shiny new firewall, only to be
	 flooded with complains from ungrateful users whose applications stopped
	 working. In particular, DNS may be broken because the UDP  DNS  replies
	 from  external  servers can no longer enter the network. FTP is another
	 common example. In active FTP transfers, the remote server tries to es-
	 tablish a connection back to the client to transfer the requested file.

	 Secure solutions to these problems exist, often in the form of applica-
	 tion-level proxies or protocol-parsing firewall modules.  Unfortunately
	 there are also easier, insecure solutions. Noting that DNS replies come
	 from  port  53  and  active  FTP from port 20, many administrators have
	 fallen into the trap of simply allowing  incoming  traffic  from  those
	 ports. They often assume that no attacker would notice and exploit such
	 firewall   holes.  In	other  cases,  administrators  consider  this  a
	 short-term stop-gap measure until they can implement a more secure  so-
	 lution. Then they forget the security upgrade.

	 Overworked  network  administrators  are not the only ones to fall into
	 this trap. Numerous products have shipped with  these	insecure  rules.
	 Even  Microsoft  has  been  guilty. The IPsec filters that shipped with
	 Windows 2000 and Windows XP contain an implicit rule  that  allows  all
	 TCP or UDP traffic from port 88 (Kerberos). In another well-known case,
	 versions  of  the Zone Alarm personal firewall up to 2.1.25 allowed any
	 incoming UDP packets with the source port 53 (DNS) or 67 (DHCP).

	 Nmap offers the -g and --source-port options (they are  equivalent)  to
	 exploit  these  weaknesses.  Simply provide a port number and Nmap will
	 send packets from that port where possible.  Nmap  must  use  different
	 port  numbers	for certain OS detection tests to work properly, and DNS
	 requests ignore the --source-port flag because Nmap  relies  on  system
	 libraries  to handle those. Most TCP scans, including SYN scan, support
	 the option completely, as does UDP scan.

     --data-length <number> (Append random data to sent packets)
	 Normally Nmap sends minimalist packets containing only a header. So its
	 TCP packets are generally 40 bytes and ICMP echo requests are just  28.
	 This  option  tells  Nmap to append the given number of random bytes to
	 most of the packets it sends. OS detection (-O)  packets  are	not  af-
	 fected  because  accuracy  there  requires  probe consistency, but most
	 pinging and portscan packets support this. It slows things down a  lit-
	 tle, but can make a scan slightly less conspicuous.

     --ip-options  <S|R  [route]|L  [route]|T|U ... >; --ip-options <hex string>
     (Send packets with specified ip options)
	 The IP protocol[9] offers several options which may be placed in packet
	 headers. Unlike the ubiquitous TCP options, IP options are rarely  seen
	 due  to  practicality	and  security  concerns.  In fact, many Internet
	 routers block the most dangerous options such as  source  routing.  Yet
	 options  can  still be useful in some cases for determining and manipu-
	 lating the network route to target machines. For example,  you  may  be
	 able  to  use	the  record route option to determine a path to a target
	 even when more traditional traceroute-style approaches fail. Or if your
	 packets are being dropped by a certain firewall, you  may  be	able  to
	 specify  a  different route with the strict or loose source routing op-
	 tions.

	 The most powerful way to specify IP options is to simply pass in values
	 as the argument to --ip-options. Precede each hex number with	\x  then
	 the  two  digits.  You  may repeat certain characters by following them
	 with an asterisk and then the number of times you wish them to  repeat.
	 For  example, \x01\x07\x04\x00*36\x01 is a hex string containing 36 NUL
	 bytes.

	 Nmap also offers a shortcut mechanism for  specifying	options.  Simply
	 pass  the  letter R, T, or U to request record-route, record-timestamp,
	 or both options together, respectively. Loose or strict source  routing
	 may  be  specified  with  an  L  or  S  followed  by a space and then a
	 space-separated list of IP addresses.

	 If you wish to see the options in packets sent  and  received,  specify
	 --packet-trace.  For  more information and examples of using IP options
	 with Nmap, see http://seclists.org/nmap-dev/2006/q3/0052.html.

     --ttl <value> (Set IP time-to-live field)
	 Sets the IPv4 time-to-live field in sent packets to the given value.

     --randomize-hosts (Randomize target host order)
	 Tells Nmap to shuffle each group of up to 16384 hosts before  it  scans
	 them.	This can make the scans less obvious to various network monitor-
	 ing systems, especially when you combine it with slow	timing	options.
	 If   you   want   to	randomize  over  larger  group	sizes,	increase
	 PING_GROUP_SZ in nmap.h and recompile. An alternative	solution  is  to
	 generate  the	target	IP  list with a list scan (-sL -n -oN filename),
	 randomize it with a Perl script, then provide the whole  list	to  Nmap
	 with -iL.

     --spoof-mac <MAC address, prefix, or vendor name> (Spoof MAC address)
	 Asks  Nmap  to  use  the  given MAC address for all of the raw ethernet
	 frames it sends. This option implies --send-eth to ensure that Nmap ac-
	 tually sends ethernet-level packets. The MAC  given  can  take  several
	 formats. If it is simply the number 0, Nmap chooses a completely random
	 MAC  address  for the session. If the given string is an even number of
	 hex digits (with the pairs optionally separated by a colon), Nmap  will
	 use  those  as  the MAC. If fewer than 12 hex digits are provided, Nmap
	 fills in the remainder of the 6 bytes with random values. If the  argu-
	 ment  isn't  a 0 or hex string, Nmap looks through nmap-mac-prefixes to
	 find a vendor name containing the given string  (it  is  case	insensi-
	 tive).  If a match is found, Nmap uses the vendor's OUI (3-byte prefix)
	 and fills out the remaining 3 bytes randomly. Valid  --spoof-mac  argu-
	 ment  examples  are  Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2,
	 and Cisco. This option only affects raw packet scans such as  SYN  scan
	 or  OS  detection, not connection-oriented features such as version de-
	 tection or the Nmap Scripting Engine.

     --badsum (Send packets with bogus TCP/UDP checksums)
	 Asks Nmap to use an invalid TCP or UDP checksum  for  packets	sent  to
	 target  hosts.  Since	virtually all host IP stacks properly drop these
	 packets, any responses received are likely coming from  a  firewall  or
	 IDS that didn't bother to verify the checksum. For more details on this
	 technique, see http://nmap.org/p60-12.html

OUTPUT
     Any  security  tools  is only as useful as the output it generates. Complex
     tests and algorithms are of little value if they aren't presented in an or-
     ganized and comprehensible fashion. Given the number of ways Nmap	is  used
     by people and other software, no single format can please everyone. So Nmap
     offers  several  formats, including the interactive mode for humans to read
     directly and XML for easy parsing by software.

     In addition to offering different output formats, Nmap provides options for
     controlling the verbosity of output as well as debugging  messages.  Output
     types  may be sent to standard output or to named files, which Nmap can ap-
     pend to or clobber. Output files may also be used to resume aborted scans.

     Nmap makes output available in  five  different  formats.	The  default  is
     called  interactive  output,  and	it  is sent to standard output (stdout).
     There is also normal output, which is similar to interactive except that it
     displays less runtime information and warnings since it is expected  to  be
     analyzed after the scan completes rather than interactively.

     XML  output  is  one  of the most important output types, as it can be con-
     verted to HTML, easily parsed by programs such as Nmap graphical  user  in-
     terfaces, or imported into databases.

     The  two  remaining  output  types are the simple grepable output which in-
     cludes most information for a target host on  a  single  line,  and  sCRiPt
     KiDDi3 0utPUt for users who consider themselves |<-r4d.

     While  interactive output is the default and has no associated command-line
     options, the other four format options use the same syntax. They  take  one
     argument,	which is the filename that results should be stored in. Multiple
     formats may be specified, but each format may only be specified  once.  For
     example,  you may wish to save normal output for your own review while sav-
     ing XML of the same scan for programmatic analysis. You might do this  with
     the  options  -oX	myscan.xml  -oN myscan.nmap. While this chapter uses the
     simple names like myscan.xml for brevity, more descriptive names are gener-
     ally recommended. The names chosen are a  matter  of  personal  preference,
     though I use long ones that incorporate the scan date and a word or two de-
     scribing  the scan, placed in a directory named after the company I'm scan-
     ning.

     While these options save results to files, Nmap  still  prints  interactive
     output  to  stdout  as  usual. For example, the command nmap -oX myscan.xml
     target prints XML to myscan.xml and fills standard output with the same in-
     teractive results it would have printed if -oX wasn't specified at all. You
     can change this by passing a hyphen character as the argument to one of the
     format types. This causes Nmap to deactivate interactive  output,	and  in-
     stead  print  results  in	the  format you specified to the standard output
     stream. So the command nmap -oX - target will send only XML output to  std-
     out.  Serious  errors  may  still	be  printed  to the normal error stream,
     stderr.

     Unlike some Nmap arguments, the space between the logfile option flag (such
     as -oX) and the filename or hyphen is mandatory. If you omit the flags  and
     give  arguments such as -oG- or -oXscan.xml, a backwards compatibility fea-
     ture of Nmap will cause the creation of normal format output files named G-
     and Xscan.xml respectively.

     All of these arguments support strftime()-like conversions in the filename.
     %H, %M, %S, %m, %d, %y, and %Y are all exactly the same as  in  strftime().
     %T  is  the  same	as %H%M%S, %R is the same as %H%M, and %D is the same as
     %m%d%y. A % followed by any other character just yields that character  (%%
     gives  you  a percent symbol). So -oX 'scan-%T-%D.xml' will use an XML file
     in the form of scan-144840-121307.xml.

     Nmap also offers options to control scan verbosity and to append to  output
     files  rather  than clobbering them. All of these options are described be-
     low.

     Nmap Output Formats

     -oN <filespec> (normal output)
	 Requests that normal output be directed to the given filename. As  dis-
	 cussed above, this differs slightly from interactive output.

     -oX <filespec> (XML output)
	 Requests  that  XML  output be directed to the given filename. Nmap in-
	 cludes a document type definition (DTD) which	allows	XML  parsers  to
	 validate  Nmap  XML output. While it is primarily intended for program-
	 matic use, it can also help humans interpret Nmap XML output.	The  DTD
	 defines  the legal elements of the format, and often enumerates the at-
	 tributes and values they can take on.	The  latest  version  is  always
	 available from http://nmap.org/data/nmap.dtd.

	 XML  offers a stable format that is easily parsed by software. Free XML
	 parsers are available	for  all  major  computer  languages,  including
	 C/C++,  Perl,	Python,  and Java. People have even written bindings for
	 most of these languages to handle Nmap output	and  execution	specifi-
	 cally.  Examples  are	Nmap::Scanner[10]  and	Nmap::Parser[11] in Perl
	 CPAN. In almost all cases that  a  non-trivial  application  interfaces
	 with Nmap, XML is the preferred format.

	 The XML output references an XSL stylesheet which can be used to format
	 the  results as HTML. The easiest way to use this is simply to load the
	 XML output in a web browser such as Firefox or  IE.  By  default,  this
	 will  only  work on the machine you ran Nmap on (or a similarly config-
	 ured one) due to the hard-coded nmap.xsl filesystem path. Use the --we-
	 bxml or --stylesheet options to create portable XML files  that  render
	 as HTML on any web-connected machine.

     -oS <filespec> (ScRipT KIdd|3 oUTpuT)
	 Script  kiddie  output  is  like  interactive output, except that it is
	 post-processed to better suit the l33t HaXXorZ  who  previously  looked
	 down  on  Nmap due to its consistent capitalization and spelling. Humor
	 impaired people should note that this	option	is  making  fun  of  the
	 script kiddies before flaming me for supposedly "helping them".

     -oG <filespec> (grepable output)
	 This  output  format  is covered last because it is deprecated. The XML
	 output format is far more powerful, and is nearly as convenient for ex-
	 perienced users. XML is  a  standard  for  which  dozens  of  excellent
	 parsers are available, while grepable output is my own simple hack. XML
	 is  extensible to support new Nmap features as they are released, while
	 I often must omit those features from grepable output	for  lack  of  a
	 place to put them.

	 Nevertheless,	grepable  output  is still quite popular. It is a simple
	 format that lists each host on one line and can be  trivially	searched
	 and  parsed with standard Unix tools such as grep, awk, cut, sed, diff,
	 and Perl. Even I usually use it for one-off tests done at  the  command
	 line.	Finding all the hosts with the SSH port open or that are running
	 Solaris takes only a simple grep to identify the hosts, piped to an awk
	 or cut command to print the desired fields.

	 Grepable output consists of comments (lines starting with a pound  (#))
	 and  target  lines.  A  target line includes a combination of 6 labeled
	 fields, separated by tabs and followed with a	colon.	The  fields  are
	 Host,	Ports,	Protocols, Ignored State, OS, Seq Index, IP ID, and Sta-
	 tus.

	 The most important of these fields is generally Ports, which gives  de-
	 tails	on  each  interesting port. It is a comma separated list of port
	 entries. Each port entry represents one interesting port, and takes the
	 form of seven slash (/) separated subfields. Those subfields are:  Port
	 number, State, Protocol, Owner, Service, SunRPC info, and Version info.

	 As  with  XML	output, this man page does not allow for documenting the
	 entire format. A more detailed look at the Nmap grepable output  format
	 is			       available			    from
	 http://nmap.org/book/output-formats-grepable-output.html.

     -oA <basename> (Output to all formats)
	 As a convenience, you may specify -oA basename to store scan results in
	 normal, XML, and grepable formats at once. They  are  stored  in  base-
	 name.nmap, basename.xml, and basename.gnmap, respectively. As with most
	 programs,  you  can prefix the filenames with a directory path, such as
	 ~/nmaplogs/foocorp/ on Unix or c:\hacking\sco on Windows.

     Verbosity and debugging options

     -v (Increase verbosity level)
	 Increases the verbosity level, causing Nmap to print  more  information
	 about	the scan in progress. Open ports are shown as they are found and
	 completion time estimates are provided when Nmap  thinks  a  scan  will
	 take  more  than  a  few minutes. Use it twice or more for even greater
	 verbosity.

	 Most changes only affect interactive output, and some also affect  nor-
	 mal  and  script  kiddie output. The other output types are meant to be
	 processed by machines, so Nmap can give substantial detail  by  default
	 in  those  formats without fatiguing a human user. However, there are a
	 few changes in other modes where output size can  be  reduced	substan-
	 tially  by  omitting  some  detail.  For example, a comment line in the
	 grepable output that provides a list  of  all	ports  scanned	is  only
	 printed in verbose mode because it can be quite long.

     -d [level] (Increase or set debugging level)
	 When  even verbose mode doesn't provide sufficient data for you, debug-
	 ging is available to flood you with much more! As  with  the  verbosity
	 option (-v), debugging is enabled with a command-line flag (-d) and the
	 debug	level can be increased by specifying it multiple times. Alterna-
	 tively, you can set a debug level by giving an argument to -d. For  ex-
	 ample,  -d9  sets  level  nine. That is the highest effective level and
	 will produce thousands of lines unless you run a very simple scan  with
	 very few ports and targets.

	 Debugging  output  is useful when a bug is suspected in Nmap, or if you
	 are simply confused as to what Nmap is doing and why. As  this  feature
	 is  mostly  intended for developers, debug lines aren't always self-ex-
	 planatory. You may get something like: Timeout vals: srtt:  -1  rttvar:
	 -1 to: 1000000 delta 14987 ==> srtt: 14987 rttvar: 14987 to: 100000. If
	 you don't understand a line, your only recourses are to ignore it, look
	 it  up  in  the  source code, or request help from the development list
	 (nmap-dev). Some lines are self explanatory, but  the	messages  become
	 more obscure as the debug level is increased.

     --packet-trace (Trace packets and data sent and received)
	 Causes  Nmap  to print a summary of every packet sent or received. This
	 is often used for debugging, but is also a valuable way for  new  users
	 to  understand  exactly  what	Nmap is doing under the covers. To avoid
	 printing thousands of lines, you may want to specify a  limited  number
	 of ports to scan, such as -p20-30. If you only care about the goings on
	 of the version detection subsystem, use --version-trace instead.

     --open (Show only open (or possibly open) ports)
	 Sometimes  you  only care about ports you can actually connect to (open
	 ones), and don't want results	cluttered  with  closed,  filtered,  and
	 closed|filtered  ports. Output customization is normally done after the
	 scan using tools such as grep, awk, and  Perl,  but  this  feature  was
	 added	due  to  overwhelming requests. Specify --open to only see open,
	 open|filtered, and unfiltered ports. These three ports are treated just
	 as they normally are, which means that open|filtered and unfiltered may
	 be condensed into counts if there are an overwhelming number of them.

     --iflist (List interfaces and routes)
	 Prints the interface list and system routes as detected by  Nmap.  This
	 is  useful for debugging routing problems or device mischaracterization
	 (such as Nmap treating a PPP connection as ethernet).

     --log-errors (Log errors/warnings to normal mode output file)
	 Warnings and errors printed by Nmap usually go only to the screen  (in-
	 teractive  output),  leaving  any  normal-format  output files (usually
	 specified with -oN) uncluttered. When you do want to see those messages
	 in the normal output file you specified, add this option. It is  useful
	 when  you  aren't  watching  the interactive output or when you want to
	 record errors while debugging a problem. The error and warning messages
	 will still appear in interactive mode too. This won't work for most er-
	 rors related to bad command-line arguments because Nmap  may  not  have
	 initialized  its  output  files  yet.	In addition, some Nmap error and
	 warning messages use a different system which does not yet support this
	 option.

	 An alternative to --log-errors is redirecting interactive  output  (in-
	 cluding  the  standard  error	stream) to a file. Most Unix shells make
	 this approach easy, though it can be difficult on Windows.

     Miscellaneous output options

     --append-output (Append to rather than clobber output files)
	 When you specify a filename to an output format flag  such  as  -oX  or
	 -oN, that file is overwritten by default. If you prefer to keep the ex-
	 isting  content  of  the  file  and append the new results, specify the
	 --append-output option. All output filenames specified in that Nmap ex-
	 ecution will then be appended to rather than  clobbered.  This  doesn't
	 work well for XML (-oX) scan data as the resultant file generally won't
	 parse properly until you fix it up by hand.

     --resume <filename> (Resume aborted scan)
	 Some  extensive  Nmap runs take a very long time--on the order of days.
	 Such scans don't always run to  completion.  Restrictions  may  prevent
	 Nmap  from  being  run during working hours, the network could go down,
	 the machine Nmap is running on might suffer a planned or unplanned  re-
	 boot,	or Nmap itself could crash. The administrator running Nmap could
	 cancel it for any other reason as well, by pressing ctrl-C.  Restarting
	 the  whole  scan from the beginning may be undesirable. Fortunately, if
	 normal (-oN) or grepable (-oG) logs were kept, the user can ask Nmap to
	 resume scanning with the  target  it  was  working  on  when  execution
	 ceased. Simply specify the --resume option and pass the normal/grepable
	 output  file as its argument. No other arguments are permitted, as Nmap
	 parses the output file to use the same ones specified previously.  Sim-
	 ply  call  Nmap  as nmap --resume logfilename. Nmap will append new re-
	 sults to the data files specified in the previous execution. Resumption
	 does not support the XML output format because combining the  two  runs
	 into one valid XML file would be difficult.

     --stylesheet <path or URL> (Set XSL stylesheet to transform XML output)
	 Nmap  ships with an XSL stylesheet named nmap.xsl for viewing or trans-
	 lating XML output to HTML. The XML output  includes  an  xml-stylesheet
	 directive  which points to nmap.xml where it was initially installed by
	 Nmap (or in the current working  directory  on  Windows).  Simply  load
	 Nmap's  XML  output  in  a  modern  web  browser and it should retrieve
	 nmap.xsl from the filesystem and use it to render results. If you  wish
	 to   use  a  different  stylesheet,  specify  it  as  the  argument  to
	 --stylesheet. You must pass the full pathname or URL. One common  invo-
	 cation  is  --stylesheet  http://nmap.org/data/nmap.xsl.  This  tells a
	 browser to load the latest version of the stylesheet from Insecure.Org.
	 The --webxml option does the same thing with less typing and  memoriza-
	 tion. Loading the XSL from Insecure.Org makes it easier to view results
	 on  a	machine that doesn't have Nmap (and thus nmap.xsl) installed. So
	 the URL is often more useful, but  the  local	filesystem  location  of
	 nmap.xsl is used by default for privacy reasons.

     --webxml (Load stylesheet from Insecure.Org)
	 This	convenience   option   is   simply  an	alias  for  --stylesheet
	 http://nmap.org/data/nmap.xsl.

     --no-stylesheet (Omit XSL stylesheet declaration from XML)
	 Specify this option to prevent Nmap from associating any XSL stylesheet
	 with its XML output. The xml-stylesheet directive is omitted.

MISCELLANEOUS OPTIONS
     This section describes some important (and not-so-important)  options  that
     don't really fit anywhere else.

     -6 (Enable IPv6 scanning)
	 Since	2002,  Nmap  has  offered IPv6 support for its most popular fea-
	 tures. In particular, ping scanning (TCP-only), connect  scanning,  and
	 version  detection  all support IPv6. The command syntax is the same as
	 usual except that you also add the -6 option. Of course, you  must  use
	 IPv6  syntax  if  you specify an address rather than a hostname. An ad-
	 dress might look like 3ffe:7501:4819:2000:210:f3ff:fe03:14d0, so  host-
	 names	are  recommended.  The	output looks the same as usual, with the
	 IPv6 address on the "interesting ports" line being the only  IPv6  give
	 away.

	 While IPv6 hasn't exactly taken the world by storm, it gets significant
	 use in some (usually Asian) countries and most modern operating systems
	 support  it.  To use Nmap with IPv6, both the source and target of your
	 scan must be configured for IPv6. If your ISP (like most of them)  does
	 not  allocate	IPv6  addresses  to  you, free tunnel brokers are widely
	 available and work fine with Nmap. I use the free  IPv6  tunnel  broker
	 service at http://www.tunnelbroker.net. Other tunnel brokers are listed
	 at Wikipedia[12]. 6to4 tunnels are another popular, free approach.

     -A (Aggressive scan options)
	 This  option  enables	additional  advanced  and  aggressive options. I
	 haven't decided exactly which it stands for yet. Presently this enables
	 OS detection (-O), version scanning (-sV), script  scanning  (-sC)  and
	 traceroute  (--traceroute).  More  features may be added in the future.
	 The point is to enable a comprehensive set of scan options without peo-
	 ple having to remember a large set of flags.  However,  because  script
	 scanning  with  the default set is considered intrusive, you should not
	 use -A against target networks without permission. This option only en-
	 ables features, and not timing options (such as -T4) or  verbosity  op-
	 tions (-v) that you might want as well.

     --datadir <directoryname> (Specify custom Nmap data file location)
	 Nmap  obtains	some  special  data  at runtime in files named nmap-ser-
	 vice-probes,  nmap-services,  nmap-protocols,	nmap-rpc,  nmap-mac-pre-
	 fixes,  and  nmap-os-db. If the location of any of these files has been
	 specified (using the --servicedb or --versiondb options), that location
	 is used for that file. After that, Nmap searches these files in the di-
	 rectory specified with the --datadir option (if  any).  Any  files  not
	 found there, are searched for in the directory specified by the NMAPDIR
	 environmental	variable. Next comes ~/.nmap for real and effective UIDs
	 (POSIX systems only) or location of the Nmap executable  (Win32  only),
	 and  then  a  compiled-in  location  such  as	/usr/local/share/nmap or
	 /usr/share/nmap

     --servicedb <services file> (Specify custom services file)
	 Asks Nmap to use the specified services file rather than the  nmap-ser-
	 vices	data  file that comes with Nmap. Using this option also causes a
	 fast scan (-F) to be used. See the description for --datadir  for  more
	 information on Nmap's data files.

     --versiondb <service probes file> (Specify custom service probes file)
	 Asks  Nmap  to  use  the  specified service probes file rather than the
	 nmap-service-probes data file that comes with Nmap. See the description
	 for --datadir for more information on Nmap's data files.

     --send-eth (Use raw ethernet sending)
	 Asks Nmap to send packets at the raw ethernet (data link) layer  rather
	 than  the  higher  IP (network) layer. By default, Nmap chooses the one
	 which is generally best for the platform it is running on. Raw  sockets
	 (IP layer) are generally most efficient for Unix machines, while ether-
	 net  frames are required for Windows operation since Microsoft disabled
	 raw socket support. Nmap still uses raw IP packets on Unix despite this
	 option when there is no other	choice	(such  as  non-ethernet  connec-
	 tions).

     --send-ip (Send at raw IP level)
	 Asks  Nmap to send packets via raw IP sockets rather than sending lower
	 level ethernet frames. It is the complement to  the  --send-eth  option
	 discussed previously.

     --privileged (Assume that the user is fully privileged)
	 Tells Nmap to simply assume that it is privileged enough to perform raw
	 socket  sends, packet sniffing, and similar operations that usually re-
	 quire root privileges on Unix systems. By default Nmap  quits	if  such
	 operations  are  requested  but geteuid() is not zero.  --privileged is
	 useful with Linux kernel capabilities and similar systems that  may  be
	 configured  to allow unprivileged users to perform raw-packet scans. Be
	 sure to provide this option flag before any flags for options that  re-
	 quire	privileges  (SYN  scan, OS detection, etc.). The NMAP_PRIVILEGED
	 environmental variable may be	set  as  an  equivalent  alternative  to
	 --privileged.

     --unprivileged (Assume that the user lacks raw socket privileges)
	 This option is the opposite of --privileged. It tells Nmap to treat the
	 user  as  lacking  network  raw socket and sniffing privileges. This is
	 useful for testing, debugging, or when the raw network functionality of
	 your operating system is somehow broken. The NMAP_UNPRIVILEGED environ-
	 mental variable may be set as an equivalent alternative  to  --unprivi-
	 leged.

     --release-memory (Release memory before quitting)
	 This option is only useful for memory-leak debugging. It causes Nmap to
	 release  allocated  memory  just  before it quits so that actual memory
	 leaks are easier to spot. Normally Nmap skips this as the OS does  this
	 anyway upon process termination.

     --interactive (Start in interactive mode)
	 Starts  Nmap  in  interactive	mode,  which  offers an interactive Nmap
	 prompt allowing easy launching of multiple scans (either  synchronously
	 or  in  the  background).  This  is  useful  for  people  who scan from
	 multi-user systems as they often want to test	their  security  without
	 letting everyone else on the system know exactly which systems they are
	 scanning.  Use  --interactive to activate this mode and then type h for
	 help. This option is rarely used because proper shells are usually more
	 familiar and feature-complete. This option includes a bang (!) operator
	 for executing shell commands, which is one of many reasons not  to  in-
	 stall Nmap setuid root.

     -V; --version (Print version number)
	 Prints the Nmap version number and exits.

     -h; --help (Print help summary page)
	 Prints  a short help screen with the most common command flags. Running
	 Nmap without any arguments does the same thing.

RUNTIME INTERACTION
     During the execution of nmap, all key presses are captured. This allows you
     to interact with the program without aborting and	restarting  it.  Certain
     special  keys  will  change  options, while any other keys will print out a
     status message telling you about the scan. The convention is that lowercase
     letters increase the amount of printing, and uppercase letters decrease the
     printing. You may also press `?' for help.

     v / V
	 Increase / decrease the verbosity level

     d / D
	 Increase / decrease the debugging Level

     p / P
	 Turn on / off packet tracing

     ?
	 Print a runtime interaction help screen

     Anything else
	 Print out a status message like this:

	 Stats: 0:00:08 elapsed; 111 hosts completed (5 up), 5	undergoing  Ser-
	 vice Scan

	 Service scan Timing: About 28.00% done; ETC: 16:18 (0:00:15 remaining)

EXAMPLES
     Here  are some Nmap usage examples, from the simple and routine to a little
     more complex and esoteric. Some actual IP addresses and  domain  names  are
     used to make things more concrete. In their place you should substitute ad-
     dresses/names  from  your	own  network.. While I don't think port scanning
     other networks is or should be illegal, some network  administrators  don't
     appreciate unsolicited scanning of their networks and may complain. Getting
     permission first is the best approach.

     For testing purposes, you have permission to scan the host scanme.nmap.org.
     This permission only includes scanning via Nmap and not testing exploits or
     denial  of  service  attacks. To conserve bandwidth, please do not initiate
     more than a dozen scans against that host per day. If  this  free	scanning
     target service is abused, it will be taken down and Nmap will report Failed
     to resolve given hostname/IP: scanme.nmap.org. These permissions also apply
     to  the  hosts  scanme2.nmap.org, scanme3.nmap.org, and so on, though those
     hosts do not currently exist.

     nmap -v scanme.nmap.org

     This option scans all reserved TCP ports on the machine scanme.nmap.org  -v
     option enables verbose mode.

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

     Launches  a stealth SYN scan against each machine that is up out of the 255
     machines on "class C" network where Scanme resides. It also tries to deter-
     mine what operating system is running on each host that is up and	running.
     This requires root privileges because of the SYN scan and OS detection.

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

     Launches  host  enumeration and a TCP scan at the first half of each of the
     255 possible 8 bit subnets in the 198.116 class B address space. This tests
     whether the systems run SSH, DNS, POP3, or IMAP on their standard ports, or
     anything on port 4564. For any of these ports found open, version detection
     is used to determine what application is running.

     nmap -v -iR 100000 -PN -p 80

     Asks Nmap to choose 100,000 hosts at random and scan them for  web  servers
     (port 80). Host enumeration is disabled with -PN since first sending a cou-
     ple  probes to determine whether a host is up is wasteful when you are only
     probing one port on each target host anyway.

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

     This  scans  4096	IPs for any web servers (without pinging them) and saves
     the output in grepable and XML formats.

BUGS
     Like its author, Nmap isn't perfect. But you can help  make  it  better  by
     sending bug reports or even writing patches. If Nmap doesn't behave the way
     you   expect,   first   upgrade   to  the	latest	version  available  from
     http://nmap.org. If the problem persists, do  some  research  to  determine
     whether  it has already been discovered and addressed. Try Googling the er-
     ror message or browsing the nmap-dev archives at http://seclists.org/. Read
     this full manual page as well. If nothing comes of this, mail a bug  report
     to  <nmap-dev@insecure.org>.  Please  include  everything	you have learned
     about the problem, as well as what version of Nmap you are running and what
     operating system version it is running on. Problem reports and  Nmap  usage
     questions	sent to nmap-dev@insecure.org are far more likely to be answered
     than those sent to Fyodor directly.

     Code patches to fix bugs are even better than bug reports.  Basic	instruc-
     tions  for  creating  patch  files  with  your  changes  are  available  at
     http://nmap.org/data/HACKING. Patches may be sent to nmap-dev (recommended)
     or to Fyodor directly.

AUTHOR
     Fyodor <fyodor@insecure.org> (http://insecure.org)

     Hundreds of people have made valuable contributions to Nmap over the years.
     These are detailed in the CHANGELOG file which is distributed with Nmap and
     also available from http://nmap.org/changelog.html.

LEGAL NOTICES
   Nmap Copyright and Licensing
     The Nmap Security Scanner is (C) 1996-2008 Insecure.Com LLC. Nmap is also a
     registered trademark of Insecure.Com LLC. This program  is  free  software;
     you  may  redistribute  and/or modify it under the terms of the GNU General
     Public License as published by the Free Software Foundation; Version 2 with
     the clarifications and exceptions described  below.  This	guarantees  your
     right  to	use, modify, and redistribute this software under certain condi-
     tions. If you wish to embed Nmap technology into proprietary  software,  we
     sell  alternative	licenses (contact <sales@insecure.com>). Dozens of soft-
     ware vendors already license Nmap technology such as host	discovery,  port
     scanning, OS detection, and version detection.

     Note  that the GPL places important restrictions on "derived works", yet it
     does not provide a detailed definition of that  term.  To	avoid  misunder-
     standings, we consider an application to constitute a "derivative work" for
     the purpose of this license if it does any of the following:

     *	 Integrates source code from Nmap

     *	 Reads	or  includes  Nmap copyrighted data files, such as nmap-os-db or
	 nmap-service-probes.

     *	 Executes Nmap and parses the results (as opposed to  typical  shell  or
	 execution-menu  apps,	which  simply display raw Nmap output and so are
	 not derivative works.)

     *	 Integrates/includes/aggregates Nmap into a proprietary  executable  in-
	 staller, such as those produced by InstallShield.

     *	 Links to a library or executes a program that does any of the above.

     The  term	"Nmap"	should	be taken to also include any portions or derived
     works of Nmap. This list is not exclusive, but is just meant to clarify our
     interpretation of derived works with some common examples.  These	restric-
     tions  only apply when you actually redistribute Nmap. For example, nothing
     stops you from writing and selling a proprietary front-end  to  Nmap.  Just
     distribute  it  by  itself, and point people to http://nmap.org to download
     Nmap.

     We don't consider these to be added restrictions on top  of  the  GPL,  but
     just  a  clarification of how we interpret "derived works" as it applies to
     our GPL-licensed Nmap product. This is similar to the  way  Linus	Torvalds
     has  announced  his  interpretation of how "derived works" applies to Linux
     kernel modules. Our interpretation refers only to Nmap--we don't speak  for
     any other GPL products.

     If  you  have  any  questions about the GPL licensing restrictions on using
     Nmap in non-GPL works, we would be happy to help. As  mentioned  above,  we
     also  offer alternative license to integrate Nmap into proprietary applica-
     tions and appliances. These contracts have been sold to many security  ven-
     dors,  and  generally  include a perpetual license as well as providing for
     priority support and updates as well as helping to fund the  continued  de-
     velopment of Nmap technology. Please email <sales@insecure.com> for further
     information.

     As a special exception to the GPL terms, Insecure.Com LLC grants permission
     to  link  the  code of this program with any version of the OpenSSL library
     which is distributed under a license identical to that listed  in	the  in-
     cluded  COPYING.OpenSSL  file, and distribute linked combinations including
     the two. You must obey the GNU GPL in all respects for all of the code used
     other than OpenSSL. If you modify this file, you may extend this  exception
     to your version of the file, but you are not obligated to do so.

     If  you  received	these files with a written license agreement or contract
     stating terms other than the terms above,	then  that  alternative  license
     agreement takes precedence over these comments.

   Creative Commons License for this Nmap Guide
     This  Nmap  Reference Guide is (C) 2005-2008 Insecure.Com LLC. It is hereby
     placed under version 2.5 of the Creative Commons  Attribution  License[13].
     This  allows you redistribute and modify the work as you desire, as long as
     you credit the original source. Alternatively, you may choose to treat this
     document as falling under the same license as Nmap itself (discussed previ-
     ously).

   Source Code Availability and Community Contributions
     Source is provided to this software because we believe users have	a  right
     to know exactly what a program is going to do before they run it. This also
     allows  you  to audit the software for security holes (none have been found
     so far).

     Source code also allows you to port Nmap to new platforms,  fix  bugs,  and
     add  new  features. You are highly encouraged to send your changes to <fyo-
     dor@insecure.org> for possible incorporation into the main distribution. By
     sending these changes to Fyodor or  one  of  the  Insecure.Org  development
     mailing  lists, it is assumed that you are offering Fyodor and Insecure.Com
     LLC the unlimited, non-exclusive right to reuse, modify, and relicense  the
     code.  Nmap will always be available Open Source, but this is important be-
     cause the inability to relicense code has caused devastating  problems  for
     other  Free  Software projects (such as KDE and NASM). We also occasionally
     relicense the code to third parties as discussed  above.  If  you	wish  to
     specify  special license conditions of your contributions, just say so when
     you send them.

   No Warranty
     This program is distributed in the hope that it will be useful, but WITHOUT
     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or  FIT-
     NESS  FOR A PARTICULAR PURPOSE. See the GNU General Public License v2.0 for
     more details at http://www.gnu.org/licenses/gpl-2.0.html, or in the COPYING
     file included with Nmap.

     It should also be noted that Nmap has  occasionally  been	known  to  crash
     poorly  written  applications,  TCP/IP  stacks, and even operating systems.
     While this is extremely rare, it is important to keep in mind.  Nmap should
     never be run against mission critical systems unless you  are  prepared  to
     suffer  downtime.	We  acknowledge here that Nmap may crash your systems or
     networks and we disclaim all liability for  any  damage  or  problems  Nmap
     could cause.

   Inappropriate Usage
     Because  of the slight risk of crashes and because a few black hats like to
     use Nmap for reconnaissance prior to attacking systems, there are	adminis-
     trators  who  become  upset  and may complain when their system is scanned.
     Thus, it is often advisable to request permission before doing even a light
     scan of a network.

     Nmap should never be installed with special privileges (e.g. suid root) for
     security reasons.

   Third-Party Software
     This product includes software developed by  the  Apache  Software  Founda-
     tion[14].	A  modified  version  of the Libpcap portable packet capture li-
     brary[15] is distributed along with nmap. The Windows version of Nmap  uti-
     lized  the  Libpcap-derived WinPcap library[16] instead. Regular expression
     support is provided by the PCRE library[17], which is open source software,
     written by Philip Hazel. Certain raw networking  functions  use  the  Libd-
     net[18]  networking library, which was written by Dug Song. A modified ver-
     sion is distributed with Nmap. Nmap can optionally link  with  the  OpenSSL
     cryptography  toolkit[19]	for  SSL  version  detection  support.	The Nmap
     Scripting Engine uses an embedded	version  of  the  Lua  programming  lan-
     guage[20].  All  of the third-party software described in this paragraph is
     freely redistributable under BSD-style software licenses.

   US Export Control Classification
     US Export Control: Insecure.Com LLC believes that Nmap falls under US  ECCN
     (export  control classification number) 5D992. This category is called "In-
     formation Security software not controlled by 5D002". The only  restriction
     of  this classification is AT (anti-terrorism), which applies to almost all
     goods and denies export to a handful of rogue  nations  such  as  Iran  and
     North Korea. Thus exporting Nmap does not require any special license, per-
     mit, or other governmental authorization.

AUTHOR
     Gordon "Fyodor" Lyon
     Insecure.Org
	 Author.

COPYRIGHT
     Copyright (C) 2008 Nmap Project

NOTES
      1. RFC 1122
	 http://www.rfc-editor.org/rfc/rfc1122.txt

      2. RFC 792
	 http://www.rfc-editor.org/rfc/rfc792.txt

      3. RFC 1918
	 http://www.rfc-editor.org/rfc/rfc1918.txt

      4. UDP
	 http://www.rfc-editor.org/rfc/rfc768.txt

      5. TCP RFC
	 http://www.rfc-editor.org/rfc/rfc793.txt

      6. RFC 959
	 http://www.rfc-editor.org/rfc/rfc959.txt

      7. RFC 1323
	 http://www.rfc-editor.org/rfc/rfc1323.txt

      8. Lua
	 http://lua.org

      9. IP protocol
	 http://www.rfc-editor.org/rfc/rfc791.txt

     10. Nmap::Scanner
	 http://sourceforge.net/projects/nmap-scanner/

     11. Nmap::Parser
	 http://www.nmapparser.com

     12. listed at Wikipedia
	 http://en.wikipedia.org/wiki/List_of_IPv6_tunnel_brokers

     13. Creative Commons Attribution License
	 http://creativecommons.org/licenses/by/2.5/

     14. Apache Software Foundation
	 http://www.apache.org

     15. Libpcap portable packet capture library
	 http://www.tcpdump.org

     16. WinPcap library
	 http://www.winpcap.org

     17. PCRE library
	 http://www.pcre.org

     18. Libdnet
	 http://libdnet.sourceforge.net

     19. OpenSSL cryptography toolkit
	 http://www.openssl.org

     20. Lua programming language
	 http://www.lua.org

Insecure.Org Zero Day		   06/29/2008				 NMAP(1)

home | help