Provided by: masscan_1.3.2+ds1-1_amd64 bug

NAME

       masscan - Fast scan of the Internet

SYNOPSIS

       masscan <ip addresses/ranges> -p ports options

DESCRIPTION

       masscan is an Internet-scale port scanner, useful for large scale surveys of the Internet, or of internal
       networks. While the default transmit rate is only 100 packets/second, it can optional go as  fast  as  25
       million packets/second, a rate sufficient to scan the Internet in 3 minutes for one port.

OPTIONS

<ip/range>:  anything  on  the command-line not prefixed with a ´-´ is assumed to be an IP address or
           range. There are three valid formats. The first is a single  IPv4  address  like  "192.168.0.1".  The
           second is a range like "10.0.0.1-10.0.0.100". The third is a CIDR address, like "0.0.0.0/0". At least
           one target must be specified. Multiple targets can be specified. This can be  specified  as  multiple
           options  separated  by  space,  or  can  be  separated  by  a  comma  as  a  single  option,  such as
           10.0.0.0/8,192.168.0.1.

       •   --range <ip/range>: the same as target range spec  described  above,  except  as  a  named  parameter
           instead of an unnamed one.

       •   -p <ports, --ports <ports>: specifies the port(s) to be scanned. A single port can be specified, like
           -p80. A range of ports can be specified, like -p 20-25. A list of ports/ranges can be specified, like
           -p80,20-25. UDP ports can also be specified, like --ports U:161,U:1024-1100.

       •   --banners:  specifies  that  banners should be grabbed, like HTTP server versions, HTML title fields,
           and so forth. Only a few protocols are supported.

       •   --rate <packets-per-second>: specifies the desired rate for transmitting packets. This  can  be  very
           small  numbers,  like  0.1  for transmitting packets at rates of one every 10 seconds, for very large
           numbers like 10000000, which attempts to transmit at 10 million  packets/second.  In  my  experience,
           Windows  and  can do 250 thousand packets per second, and latest versions of Linux can do 2.5 million
           packets per second. The PF_RING driver is needed to get to 25 million packets/second.

       •   -c <filename>, --conf <filename>: reads in a configuration file. The format of the configuration file
           is described below.

       •   --resume  <filename>:  the  same  as --conf, except that a few options are automatically set, such as
           --append-output. The format of the configuration file is described below.

       •   --echo: don´t run, but instead dump the current configuration to a file. This file can then  be  used
           with the -c option. The format of this output is described below under ´CONFIGURATION FILE´.

       •   -e  <ifname>,  --adapter  <ifname>: use the named raw network interface, such as "eth0" or "dna1". If
           not specified, the first network interface found with a default gateway will be used.

       •   --adapter-ip <ip-address>: send packets using this IP address. If not specified, then  the  first  IP
           address  bound  to the network interface will be used. Instead of a single IP address, a range may be
           specified. NOTE: The size of the range must be an even power of 2, such as 1, 2, 4, 8, 16, 1024  etc.
           addresses.

       •   --adapter-port  <port>: send packets using this port number as the source. If not specified, a random
           port will be chosen in the range 40000 through 60000. This  port  should  be  filtered  by  the  host
           firewall  (like  iptables)  to prevent the host network stack from interfering with arriving packets.
           Instead of a single port, a range can be specified, like 40000-40003. NOTE: The  size  of  the  range
           must be an even power of 2, such as the example above that has a total of 4 addresses.

       •   --adapter-mac  <mac-address>:  send  packets  using this as the source MAC address. If not specified,
           then the first MAC address bound to the network interface will be used.

       •   --router-mac <mac address>: send packets to this MAC address as the destination.  If  not  specified,
           then the gateway address of the network interface will be ARPed.

       •   --ping:  indicates  that  the scan should include an ICMP echo request. This may be included with TCP
           and UDP scanning.

       •   --exclude <ip/range>: blacklist an IP address or  range,  preventing  it  from  being  scanned.  This
           overrides  any  target specification, guaranteeing that this address/range won´t be scanned. This has
           the same format as the normal target specification.

       •   --excludefile <filename>: reads in a list of exclude ranges, in  the  same  target  format  described
           above. These ranges override any targets, preventing them from being scanned.

       •   --append-output: causes output to append to file, rather than overwriting the file.

       •   --iflist: list the available network interfaces, and then exits.

       •   --retries:  the  number  of  retries  to send, at 1 second intervals. Note that since this scanner is
           stateless, retries are sent regardless if replies have already been received.

       •   --nmap: print help about nmap-compatibility alternatives for these options.

       •   --pcap-payloads: read packets from a libpcap file containing packets and extract  the  UDP  payloads,
           and associate those payloads with the destination port. These payloads will then be used when sending
           UDP packets with the matching destination port. Only one payload will be remembered per port. Similar
           to --nmap-payloads.

       •   --nmap-payloads  <filename>:  read  in a file in the same format as the nmap file nmap-payloads. This
           contains UDP payload, so that we can send useful UDP  packets  instead  of  empty  ones.  Similar  to
           --pcap-payloads.

       •   --http-user-agent  <user-agent>: replaces the existing user-agent field with the indicated value when
           doing HTTP requests.

       •   --open-only: report only open ports, not closed ports.

       •   --pcap <filename>: saves received packets (but not transmitted packets) to the libpcap-format file.

       •   --packet-trace: prints a summary of those packets sent and received. This is  useful  at  low  rates,
           like a few packets per second, but will overwhelm the terminal at high rates.

       •   --pfring:  force  the  use of the PF_RING driver. The program will exit if PF_RING DNA drvers are not
           available.

       •   --resume-index: the point in the scan at when it was paused.

       •   --resume-count: the maximum number of probes  to  send  before  exiting.  This  is  useful  with  the
           --resume-index  to  chop  up a scan and split it among multiple instances, though the --shards option
           might be better.

       •   --shards <x>/<y>: splits the scan among instances. x is the id for this scan, while y  is  the  total
           number of instances. For example, --shards 1/2 tells an instance to send every other packet, starting
           with index 0. Likewise, --shards 2/2 sends every other packet, but starting with index 1, so that  it
           doesn´t overlap with the first example.

       •   --rotate  <time>:  rotates  the  output  file, renaming it with the current timestamp, moving it to a
           separate directory. The time is specified in number of seconds, like "3600" for an hour. Or, units of
           time  can  be  specified,  such  as  "hourly",  or "6hours", or "10min". Times are aligned on an even
           boundary, so if "daily" is specified, then the file will be rotated every day at midnight.

       •   --rotate-offset <time>: an offset in the time. This is to accommodate timezones.

       •   --rotate-dir <directory>: when rotating the file, this specifies which directory to move the file to.
           A useful directory is /var/log/masscan.

       •   --seed  <integer>:  an  integer  that  seeds the random number generator. Using a different seed will
           cause packets to be sent in a different random order. Instead of an integer, the string time  can  be
           specified,  which  seeds using the local timestamp, automatically generating a different random order
           of scans. If no seed specified, time is the default.

       •   --regress: run a regression test, returns ´0´ on success and ´1´ on failure.

       •   --ttl <num>: specifies the TTL of outgoing packets, defaults to 255.

       •   --wait <seconds>: specifies the number of seconds after  transmit  is  done  to  wait  for  receiving
           packets before exiting the program. The default is 10 seconds. The string forever can be specified to
           never terminate.

       •   --offline: don´t actually transmit packets. This is useful with a low rate and --packet-trace to look
           at  what  packets  might´ve  been  transmitted.  Or,  it´s  useful  with --rate 100000000 in order to
           benchmark how fast transmit would work (assuming a zero-overhead driver). PF_RING is about 20% slower
           than the benchmark result from offline mode.

       •   -sL:  this  doesn´t  do  a  scan,  but instead creates a list of random addresses. This is useful for
           importing into other tools. The options --shard, --resume-index, and  --resume-count  can  be  useful
           with this feature.

       •   --interactive:  show  the  results  in  realtime  on  the  console.  It  has  no  effect if used with
           --output-format or --output-filename.

       •   --output-format <fmt>: indicates the format of the output file, which can be xml,  binary,  grepable,
           list, or JSON. The option --output-filename must be specified.

       •   --output-filename  <filename>: the file which to save results to. If the parameter --output-format is
           not specified, then the default of xml will be used.

       •   -oB <filename>: sets the output format to binary and saves the output in the given filename. This  is
           equivelent  to  using the --output-format and --output-filename parameters. The option --readscan can
           then be used to read the binary file. Binary files are much smaller than their XML  equivelents,  but
           require a separate step to convert back into XML or another readable format.

       •   -oX  <filename>:  sets  the  output format to XML and saves the output in the given filename. This is
           equivelent to using the --output-format xml and --output-filename parameters.

       •   -oG <filename>: sets the output format to grepable and saves the output in the given  filename.  This
           is equivelent to using the --output-format grepable and --output-filename parameters.

       •   -oJ  <filename>:  sets  the output format to JSON and saves the output in the given filename. This is
           equivelent to using the --output-format json and --output-filename parameters.

       •   -oL <filename>: sets the output format to a simple list format and saves  the  output  in  the  given
           filename. This is equivelent to using the --output-format list and --output-filename parameters.

       •   --readscan  <binary-files>:  reads the files created by the -oB option from a scan, then outputs them
           in one of the other formats, depending on command-line parameters. In other words, it  can  take  the
           binary version of the output and convert it to an XML or JSON format.

