Man Linux: Main Page and Category List

NAME

       doscan - Denial Of Service Capable Auditing of Networks

SYNOPSIS

       doscan options prefix...

DESCRIPTION

       doscan  is  a  tool  to  discover  TCP services ony our network.  It is
       designed for scanning a single ports on a large  network.   (There  are
       better  tools  for  scanning  many  ports  on a small set of hosts, for
       example nmap(8).)

       The prefix parameter instructs doscan to scan  all  addresses  in  this
       prefix.   Prefix  notation is, as usual, A.B.C.D/L, where A.B.C.D is an
       IP address in dotted-quad notation, and L is a prefix length from 1  to
       32.   If  the  /L part is omitted, /32 is assumed (and a single host is
       scanned).

       doscan uses a random scatter technology to distribute the  load  across
       the   network.    Within   a   given  prefix,  hosts  are  not  scanned
       sequentially, but in a random-looking, but reproducible  order.   As  a
       result,  doscan  will  not  stress-test the network edge (just the next
       hop).  (The prefixes themselves are scanned in order.)

OPTIONS

       The --port option is mandatory, all other options are optional.

       -a timeout, --add-timeout timeout
       -A count, --add-burst count
              These options specify the timeout (in milliseconds)  before  new
              connections  are  added,  and  the  number of new connections or
              hosts  to add in one burst.  Each timeout millisecond, count new
              hosts  are  contacted.   (The per-host timeout controlled by the
              --timeout option is independent.  It specifies the timeout  once
              the first packet has been sent.)

       -b count, --banner count
              doscan  reads  at  most  count  bytes from the remote host.  The
              exact effect of this option varies among protocol  modules,  see
              the PROTOCOL MODULES section for details.

       -c count, --connections count
              At  most  count  connections  are  established  in parallel. See
              CAVEATS below for problems resulting from system file descriptor
              limits,  and  instructions  for  choosing  this  parameter.   By
              default, at most 50 parallel connections are established.

       -E, --no-epoll
              Do not use the epoll kernel interface  even  if  it’s  available
              (useful for debugging).

       -f, --file name
              doscan  reads  prefixes  from  the file name, in addition to the
              command line.  The file shall contain one prefix per line.   See
              the  DESCRIPTION section above for the prefix format.  To better
              distribute scanning of long  prefix  lists,  all  prefixies  are
              reorded randomly if the --file option is used.

       -i, --indicator
              Display  a  progress  indicator.  If doscan is invoked with this
              option, the number of connections which have been established so
              far,  the total number of addresses to be scanned, the number of
              currently active connections, and the number of hosts for  which
              a report entry has been generated are displayed periodically.

       -n, --net-errors
              Instructs doscan to report network errors even if they prevent a
              connection.  Normally, such errors are suppressed.

       -o format, --output format
              This option changes the format which doscan uses to  report  its
              findings.  See the OUTPUT FORMAT section below for details.

       -p port, --port port
              The  --port  option  controls  to which TCP port doscan connects
              when scanning a host.

       --protocol Istring, -P Istring
              Chooses the protocol module string.  See  the  PROTOCOL  MODULES
              section for information on available protocol modules.

       --send string, -s string
       --receive regexp, -r regexp
              The effects of these options depend on the protocol module.  See
              the PROTOCOL MODULES section for details.

       --style style, -S style
              This option controls the output style.  See  the  OUTPUT  FORMAT
              section for details.

       -t timeout, --timeout timeout
              This  option  sets  the connect timeout to timeout milliseconds.
              If  this  time  passes  without   a   successfully   established
              connection, doscan skips the hosts.

       -v, --verbose
              Turn on additional reporting to standard error.

       -h, --help
              Display help message and exit.

       -V, --version
              Output version information and exit.

