Man Linux: Main Page and Category List

NAME

       nast - Network Analyzer Sniffer Tool

SYNOPSIS

       nast  [-G]  [-i  interface]  [-l  filename] [-f filter] [--ld filename]
       [-pdxPmsgrSMLbcCBVh]

DESCRIPTION

       Nast is a packet sniffer  and  a  LAN  analyzer  based  on  Libnet  and
       Libpcap.

       It  can  sniff  in  normal mode or in promiscuous mode the packets on a
       network interface and log it.  It dumps the headers of packets and  the
       payload  in  ascii  or  ascii-hex  format.  You can apply a filter. The
       sniffed data can be saved in a separated file.

       As analyzer tool, it has many features like:
              * Build LAN hosts list
              * Follow a TCP-DATA stream
              * Find LAN Internet gateways
              * Discover promiscuous nodes
              * Reset an established connection
              * Perform a single half-open portscanner
              * Perform a multi half-open portscanner
              * Find link type (hub or switch)
              * Catch daemon banner of LAN nodes
              * Control ARP answers to discover possible ARP-spoofing
              * Byte counting with an optional filter
              * Write reports logging

       It also provides a new ncurses interface.

CMDLINE SNIFFER OPTIONS

       -i, --interface
              Select the Interface, if not specified will be auto-detected.

       -p, --promisc
              Disable promiscuous mode on NIC.

       -d, --ascii-data
              Print data in ascii format.

       -x, --ascii-hex-data
              Print data in ascii-hex format.

       -f, --filter <"filter">
              Apply <"filter"> to sniffer (see "FILTER SYNTAX"  section  below
              for syntax)

           --ld <filename>
              Log  captured  data  to <filename> (only payload). Use -l to log
              all packet instead, useful with -B

       -T, --tcpdump-log <filename>
              Log all packets in tcpdump format to <filename>

       -R, --tcpdump-log-read <filename>
              Read all packets saved in tcpdump format from <filename>