CONFIGURATION FILE FORMAT

       The  configuration  file  uses the same parameter names as on the commandline, but without the -- prefix,
       and with an = sign between the name and the value. An example configuration file might be:

           # targets
           range = 10.0.0.0/8,192.168.0.0/16
           range = 172.16.0.0/14
           ports = 20-25,80,U:53
           ping = true

           # adapter
           adapter = eth0
           adapter-ip = 192.168.0.1
           router-mac = 66-55-44-33-22-11

           # other
           exclude-file = /etc/masscan/exludes.txt

       By default, the program will read default configuration from the file /etc/masscan/masscan.conf. This  is
       useful  for system-specific settings, such as the --adapter-xxx options. This is also useful for excluded
       IP addresses, so that you can scan the entire Internet, while skipping dangerous  addresses,  like  those
       owned by the DoD, and not make an accidental mistake.

CONTROL-C BEHAVIOR

       When  the user presses ctrl-c, the scan will stop, and the current state of the scan will be saved in the
       file ´paused.conf´. The scan can be resumed with the --resume option:

           # masscan --resume paused.conf

       The program will not exit immediately, but will wait a default of 10 seconds to receive results from  the
       Internet and save the results before exiting completely. This time can be changed with the --wait option.

SIMPLE EXAMPLES

       The  following  example  scans  all  private networks for webservers, and prints all open ports that were
       found.

           # masscan 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 -p80 --open-only

       The following example scans the entire Internet for DNS servers, grabbing their versions, then saves  the
       results in an XML file.

           # masscan 0.0.0.0/0 --excludefile no-dod.txt -pU:53 --banners --output-filename dns.xml

       You should be able to import the XML into databases and such.

       The  following  example  reads  a  binary  scan  results  file called bin-test.scan and prints results to
       console.

           # masscan --readscan bin-test.scan

       The following example reads a binary scan results file called bin-test.scan and  creates  an  XML  output
       file called bin-test.xml.

           # masscan --readscan bin-test.scan -oX bin-test.xml