PROTOCOL MODULES

       doscan  supports several protocol modules.  By default, the generic tcp
       module is used, but you can choose another module using the  --protocol
       option.   The  effect  of  the  --banner,  --send and --receive options
       depends on the protocol module.  Available modules include:

       http   This module causes doscan to connect to  HTTP  servers,  send  a
              request,   and   collect  the  server  identification  from  the
              response.

              The --banner option specifies the maximum receive  buffer  size.
              It defaults to 4000 bytes.

              The  --send  option  specifies  the  request that is send to the
              server.  The string can  include  C  escape  sequences  to  send
              control   characters.    By   default,   the   request   GET   /
              HTTP/1.0\r\n\r\n (that is, GET / HTTP/1.0 followed by  the  four
              characters CR, LF, CR, LF) is sent.

              The --receive option is not supported by this protocol module.

       http_proxy
              This  protocol  module  probes hosts for open HTTP proxies.  The
              --port option controls the port that is  probed.   The  required
              --receive  option  must  be  an  integer  in the range from 1 to
              65534, the number specifies the port on which doscan listens for
              the  connections  from open proxies.  The required --send option
              specifies the HTTP request method, either "GET" or "CONNECT".

              The --banner option is not supported by this protocol module.

              Warning: In the worst case, the amount of  file  descriptors  is
              slightly  more  than  twice  the  number of parallel connections
              given  by  the  --connections  options.   The  additional   file
              descriptors  are  used  by  doscan’s  HTTP  server  component to
              process the connections from open proxies.

              See the EXAMPLES section for  some  convenient  combinations  of
              those otions.

       ident_check
              This  protocol  module  reports  hosts  which  have  TCP service
              listening on the specified port which is not a proper IDENT/AUTH
              daemon.   It  is  most  useful  with  a  --port 113 command line
              argument.  None of the --banner, --receive  and  --send  options
              are supported.

       tcp    This  module  is  intended  for  generic TCP service probing and
              fingerprinting.

              The --banner  option  controls  the  maximum  length  of  banner
              strings  which are collected.  If its argument is zero or if the
              option is not specified, no banner strings  are  collected.   In
              this case, doscan closes connections immediately after they have
              been established (which results in an increased scanning  rate).

              After  establishing  a  connection,  doscans  sends  the  string
              specified by the --send option to the remote host.   The  string
              can  contain  the  usual C escape sequences (including \000), to
              send non-printable characters.

              The  --receive  option  specifies  a   Perl-compatible   regular
              expression  (PCRE),  and  doscan  uses  it  to  analyze the data
              returned by a remote host.  The regular expression  may  contain
              at  least one capturing subpattern, it is always anchored at the
              beginning of  the  received  data.  The  character  .   (period)
              matches  all  characters  (including  newline).  $ (dollar sign)
              matches the very end of the received data (which  may,  however,
              still  be incomplete).  See pcrepattern(3) for details about the
              syntax of Perl-compatible regular expression.

              The --receive regular expression is used by doscan  for  several
              purposes.   If  data  is received from a remote host, and if the
              regular expression ends with $, doscan  immediately  closes  the
              connection  if  all  the  data  received  so  far from this host
              matches the regular expression.  (doscan assumes that the  reply
              is  complete;  increased  scanning speed is the result.)  When a
              connection is terminated for any reason, doscan  checks  if  the
              regular expression matches the collected data.  If it doesn’t, a
              no match error is recorded (if no other error occured).   If  it
              does,   and   the   regular   expression  contains  a  capturing
              subpattern, that subpattern is recorded.  Otherwise,  the  whole
              data is recorded.

              In  order  to  use the --receive option, you have to specify the
              --banner option as well.

       udp    This module is a generic UDP scanner, as far  such  a  thing  is
              possible.   It  sends  up  to five UDP packets (whose payload is
              controlled by the mandatory  --send  option)  to  the  specified
              port.   Replies  are collected.  The --banner option is implicit
              and set to the maximum payload size. Retransmission  is  stopped
              when the first reply is received.

              In  verbose mode (with both --verbose and --net-errors options),
              a warning like "stray UDP packet from 192.0.2.4:7" is printed to
              standard  error  when  an  unexpected  UDP  packets is received.
              Packets to sent to network or broadcast  adresses  trigger  such
              packets,  and  poorly  implemented  UDP  services on multi-homed
              machines answer with a different source IP address.

