This case was approved in today's PSARC meeting.

Brian Utterback wrote:
> I am sponsoring the following fast-track for Martina Tomisova. This case 
> proposes to integrate the ngrep open-source utility into the SFW 
> consolidation.
> A patch binding is requested.
> 
> Template Version: @(#)sac_nextcase %I% %G% SMI
> This information is Copyright 2008 Sun Microsystems
> 1. Introduction
>     1.1. Project/Component Working Name:
>        Integrate ngrep into Solaris
>     1.2. Name of Document Author/Supplier:
>        Author:  Martina Tomisova
>     1.3  Date of This Document:
>       04 September, 2008
> 4. Technical Description
> Proposal:
> 
>         Integrate ngrep into Solaris.
> 
> Detail:
> 
>         ngrep is a tool for ?grepping? specific information in network
>         packets. ngrep strives to provide most of GNU grep's common
>         features, applying them to the network layer. ngrep is a
>         pcap-aware tool that will allow you to specify extended regular
>         or hexadecimal expressions to match against data payloads of
>         packets. It currently recognizes IPv4, TCP, UDP, ICMPv4, IGMP
>         and Raw across Ethernet, PPP, SLIP, FDDI, Token Ring and null
>         interfaces, and understands BPF filter logic in the same fashion
>         as more common packet sniffing tools, such as tcpdump and snoop.
>         The current version of ngrep is 1.45 at the time of this case.
> 
> 
> 
> Exported Interfaces:
> 
>         SUNWngrep          Uncommitted         Package name
>         /usr/sbin/ngrep    Committed           Executable location
>         ngrep              Uncommitted         Commandline syntax
> 
> Imported Interfaces:
> 
>         SUNWlibpcap        Libraries (libpcap.so)
> 
> Security:
> 
>         RBAC - Anyone who has a role which contains the Network
>         Management privileges can execute the ngrep as a root. (no SUID
>         bit for all, just line added to /etc/security/exec_attr as for
>         other sniffing tools like snoop).
> 
>         There was an '-R' option that prevents ngrep from dropping the
>         root privileges after it starts the capturing. It could be
>         dangerous (one never knows what will be received from the
>         network). This option has been removed.
> 
> References:
> 
>  [1] http://ngrep.sourceforge.net/
>      Author(s) of ngrep: Jordan Ritter <jpr5 at darkridge.com>
>  [2] 6721123 - Integrate ngrep into Solaris.
> 
>  List of new files:
>  usr/sbin/ngrep
>  usr/share/man/man1m/ngrep.1m 
> 
> 6. Resources and Schedule
>     6.4. Steering Committee requested information
>       6.4.1. Consolidation C-team Name:
>               on
>     6.5. ARC review type: FastTrack
>     6.6. ARC Exposure: open
> 
> Proposes man page:
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
> NAME
>      ngrep - network grep
> 
> 
> SYNOPSIS
>      ngrep <-hNXViwqpevxlDtTRM> <-IO pcap_dump > < -n num > <  -d
>      dev  >  <  -A  num  >  <  -s  snaplen > < -S limitlen > < -W
>      normal|byline|single|none > < -c cols > < -P  char  >  <  -F
>      file > < match expression > < bpf filter >
> 
> 
> DESCRIPTION
>      ngrep strives to provide most of GNU grep's common features,
>      applying  them  to the network layer.  ngrep is a pcap-aware
>      tool that will allow you to specify extended regular expres-
>      sions  to  match  against  data  payloads  of  packets.   It
>      currently recognizes TCP, UDP and ICMP across Ethernet, PPP,
>      SLIP,  FDDI  and null interfaces, and understands bpf filter
>      logic in the same fashion as  more  common  packet  sniffing
>      tools, such as tcpdump(1M) and snoop(1).
> 
>      Ngrep makes no effort to validate input from live or offline
>      sources  as  it  is focused more on performance and handling
>      large amounts of data than protocol  correctness,  which  is
>      most often a fair assumption to make.  However, sometimes it
>      matters and thus as a rule ngrep will try  to  be  defensive
>      and  drop  any  root  privileges it might have after started
>      catching of packets.
> 
> 
> 
> OPTIONS
>      -h   Display help/usage information.
> 
> 
>      -N   Show sub-protocol number  along  with  single-character
>           identifier (useful when observing raw or unknown proto-
>           cols).
> 
> 
>      -X   Treat the match expression  as  a  hexadecimal  string.
>           See the explanation of match expression below.
> 
> 
>      -V   Display version information.
> 
> 
>      -i   Ignore case for the regex expression.
> 
> 
>      -w   Match the regex expression as a word.
> 
> 
> 
> 
> *nux               Last change: November 2006                   1
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>      -q   Be quiet;  don't  output  any  information  other  than
>           packet headers and their payloads (if relevant).
> 
> 
>      -p   Don't put the interface into promiscuous mode.
> 
> 
>      -e   Show empty packets.  Normally empty  packets  are  dis-
>           carded  because  they  have  no  payload to search.  If
>           specified, empty packets will be shown,  regardless  of
>           the specified regex expression.
> 
> 
>      -v   Invert the  match;  only  display  packets  that  don't
>           match.
> 
> 
>      -x   Dump packet contents as hexadecimal as well as ASCII.
> 
> 
>      -l   Make stdout line buffered.
> 
> 
>      -D   When reading pcap_dump  files,  replay  them  at  their
>           recorded time intervals (mimic realtime).
> 
> 
>      -t   Print  a  timestamp   in   the   form   of   YYYY/MM/DD
>           HH:MM:SS.UUUUUU everytime a packet is matched.
> 
> 
>      -T   Print a timestamp in the form of +S.UUUUUU,  indicating
>           the delta between packet matches.
> 
> 
> 
> 
> 
> 
>      -c cols
>           Explicitly set the console  width  to  ``cols''.   Note
>           that  this is the console width, and not the full width
>           of what ngrep prints out as payloads; depending on  the
>           output  mode  ngrep  may print less than ``cols'' bytes
>           per line (indentation).
> 
> 
>      -F file
>           Read in the bpf filter  from  the  specified  filename.
>           This  is a compatibility option for users familiar with
>           tcpdump.  Please note that specifying ``-F'' will over-
>           ride any bpf filter specified on the command-line.
> 
> 
> 
> *nux               Last change: November 2006                   2
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>      -P char
>           Specify an alternate character to signify non-printable
>           characters when displayed.  The default is ``.''.
> 
> 
>      -W normal|byline|single|none
>           Specify an alternate  manner  for  displaying  packets,
>           when  not  in  hexadecimal  mode.   The ``byline'' mode
>           honors embedded linefeeds, wrapping text  only  when  a
>           linefeed  is  encountered.   The  ``none'' mode doesn't
>           wrap  under  any  circumstance   (entire   payload   is
>           displayed on one line).  The ``single'' mode is concep-
>           tually the same as  ``none'',  except  that  everything
>           including  IP and source/destination header information
>           is all on one line.  ``normal'' is the default mode and
>           is  only  included  for  completeness.   This option is
>           incompatible with ``-x''.
> 
> 
>      -s snaplen
>           Set the bpf caplen to snaplen (default 65536).
> 
> 
>      -S limitlen
>           Set the upper limit on the size of packets  that  ngrep
>           will  look  at.  Useful for looking at only the first N
>           bytes of packets without changing the BPF snaplen.
> 
> 
>      -I pcap_dump
>           Input file pcap_dump into ngrep.  Works with any  pcap-
>           compatible dump file format.  This option is useful for
>           searching for a wide range of different  patterns  over
>           the same packet stream.
> 
> 
>      -O pcap_dump
>           Output matched packets to a pcap-compatible dump  file.
>           This  feature  does not interfere with normal output to
>           stdout.
> 
> 
>      -n num
>           Match only num packets total, then exit.
> 
> 
>      -d dev
>           By default ngrep will select  a  default  interface  to
>           listen on.  Use this option to force ngrep to listen on
>           interface dev.
> 
> 
> 
> 
> 
> *nux               Last change: November 2006                   3
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>      -A num
>           Dump num packets of trailing context after  matching  a
>           packet.
> 
> 
>      -W normal|byline|none
>           Alter the method by which ngrep  displays  packet  pay-
>           load.    ``normal''   mode   represents   the  standard
>           behaviour, ``byline'' instructs ngrep to respect embed-
>           ded  linefeeds (useful for observing HTTP transactions,
>           for instance), and ``none'' results in the  payload  on
>           one  single  line  (useful  for  scripted processing of
>           ngrep output).
> 
> 
>      -c cols
>           Ignore the detected terminal width and force the column
>           width to the specified size.
> 
> 
>      -P char
>           Change the non-printable  character  from  the  default
>           ``.'' to the character specified.
> 
> 
>       match expression
>           A  match  expression  is  either  an  extended  regular
>           expression,  or if the -X option is specified, a string
>           signifying a hexadecimal value.   An  extended  regular
>           expression  follows the rules as implemented by the GNU
>           regex library.  Hexadecimal expressions can  optionally
>           be preceded by `0x'.  E.g., `DEADBEEF', `0xDEADBEEF'.
> 
> 
>       bpf filter
>           Selects a filter that specifies what  packets  will  be
>           dumped.  If no bpf filter is given, all IP packets seen
>           on the selected interface will be  dumped.   Otherwise,
>           only  packets  for  which  bpf filter is `true' will be
>           dumped.
> 
>      The bpf filter consists of one or  more  primitives.  Primi-
>      tives  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 blort', `net 1.2.3', `port 80'.   If  there
>           is no type qualifier, host is assumed.
> 
>      dir  qualifiers specify a particular transfer  direction  to
> 
> 
> 
> *nux               Last change: November 2006                   4
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>           and/or  from  id. Possible directions are src, dst, src
>           or dst and src and dst.   E.g.,  `src  foo',  `dst  net
>           1.2.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 are restricted to ip-only protocols.  Possi-
>           ble  protos  are:   tcp , udp and icmp.  e.g., `udp src
>           foo' or `tcp port 21'.  If there is no proto qualifier,
>           all  protocols  consistent  with  the type are assumed.
>           E.g., `src foo' means `ip and ((tcp or udp) src  foo)',
>           `net bar' means `ip and (net bar)', and `port 53' means
>           `ip and ((tcp or udp) port 53)'.
> 
>      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
>      blort and not port ftp and not port ftp-data'.  To save typ-
>      ing,  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'.
>           dst net net
>           True if the IP 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 IP source address of the packet has a  net-
>           work number of net.
> 
> 
>      net net
>           True if either the IP source or destination address  of
>           the packet has a network number of net.
> 
> 
>      net net mask mask
>           True if the IP address matches net  with  the  specific
>           netmask.  May be qualified with src or dst.
> 
> 
>      net net/len
>           True if the IP address matches net a netmask  len  bits
>           wide.  May be qualified with src or dst.
> 
> 
>      dst port port
> 
> 
> 
> *nux               Last change: November 2006                   6
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>           True if the packet is ip/tcp or ip/udp and has a desti-
>           nation 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:
> 
>      Allowable primitives are:
> 
> 
>      dst host host
>           True if the IP destination field of the packet is host,
>           which may be either an address or a name.
> 
> 
>      src host host
>           True if the IP source field of the packet is host.
> 
> 
>      host host
>           True if either the IP  source  or  destination  of  the
>           packet  is host.  Any of the above host expressions can
>           be prepended with the keywords, ip, arp, or rarp as in:
>                ip host host
>           which is equivalent to:
> 
> 
> 
>      ether dst ehost
> 
> 
> 
> *nux               Last change: November 2006                   5
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>           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  in  both
>           /etc/hosts and /etc/ethers.  (An equivalent  expression
>           is
>                ether host ehost and not host host
>           which can be used with either names or numbers for host
>           / ehost.)
> 
> 
>      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 pro-
>           tocol  type  protocol.  Protocol can be a number or one
>           of the names tcp, udp or icmp.  Note that the  identif-
>           iers  tcp and udp are also keywords and must be escaped
>           via backslash (\), which is \\ in the C-shell.
> 
> 
>      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.
> 
> 
>      ip multicast
>           True if the packet is an IP multicast packet.
> 
> 
> 
> *nux               Last change: November 2006                   7
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>      ip   Abbreviation for:
>                ether proto ip
> 
>      tcp, udp, icmp
>           Abbreviations for:
>                ip proto p
>           where p is one of the above protocols.
> 
>      expr relop expr
>           True if the relation holds, where relop is one of >, <,
>           >=,  <=,  =,  !=,  and expr is an arithmetic expression
>           composed of integer constants (expressed in standard  C
>           syntax),  the  normal  binary operators [+, -, *, /, &,
>           |], a length operator, and special packet  data  acces-
>           sors.   To  access data inside the packet, use the fol-
>           lowing syntax:
>                proto [ expr : size ]
>           Proto is one of ip, tcp, udp or icmp, and indicates the
>           protocol  layer  for  the  index  operation.   The byte
>           offset, relative to the indicated  protocol  layer,  is
>           given  by  expr.   Size  is  optional and indicates the
>           number of bytes in the field of  interest;  it  can  be
>           either  one,  two,  or  four, and defaults to one.  The
>           length operator, indicated by the  keyword  len,  gives
>           the length of the packet.
> 
>           For example, `ether[0] & 1 != 0' catches all  multicast
>           traffic.  The expression `ip[0] & 0xf != 5' catches all
>           IP packets with  options.  The  expression  `ip[6:2]  &
>           0x1fff  =  0'  catches  only unfragmented datagrams and
>           frag zero  of  fragmented  datagrams.   This  check  is
>           implicitly applied to the tcp and udp index operations.
>           For instance, tcp[0] always means the first byte of the
>           TCP header, and never means the first byte of an inter-
>           vening fragment.
> 
>      Primitives may be combined using:
> 
>           A  parenthesized  group  of  primitives  and  operators
>           (parentheses  are  special  to  the  Shell  and must be
>           escaped).
> 
>           Negation (`!' or `not').
> 
>           Concatenation (`&&' or `and').
> 
>           Alternation (`||' or `or').
> 
>      Negation has highest precedence.  Alternation and concatena-
>      tion  have  equal  precedence  and  associate left to right.
>      Note that explicit and tokens, not  juxtaposition,  are  now
>      required for concatenation.
> 
> 
> 
> *nux               Last change: November 2006                   8
> 
> 
> 
> 
> 
> 
> User Manuals                                            NGREP(1M)
> 
> 
> 
>      If an identifier is given without a keyword, the most recent
>      keyword is assumed.  For example,
>           not host vs and ace
>      is short for
>           not host vs and host ace
>      which should not be confused with
>           not ( host vs or ace )
> 
>      Expression arguments can be passed to ngrep as either a sin-
> 
>      If an identifier is given without a keyword, the most recent
>      keyword is assumed.  For example,
>           not host vs and ace
>      is short for
>           not host vs and host ace
>      which should not be confused with
>           not ( host vs or ace )
> 
>      Expression arguments can be passed to ngrep as either a sin-
>      gle  argument  or  as  multiple arguments, whichever is more
>      convenient.  Generally, if  the  expression  contains  Shell
>      metacharacters,  it is easier to pass it as a single, quoted
>      argument.  Multiple arguments are concatenated  with  spaces
>      before being parsed.
> 
> 
> DIAGNOSTICS
>      Errors from ngrep, libpcap, and the GNU  regex  library  are
>      all output to stderr.
> 
> 
> AUTHOR
>      Written by Jordan Ritter <jpr5 at darkridge.com>.
> 
> 
> REPORTING BUGS
>      Please report bugs to the ngrep's Sourceforge  Bug  Tracker,
>      located at
> 
>          http://sourceforge.net/projects/ngrep/
> 
>      Non-bug, non-feature-request general feedback should be sent
>      to the author directly by email.
> 
> 
> NOTES
>      ALL YOUR BASE ARE BELONG TO US.
> 
> ATTRIBUTES
>      See attributes(5) for descriptions of the  following  attri-
>      butes:
> 
>      box; cbp-1 | cbp-1 l | l .  ATTRIBUTE TYPE ATTRIBUTE VALUE =
>      Availability   SUNWngrep = Interface Stability Uncommitted
> 
> NOTES
>      Source for ngrep is available on http://opensolaris.org.
> 
> 
> 
> 
> 
> 
> 
> 
> *nux               Last change: November 2006                   9

-- 
blu

There are two rules in life:
Rule 1- Don't tell people everything you know
----------------------------------------------------------------------
Brian Utterback - Solaris RPE, Sun Microsystems, Inc.
Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom

Reply via email to