ANALYZER FEATURES

       -P, --check-promisc <ip>
              Check other NIC on the LAN with the promiscuous flag set.
              By performing a fake ARP broadcast, we can determine if a NIC is
              in  promiscuous  mode  or  not.   If  the  checked  host  is  in
              promiscuous mode it will responds with an ARP response otherwise
              it drop the packet.
              Note: This method doesn’t work with all OS
              Use -P all to query all network NIC

              eg: root@localhost:~/$ nast -P 192.168.1.2

              NAST "NETWORK ANALYZER SNIFFER TOOL"

              192.168.1.2 (localhost.org)             Found!!

              We can check all nodes by using:
              root@localhost:~/$ nast -P all

       -m, --host-list
              Map  the LAN by performing a series of ARP request to sequential
              subnet IP addresses.

              eg: root@localhost:~/$ nast -m

              NAST "NETWORK ANALYZER SNIFFER TOOL"

              Mapping the Lan for 255.255.255.0 subnet ... please wait

              MAC address             IP address (hostname)
              ===========================================================
              00:4R:BR:3E:21:12       192.168.1.1(nast.experiment.net)
              00:50:BA:80:AC:11       192.168.1.2 (localhost.org) (*)

              (*) This is localhost

       -s, --tcp-stream
              Follow a TCP/IP connection printing all  data  in  payload.  You
              must specify the IP addresses of the ends.

              eg of a ftp connection:
              root@localhost:~/$ nast -s

              NAST "NETWORK ANALYZER SNIFFER TOOL"

              Type connection extremes
              ------------------------
              1st ip : 192.168.1.1
              1st port : 1041
              2nd : 192.168.1.2
              2nd port : 21

              NAST TCP STREAM LOG
              192.168.1.1->mistaya.neverland.org
              PASV
              192.168.1.1<-mistaya.neverland.org
              227 Entering Passive Mode (192,168,1,2,4,12).
              192.168.1.1->mistaya.neverland.org
              LIST
              (...)

       -g, --find-gateway
              Try to find possible Internet-gateways.
              We  send  a  SYN  packet  to  a  public  host on port 80 through
              sequential host-lan and if a SYN-ACK return  we  have  find  the
              gateway.

       -r, --reset-connection
              Destroy  an  established  connection.  You  must  specify the IP
              addresses of the ends and at  least  one  port  .   Please,  pay
              attention when use this function.

              eg: root@localhost:~/$ nast -r

              NAST "NETWORK ANALYZER SNIFFER TOOL"

              Type connection extremes
              ------------------------
              1 ip / hostname : 192.168.1.1
              1 port (0 to autodetect) : 0
              2 ip / hostname : 192.168.1.2
              2 port (0 to autodetect) : 21

              - Waiting for SEQ ACK (192.168.1.1 -> 192.168.1.2:21)
              - Stoled SEQ (247656261) ACK (3764364876)...
              - Connection has been resetted

              This  feature  works  only  if  we can read SEQ and ACK numbers,
              because RST mechanism works with them.

       -S, --port-scanner
              Performs a half-open port scanning  on  the  selected  host.  It
              tries also to determine some firewall (just iptables) rules.
              About this technique NMAP says: 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  you  wait  for  a  response.  A  SYN|ACK
              indicates  the  port is listening. A RST is indicative of a non-
              listener.  If a SYN|ACK is received, a RST is  immediately  sent
              to  tear  down   the   connection  (actually  our OS kernel does
              this for us).  The primary advantage to this scanning  technique
              is  that  fewer  sites will log it.  Unfortunately you need root
              privileges to build these custom SYN packets.

              eg: root@localhost:~/$ nast -S
              NAST "NETWORK ANALYZER SNIFFER TOOL"
              Port Scanner extremes
              Insert IP to scan   : 192.168.1.3
              Insert Port range   : 1-100

              Wait for scanning...

              State           Port            Services                Notes
              Open            22              ssh                     None
              Open            27              nsw-fe                  None

              All the other 98 ports are in state closed
              Scanning terminated on Apr 14 21:46:55

              The Port range could be in the following style:
              eg: 1-100       (means from port 1 to 100)
                  1,3,5,1000  (means ports 1,3,5 and 1000)
                  1-50,60     (means from port 1 to 50 and port 60)

       -M, --multi-port-scanner
              Same as above but done on all hosts of the lan.

       -L, --find-link
              Tries to determine what type of link is used in the LAN (Hub  or
              switch).
              In the LAN segment is there a HUB or a SWITCH? We can find it by
              sending a spoofed ICMP echo-request (to work there  must  be  at
              least  3  host in LAN and at least one of them must reply with a
              ICMP echo-replay)

       -b, --daemon-banner
              Checks the most famous daemon banner on the LAN’s hosts.
              You can customize ports database adding them to ports[] variable
              in main.c

       -c, --check-arp-poisoning
              Control  ARP  answers  to discover possible ARP spoofing attacks
              like man-in-the-middle
              When run, Nast make a database of all network node (IP  and  MAC
              address),  then sniff ARP response and verify the correctness of
              IP-mac address association.  Remember to execute Nast  when  you
              are  sure that nobody is making ARP-poisoning, than have fun and
              relax and check program output:).

       -C, --byte-counting <"filter">
              Apply traffic counting to <"filter"> (see FILTER SYNTAX  section
              below for syntax)
              Use -C any if you don’t want to use a filter.

              eg: root@localhost:~/$ nast -C any

              NAST "NETWORK ANALYZER SNIFFER TOOL"

              Reading from "eth0"

              Packets          Total           Current speed           Average
              speed
              ----------------------------------------------------------------
              - 24            1008B           18B/s                   21B/s

GENERAL OPTIONS

       -G, --ncurses
              Run  Nast  with  the  ncurses  interfaces (only if compiled with
              ncurses support)

       -l, --log-file <filename>
              Log reports to <filename>. Work with many features.

       -B, --daemon
              Run in background like daemon and turn off stdout  (very  useful
              for sniffer/stream/ARP control logging)

       -V, --version
              Show version information

NCURSES INTERFACE NOTE

       Versions  later  0.2.0  have  a  new  ncurses  interface which has many
       improvements regarding the  correspondent  command  line  version.  For
       example  you can select the connection interactively for tcp stream and
       reset features and byte counting module  show  much  more  informations
       (packets type and connections load).

       Please read NCURSES_README file before using the ncurses interface!