OUTPUT FORMAT

       doscan prints all gathered data  about  scanned  prefixes  to  standard
       output,  just  before the program terminates.  The output format can be
       changed with the --output option.  The format argument of  this  option
       is  a  string  which includes % substitions, similar to printf(3).  The
       following substitions are supported

       %%     A literal percent character.

       %a     The address of the remote host.

       %b     The banner return by the host.

       %e     The error code as a string, empty if  no  error  occurred  while
              scanning the host.

              This  is  either a system error constant (such as ECONNREFUSED),
              or the string unknown (unknown error code).   If  the  --receive
              option  is  active  and  the  received  data  does not match the
              specified regular expresion, and no other error has occured, the
              column contains no match.

       %E     The numeric error code corresponding to the %e error message, or
              zero if no error occurred.  Negativ error numbers  are  returned
              for  internal  errors  (such  as  a  failed  match  against  the
              --receive regular expression).

       %n     The host name corresponding to the scanned IP address (based  on
              a  DNS  lookup).   Note that this slows down reporting a lot, in
              general.  For this reason, it  is  not  recommended  to  use  %n
              together with --style unsorted.

       %N     A verbatim ASCII LF (newline) character.

       %r     The  time when the information was gathered, measured in seconds
              since the scanning started.

       %t     The time when the information was gathered, in local time.

       %T     Same as %t, but in UTC (also known as GMT).

       %%     A verbatim percent sign (%).

       The default value for the --output option is %T\t%a\t%e\t%b,  where  \t
       denotes an ASCII HTAB character.

       The --style or -S option supports the following arguments:

       sort-by-host
              The  output  is  sorted  by  the IP address of the scanned host.
              (This is the default.)

       unsorted
              The output is not sorted and appears  in  the  order  the  hosts
              responded.

              Caution:  Do  not  use  this  style  together  with  an --output
              argument which includes %n, and do not pipe the output of doscan
              to  a  process  which  cannot  read  its standard input quickly.
              Output is performed synchronously, and if it  is  delayed,  this
              might impact the scanning activity.

       In  all  cases  except  unsorted,  output  is  delayed  just before the
       termination of the program.

EXAMPLES

              doscan --banner 100 --port 13 192.0.2.1

       Prints the time on the host 192.0.2.1 (if it runs a daytime server).

              doscan --banner 100 --receive(.*)\n$--port 22 192.0.2.0/24

       Scan for SSH servers and record the banners (usually containing version
       information about the SSH server).

              doscan   --banner   200   --receive(.*?)\r?\n$--port  25
              192.0.2.0/24

       Scan for SMTP servers and record their greeting  messages.   Works  for
       FTP as well, with --port 21 instead of --port 25.

              doscan --banner 2000 --sendGET / HTTP/1.0\r\n\r\n\
                 --receive.*?\nServer: *([^\r\n]*) *\r?\n.*$\
                 --port 80 192.0.2.0/24

       Scan for HTTP servers and record their version strings.

              doscan --protocol http_proxy --port 3128 \
                 --send GET --receive 80 192.0.2.0/24

       Scan  for  open  proxies  on  TCP port 3128, using the GET HTTP request
       method.  Try to connect back to port 80 on the scanning host.

       It is recommended that you use port 80 for the listening  port  if  you
       scan using GET requests.  For CONNECT requests, port 443 should be used
       (see below).  Some administrators might restrict CONNECT  to  TCP  port
       443  (or  filter  it for the GET request method), so these choices give
       best results.

              doscan --protocol http_proxy --port 8080 \
                 --send CONNECT --receive 443 192.0.2.0/24

       Scan for open proxies on TCP port 8080, using the CONNECT HTTP  request
       method.  Try to connect back to port 443 on the scanning host.

CAVEATS

       The most important option for tuning is --connections.  Increasing this
       option can greatly increase scanning performance.  However, there a two
       caveats:  Many  connections require many sockets, and your system might
       not support so many of them.  Furthermore, a large number  of  parallel
       connections  generates  significant  numbers of packets, and a high CPU
       load, which can  both  lead  to  spurious  connection  failures  (false
       negatives).

       To  increase  the  number  of  connections your system can process, you
       usually have to raise the corresponding ulimit  value  in  your  shell,
       which  requires  root  privileges.   For  example,  in bash(1), you can
       invoke

              ulimit -n 10030

       to  raise  the  descriptor  limit  to  10030.   You   can   then   pass
       --connections 10000 to doscan.  (Some file descriptors are not used for
       scanning, but have to be open nonetheless, and count towards the ulimit
       -n limit.)

       On  Linux-based  systems,  you  might have to adjust some sysctl values
       which control system-wide descriptor limits.  Refer to  sysctl.conf(5),
       the  Documentation  directory  in  the Linux source tree, or the source
       code itself for details.

       Note, however, that if you increase the number of parallel  connections
       beyond a certain value, you will lose some hosts, that is they will not
       be reported even though they are running a service on the scanned port.
       Therefore,  you should watch both network and CPU utilization to detect
       bottlenecks.  Although the random scatter technique employed by  doscan
       tries to split the load across your whole network, this obviously fails
       if the next hop cannot bear the traffic.

AUTHOR

       doscan was written by Florian Weimer.

SEE ALSO

       nmap(8), pcrepattern(3), sysctl.conf(5) (on GNU/Linux  systems),  shell
       documentation for the ulimit interface

                                  2003-07-27