ADVANCED EXAMPLES

       Let´s  say  that  you want to scan the entire Internet and spread the scan across three machines. Masscan
       would be launched on all three machines using the following command-lines:

           # masscan 0.0.0.0/0 -p0-65535 --shard 1/3
           # masscan 0.0.0.0/0 -p0-65535 --shard 2/3
           # masscan 0.0.0.0/0 -p0-65535 --shard 3/3

       An alternative is with the "resume" feature. A scan has an internal index that  goes  from  zero  to  the
       number  of  ports times then number of IP addresses. The following example shows splitting up a scan into
       chunks of a 1000 items each:

           # masscan 0.0.0.0/0 -p0-65535 --resume-index 0 --resume-count 1000
           # masscan 0.0.0.0/0 -p0-65535 --resume-index 1000 --resume-count 1000
           # masscan 0.0.0.0/0 -p0-65535 --resume-index 2000 --resume-count 1000
           # masscan 0.0.0.0/0 -p0-65535 --resume-index 3000 --resume-count 1000

       A script can use this to split smaller tasks across many other machines, such as Amazon EC2 instances. As
       each  instance completes a job, the script might send a request to a central coordinating server for more
       work.

SPURIOUS RESETS

       When scanning TCP using the default IP address of your adapter, the  built-in  stack  will  generate  RST
       packets.  This  will  prevent  banner grabbing. There are are two ways to solve this. The first way is to
       create a firewall rule to block that port from being seen by the stack. How this works  is  dependent  on
       the operating system, but on Linux this looks something like:

           # iptables -A INPUT -p tcp -i eth0 --dport 61234 -j DROP

       Then, when scanning, that same port must be used as the source:

           # masscan 10.0.0.0/8 -p80 --banners --adapter-port 61234

       An  alternative  is  to  "spoof"  a different IP address. This IP address must be within the range of the
       local network, but must not otherwise be in use by either your own computer or another  computer  on  the
       network. An example of this would look like:

           # masscan 10.0.0.0/8 -p80 --banners --adapter-ip 192.168.1.101

       Setting your source IP address this way is the preferred way of running this scanner.

ABUSE COMPLAINTS

       This  scanner  is  designed  for  large-scale surveys, of either an organization, or of the Internet as a
       whole. This scanning will be noticed by those monitoring their logs, which will generate complaints.

       If you are scanning your own organization, this may lead to you being  fired.  Never  scan  outside  your
       local  subnet  without getting permission from your boss, with a clear written declaration of why you are
       scanning.

       The same applies to scanning the Internet from your employer. This is another good way to get  fired,  as
       your IT department gets flooded with complaints as to why your organization is hacking them.

       When  scanning on your own, such as your home Internet or ISP, this will likely cause them to cancel your
       account due to the abuse complaints.

       One solution is to work with your ISP, to be clear about precisely what we are doing, to  prove  to  them
       that  we  are  researching  the  Internet,  not  "hacking"  it. We have our ISP send the abuse complaints
       directly to us. For anyone that asks, we add them to our "--excludefile", blacklisting them  so  that  we
       won´t  scan  them  again.  While interacting with such people, some instead add us to their whitelist, so
       that their firewalls won´t log us anymore (they´ll still block us, of course, they just  won´t  log  that
       fact to avoid filling up their logs with our scans).

       Ultimately,  I don´t know if it´s possible to completely solve this problem. Despite the Internet being a
       public, end-to-end network, you are still "guilty until proven innocent" when you do a scan.

COMPATIBILITY

       While not listed in this document, a lot of parameters compatible with nmap will also work.

SEE ALSO

       nmap(8), pcap(3)

AUTHORS

       This   tool   was    written    by    Robert    Graham.    The    source    code    is    available    at
       https://github.com/robertdavidgraham/masscan.

                                                  January 2014                                        MASSCAN(8)