FILTER SYNTAX, WHAT PCAP GIVE US!

       Important:  this section has been copied from Tcpdump 3.7.1 manpage and
       "expression" here stand from "filter".
       Remeber to enclose filter between apexes ("something like this")

        expression
              selects which packets will  be  dumped.   If  no  expression  is
              given,  all  packets on the net will be dumped.  Otherwise, only
              packets for which expression is ‘true’ will be dumped.

              The expression consists of one or more  primitives.   Primitives
              usually  consist  of  an  id (name or number) preceded by one or
              more qualifiers.  There are three different kinds of qualifier:

              type   qualifiers say what kind of thing the id name  or  number
                     refers to.  Possible types are host, net and port.  E.g.,
                     ‘host foo’, ‘net 128.3’, ‘port 20’.  If there is no  type
                     qualifier, host is assumed.

              dir    qualifiers  specify  a  particular  transfer direction to
                     and/or from id.  Possible directions are src, dst, src or
                     dst  and  src and dst.  E.g., ‘src foo’, ‘dst net 128.3’,
                     ‘src  or  dst  port  ftp-data’.   If  there  is  no   dir
                     qualifier, src or dst is assumed.  For ‘null’ link layers
                     (i.e. point to point protocols such as slip) the  inbound
                     and  outbound qualifiers can be used to specify a desired
                     direction.

              proto  qualifiers restrict the match to a  particular  protocol.
                     Possible protos are: ether, fddi, tr, ip, ip6, arp, rarp,
                     decnet, tcp and udp.  E.g., ‘ether  src  foo’,  ‘arp  net
                     128.3’,  ‘tcp  port 21’.  If there is no proto qualifier,
                     all protocols  consistent  with  the  type  are  assumed.
                     E.g.,  ‘src  foo’  means  ‘(ip  or  arp or rarp) src foo’
                     (except the latter is not legal syntax), ‘net bar’  means
                     ‘(ip  or  arp or rarp) net bar’ and ‘port 53’ means ‘(tcp
                     or udp) port 53’.

              [‘fddi’ is actually an alias for ‘ether’; the parser treats them
              identically  as  meaning  ‘‘the  data  link  level  used  on the
              specified network interface.’’  FDDI headers  contain  Ethernet-
              like   source  and  destination  addresses,  and  often  contain
              Ethernet-like packet types, so you  can  filter  on  these  FDDI
              fields just as with the analogous Ethernet fields.  FDDI headers
              also contain other fields, but you cannot name  them  explicitly
              in a filter expression.

              Similarly,   ‘tr’   is   an  alias  for  ‘ether’;  the  previous
              paragraph’s statements about FDDI headers also  apply  to  Token
              Ring headers.]

              In  addition  to  the  above, there are some special ‘primitive’
              keywords that don’t  follow  the  pattern:  gateway,  broadcast,
              less,  greater  and  arithmetic  expressions.   All of these are
              described below.

              More complex filter expressions are built up by using the  words
              and,  or and not to combine primitives.  E.g., ‘host foo and not
              port ftp and not port  ftp-data’.   To  save  typing,  identical
              qualifier lists can be omitted.  E.g., ‘tcp dst port ftp or ftp-
              data or domain’ is exactly the same as ‘tcp dst port ftp or  tcp
              dst port ftp-data or tcp dst port domain’.

              Allowable primitives are:

              dst host host
                     True  if  the  IPv4/v6 destination field of the packet is
                     host, which may be either an address or a name.

              src host host
                     True if the IPv4/v6 source field of the packet is host.

              host host
                     True if either the IPv4/v6 source or destination  of  the
                     packet is host.  Any of the above host expressions can be
                     prepended with the keywords, ip, arp, rarp, or ip6 as in:
                          ip host host
                     which is equivalent to:
                          ether proto \ip and host host
                     If  host  is  a  name  with  multiple  IP addresses, each
                     address will be checked for a match.

              ether dst ehost
                     True if the ethernet destination address is ehost.  Ehost
                     may  be  either  a name from /etc/ethers or a number (see
                     ethers(3N) for numeric format).

              ether src ehost
                     True if the ethernet source address is ehost.

              ether host ehost
                     True if either the ethernet source or destination address
                     is ehost.

              gateway host
                     True  if  the  packet  used host as a gateway.  I.e., the
                     ethernet source  or  destination  address  was  host  but
                     neither  the  IP  source nor the IP destination was host.
                     Host must be a  name  and  must  be  found  both  by  the
                     machine’s  host-name-to-IP-address  resolution mechanisms
                     (host name file, DNS, NIS, etc.)  and  by  the  machine’s
                     host-name-to-Ethernet-address     resolution    mechanism
                     (/etc/ethers, etc.).  (An equivalent expression is
                          ether host ehost and not host host
                     which can be used with either names or numbers for host /
                     ehost.)   This  syntax  does  not  work  in  IPv6-enabled
                     configuration at this moment.

              dst net net
                     True if the IPv4/v6 destination address of the packet has
                     a  network  number of net.  Net may be either a name from
                     /etc/networks or a network number  (see  networks(4)  for
                     details).

              src net net
                     True  if  the  IPv4/v6 source address of the packet has a
                     network number of net.

              net net
                     True if either the IPv4/v6 source or destination  address
                     of the packet has a network number of net.

              net net mask netmask
                     True  if  the  IP  address  matches net with the specific
                     netmask.  May be qualified with src or  dst.   Note  that
                     this syntax is not valid for IPv6 net.

              net net/len
                     True  if  the  IPv4/v6 address matches net with a netmask
                     len bits wide.  May be qualified with src or dst.

              dst port port
                     True if the packet is ip/tcp, ip/udp, ip6/tcp or  ip6/udp
                     and  has  a destination port value of port.  The port can
                     be a number or a name used in /etc/services (see  tcp(4P)
                     and  udp(4P)).   If  a name is used, both the port number
                     and protocol are checked.  If a number or ambiguous  name
                     is  used, only the port number is checked (e.g., dst port
                     513  will  print  both  tcp/login  traffic  and   udp/who
                     traffic,  and  port domain will print both tcp/domain and
                     udp/domain traffic).

              src port port
                     True if the packet has a source port value of port.

              port port
                     True if either the source  or  destination  port  of  the
                     packet is port.  Any of the above port expressions can be
                     prepended with the keywords, tcp or udp, as in:
                          tcp src port port
                     which matches only tcp packets whose source port is port.

              less length
                     True  if  the  packet  has a length less than or equal to
                     length.  This is equivalent to:
                          len <= length.

              greater length
                     True if the packet has a length greater than or equal  to
                     length.  This is equivalent to:
                          len >= length.

              ip proto protocol
                     True  if  the  packet  is  an  IP  packet (see ip(4P)) of
                     protocol type protocol.  Protocol can be a number or  one
                     of the names icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp,
                     udp, or tcp.  Note that the  identifiers  tcp,  udp,  and
                     icmp  are also keywords and must be escaped via backslash
                     (\),  which  is  \\  in  the  C-shell.   Note  that  this
                     primitive does not chase the protocol header chain.

              ip6 proto protocol
                     True  if  the  packet  is an IPv6 packet of protocol type
                     protocol.  Note that this primitive does  not  chase  the
                     protocol header chain.

              ip6 protochain protocol
                     True  if the packet is IPv6 packet, and contains protocol
                     header with type protocol in its protocol  header  chain.
                     For example,
                          ip6 protochain 6
                     matches  any  IPv6 packet with TCP protocol header in the
                     protocol header  chain.   The  packet  may  contain,  for
                     example,  authentication  header, routing header, or hop-
                     by-hop option header, between IPv6 header and TCP header.
                     The  BPF  code  emitted  by this primitive is complex and
                     cannot be optimized by BPF optimizer code in tcpdump,  so
                     this can be somewhat slow.

              ip protochain protocol
                     Equivalent  to  ip6  protochain protocol, but this is for
                     IPv4.

              ether broadcast
                     True if the packet is an ethernet broadcast packet.   The
                     ether keyword is optional.

              ip broadcast
                     True  if the packet is an IP broadcast packet.  It checks
                     for  both   the   all-zeroes   and   all-ones   broadcast
                     conventions, and looks up the local subnet mask.

              ether multicast
                     True  if the packet is an ethernet multicast packet.  The
                     ether  keyword  is  optional.   This  is  shorthand   for
                     ‘ether[0] & 1 != 0’.

              ip multicast
                     True if the packet is an IP multicast packet.

              ip6 multicast
                     True if the packet is an IPv6 multicast packet.

              ether proto protocol
                     True  if  the packet is of ether type protocol.  Protocol
                     can be a number or one of the names ip, ip6,  arp,  rarp,
                     atalk,  aarp,  decnet,  sca, lat, mopdl, moprc, iso, stp,
                     ipx,  or  netbeui.   Note  these  identifiers  are   also
                     keywords and must be escaped via backslash (\).

                     [In  the  case  of  FDDI  (e.g., ‘fddi protocol arp’) and
                     Token Ring (e.g., ‘tr protocol arp’), for most  of  those
                     protocols,  the  protocol  identification  comes from the
                     802.2 Logical Link Control (LLC) header, which is usually
                     layered on top of the FDDI or Token Ring header.

                     When  filtering  for most protocol identifiers on FDDI or
                     Token Ring, tcpdump checks only the protocol ID field  of
                     an   LLC   header   in  so-called  SNAP  format  with  an
                     Organizational Unit Identifier  (OUI)  of  0x000000,  for
                     encapsulated  Ethernet;  it  doesn’t  check  whether  the
                     packet is in SNAP format with an OUI of 0x000000.

                     The exceptions are iso, for  which  it  checks  the  DSAP
                     (Destination  Service  Access  Point)  and  SSAP  (Source
                     Service Access Point) fields of the LLC header,  stp  and
                     netbeui,  where it checks the DSAP of the LLC header, and
                     atalk, where it checks for a SNAP-format packet  with  an
                     OUI of 0x080007 and the Appletalk etype.

                     In the case of Ethernet, tcpdump checks the Ethernet type
                     field for most of those  protocols;  the  exceptions  are
                     iso,  sap,  and netbeui, for which it checks for an 802.3
                     frame and then checks the LLC header as it does for  FDDI
                     and  Token  Ring,  atalk,  where  it  checks both for the
                     Appletalk etype in an Ethernet  frame  and  for  a  SNAP-
                     format  packet  as it does for FDDI and Token Ring, aarp,
                     where it checks for the Appletalk ARP etype in either  an
                     Ethernet  frame  or  an  802.2  SNAP frame with an OUI of
                     0x000000, and ipx, where it checks for the IPX  etype  in
                     an  Ethernet  frame,  the IPX DSAP in the LLC header, the
                     802.3 with no LLC header encapsulation of  IPX,  and  the
                     IPX etype in a SNAP frame.]

              decnet src host
                     True  if  the DECNET source address is host, which may be
                     an address of the form ‘‘10.123’’, or a DECNET host name.
                     [DECNET  host  name  support  is only available on Ultrix
                     systems that are configured to run DECNET.]

              decnet dst host
                     True if the DECNET destination address is host.

              decnet host host
                     True if either the DECNET source or  destination  address
                     is host.

              ip, ip6, arp, rarp, atalk, aarp, decnet, iso, stp, ipx, netbeui
                     Abbreviations for:
                          ether proto p
                     where p is one of the above protocols.

              lat, moprc, mopdl
                     Abbreviations for:
                          ether proto p
                     where p is one of the above protocols.  Note that tcpdump
                     does not currently know how to parse these protocols.

              vlan [vlan_id]
                     True if the packet is an IEEE  802.1Q  VLAN  packet.   If
                     [vlan_id]  is  specified, only true is the packet has the
                     specified vlan_id.  Note  that  the  first  vlan  keyword
                     encountered  in  expression  changes the decoding offsets
                     for the remainder of expression on  the  assumption  that
                     the packet is a VLAN packet.

              tcp, udp, icmp
                     Abbreviations for:
                          ip proto p or ip6 proto p
                     where p is one of the above protocols.

              iso proto protocol
                     True  if  the  packet  is  an OSI packet of protocol type
                     protocol.  Protocol can be a number or one of  the  names
                     clnp, esis, or isis.

              clnp, esis, isis
                     Abbreviations for:
                          iso proto p
                     where p is one of the above protocols.  Note that tcpdump
                     does an incomplete job of parsing these protocols.

EXAMPLES

       Here are some examples of the use of NAST:

   nast -f "src 192.168.1.2"
       In this example with the help of the filter we choose to see  only  the
       traffic from 192.168.1.2

   nast -p -B --ld logfile.txt
       Here  we run nast in background mode and log all data that pass through
       our NIC.

   nast -S -l logfile.txt
       In this other case we log the results of the port scanner in  the  file
       "logfile.txt"

   nast -c -B
       This  is  a  very  useful  options. We run in background mode nast that
       checks if someone is arp-poisoning.

SUPPORTED PLATFORMS

       Tested:
       * Linux 2.4.x
       * Linux 2.6.x
       * FreeBSD 5.x
       * FreeBSD 4.x

       Not tested yet:
       * Linux 2.2.x

AVAILABILITY

       Official web site: http://nast.berlios.de
       Newsletter: http://lists.berlios.de/mailman/listinfo/nast-news

KNOWN BUGS

       * Promiscuous mode scanner many times returns wrong results
       * Sometimes the port scanner generates false results

       Please report bugs to authors

AUTHORS

       Embyte <embyte@madlab.it>
       Snifth <snifth@box.it>

LICENSE

       GNU GENERAL PUBLIC LICENSE Version 2, June 1991
       See COPYING for details.