Man Linux: Main Page and Category List

NAME

       sipsak - a utility for various tests on sip servers and user agents

SYNOPSIS

       sipsak  [-dFGhiILnNMRSTUVvwz]  [-a PASSWORD ] [-b NUMBER ] [-c SIPURI ]
       [-C SIPURI ] [-D NUMBER ] [-e NUMBER ] [-E STRING  ]  [-f  FILE  ]  [-g
       STRING  ]  [-H  HOSTNAME  ]  [-l  PORT  ] [-m NUMBER ] [-o NUMBER ] [-p
       HOSTNAME ] [-P NUMBER ] [-q REGEXP ] [-r PORT ] [-t NUMBER ] [-u STRING
       ] [-W NUMBER ] [-x NUMBER ] -s SIPURI

DESCRIPTION

       sipsak  is a SIP stress and diagnostics utility.  It sends SIP requests
       to the server within the sip-uri and examines received  responses.   It
       runs in one of the following modes:

       - default mode
              A SIP message is sent to destination in sip-uri and reply status
              is displayed.  The request is  either  taken  from  filename  or
              generated as a new OPTIONS message.

       - traceroute mode (-T)
              This  mode  is  useful  for learning request’s path. It operates
              similarly to IP-layer utility traceroute(8).

       - message mode (-M)
              Sends a short message (similar to SMS from the mobile phones) to
              a  given  target.  With the option -B the content of the MESSAGE
              can be set. Usefull might be the options -c and -O in this mode.

       - usrloc mode (-U)
              Stress  mode  for  SIP registrar.  sipsak keeps registering to a
              SIP server at  high  pace.  Additionaly  the  registrar  can  be
              stressed with the -I or the -M option.  If -I and -M are omitted
              sipsak can be used to register any given contact  (with  the  -C
              option)  for  an account at a registrar and to query the current
              bindings for an account at a registrar.

       - randtrash mode (-R)
              Parser torture mode.  sipsak keeps  sending  randomly  corrupted
              messages to torture a SIP server’s parser.

       - flood mode (-F)
              Stress mode for SIP servers.  sipsak keeps sending requests to a
              SIP server at high pace.

       If libruli (http://www.nongnu.org/ruli/) support is compiled  into  the
       sipsak  binary, then first a SRV lookup for _sip._udp.hostname is made.
       And if this lookup fails a normal A lookup is made. If a port was given
       in   the   target  URI  the  SRV  lookup  is  omitted.  Failover,  load
       distribution and other transports are not supported yet.

OPTIONS

       -a, --password PASSWORD
              With the given PASSWORD  an  authentication  will  be  tryed  on
              received  ’401  Unauthorized’.  Authorization  will  be tryed on
              time. If this option is omitted an authorization with  an  empty
              password  ("")  will be tryed. If the password is equal to - the
              password  will  be  read  from  the  standard  input  (e.g.  the
              keyboard).  This  prevents  other  users  on  the same host from
              seeing the password the password in the process list.  NOTE: the
              password  still  can be read from the memory if other users have
              access to it.

       -A, --timing
              prints only the timing values of the test run  if  verbosity  is
              zero  because no -v was given. If one or more -v were given this
              option will be ignored.

       -b, --apendix-begin NUMBER
              The starting number which is appended to the user  name  in  the
              usrloc  mode.   This  NUMBER  is  increased until it reaches the
              value given by the -e parameter. If omitted the starting  number
              will be one.

       -B, --message-body STRING
              The  given  STRING will be used as the body for outgoing MESSAGE
              requests.

       -c, --from SIPURI
              The given SIPURI will be used in the From header if sipsak  runs
              in  the  message  mode  (initiated  with the -M option). This is
              helpfull to present the receiver of a MESSAGE a meaningfull  and
              usable address to where maybe even responses can be send.

       -C, --contact SIPURI
              This  is  the  content of the Contact header in the usrloc mode.
              This allows to insert forwards like for mail.  For  example  you
              can  insert  the  uri  of  your  first  SIP  account at a second
              account, thus all calls to the second account will be  forwarded
              to  the  first account.  As the argument to this option will not
              be enclosed in brackets you can give also multiple  contacts  in
              the raw format as comma seperated list.  The special words empty
              or none will result in no contact header in the REGISTER request
              and  thus the server should answer with the current bindings for
              the account at the registrar.

       -d, --ignore-redirects
              If this option is set all redirects will be ignored. By  default
              without  this  option received redirects will be respected. This
              option is automaticly activated in the randtrash mode and in the
              flood mode.

       -D, --timeout-factor NUMBER
              The  SIP_T1  timer  is getting multiplied with the given NUMBER.
              After receiving a provisional response for an INVITE request, or
              when  a  reliable transport like TCP or TLS is used sipsak waits
              for the resulting amount of time for a final response  until  it
              gives up.

       -e, --appendix-end NUMBER
              The  ending  number  which  is  appended to the user name in the
              usrloc mode.  This number is increased  until  it  reaches  this
              ending  number.  In the flood mode this is the maximum number of
              messages which will be send.  If omitted the  default  value  is
              2^31 (2147483647) in the flood mode.

       -E, --transport STRING
              The value of STRING will be used as IP transport for sending and
              receiving requests and responses.  This  option  overwrites  any
              result  from  the URI evaluation and SRV lookup.  Currently only
              ’udp’ and ’tcp’ are accepted as value for STRING.

       -f, --filename FILE
              The content of FILE will be read in in binary mode and  will  be
              used  as  replacement for the alternatively created sip message.
              This can used in the default mode to make  other  requests  than
              OPTIONS  requests  (e.g.  INVITE).  By  default missing carriage
              returns in front of line feeds will be inserted (use -L  to  de-
              activate  this function). If the filename is equal to - the file
              is read from standard input, e.g. from the keyboard or  a  pipe.
              Please  note that the manipulation functions (e.g. inserting Via
              header) are only tested with RFC conform  requests.  Additionaly
              special  strings within the file can be replaced with some local
              or given values (see -g and -G for details).

       -F, --flood-mode
              This options activates the flood  mode.  In  this  mode  OPTIONS
              requests  with  increasing  CSeq numbers are sent to the server.
              Replies are ignored -- source port 9 (discard) of  localhost  is
              advertised in topmost Via.

       -h, --help
              Prints  out  a  simple  usage  help  message. If the long option
              --help is available it will print out a help  message  with  the
              available long options.

       -g, --replace-string STRING
              Activates  the  replacement  of  $replace$  within  the  request
              (usualy read in from a file) with the STRING.  Alternatively you
              can  also specify a list of attribute and values.  This list has
              to start and end with a non alpha-numeric  character.  The  same
              character has to be used also as seperator between the attribute
              and the value and between new further attribute value pairs. The
              string  "$attribute$"  will be replaced with the value string in
              the message.

       -G, --replace
              Activates the automatic replacement of the  following  variables
              in  the  request (usualy read in from a file): $dsthost$ will be
              replaced by with the host or domainname which is given by the -s
              parameter.   $srchost$  will  be replaced by the hostname of the
              local machine.  $port$ will be replaced by the  local  listening
              port  of  sipsak.  $user$ will be replaced by the username which
              is given by the -s parameter.

       -H, --hostname HOSTNAME
              Overwrites the automatic detection  of  the  hostname  with  the
              given  parameter.   Warning:  use  this with caution (preferable
              only if the automatic detection fails).

       -i, --no-via
              Deactivates the insertion of the  Via  line  of  the  localhost.
              Warning:  this  probably disables the receiving of the responses
              from the server.

       -I, --invite-mode
              Activates the Invites cycles within the usrloc mode.  It  should
              be   combined   with  -U.   In  this  combination  sipsak  first
              registeres a user, and then  simulates  an  invitation  to  this
              user.  First  an Invite is sent, this is replied with 200 OK and
              finaly an ACK is sent. This option can also be used without -U ,
              but  you should be sure to NOT invite real UAs with this option.
              In the case of a missing -U the -l PORT is required because only
              if  you made a -U run with a fixed local port before, a run with
              -I and the same fixed local port can  be  successful.   Warning:
              sipsak  is  no real UA and invitations to real UAs can result in
              unexpected behaivior.

       -j, --headers STRING
              The string will be added as one or more  additional  headers  to
              the  request.  The  string  "\n"  (note: two characters) will be
              replaced with CRLF and thus result  in  two   seperate  headers.
              That way more then one header can be added.

       -l, --local-port PORT
              The  receiving  UDP  socket  will  use  the  local network port.
              Useful if a file is given by -f which  contains  a  correct  Via
              line.  Check  the  -S  option  for  details how sipsak sends and
              receives messages.

       -L, --no-crlf
              De-activates the insertion of carriage returns (\r)  before  all
              line  feeds  (\n)  (which  is not allready proceeded by carraige
              return) if the input is comming from a file ( -f ). Without this
              option  also  an  empty  line will be appended to the request if
              required.

       -m, --max-forwards NUMBER
              This sets the value of the Max-Forward header field. If  omitted
              no  Max-Forward  field  will  be  inserted.  If  omitted  in the
              traceroute mode number will be 255.

       -M, --message-mode
              This activates the Messages cycles within the usrloc mode (known
              from  sipsak  versions pre 0.8.0 within the normal usrloc test).
              This option should be combined  with  -U  so  that  a  succesful
              registration  will be tested with a test message to the user and
              replied with 200 OK. But this option can also  be  used  without
              the  -U  option.  Warning: using without -U can cause unexpected
              behaivor.

       -n, --numeric
              Instead of the full qualified domain name in the Via line the IP
              of  the  local  host  will  be  used.  This  option is now on by
              default.

       -N, --nagios-code
              Use Nagios comliant return codes instead of  the  normal  sipsak
              ones. This means sipsak will return 0 if everything was ok and 2
              in case of any error (local or remote).

       -o, --sleep NUMBER
              sipsak will sleep for NUMBER ms before it starts the next  cycle
              in  the  usrloc mode. This will slow down the whole test process
              to be more realistic. Each cycle will be still completed as fast
              as possible, but the whole test will be slowed down.

       -O, --disposition STRING
              The  given  STRING  will be used as the content for the Content-
              Disposition  header.  Without  this  option  there  will  be  no
              Content-Disposition header in the request.

       -p, --outbound-proxy HOSTNAME[:PORT]
              the address of the hostname is the target where the request will
              be sent to (outgoing proxy). Use this if the destination host is
              different then the host part of the request uri. The hostname is
              resolved via DNS SRV  if  supported  (see  description  for  SRV
              resolving) and no port is given.

       -P, --processes NUMBER
              Start  NUMBER  of processes in parallel to do the send and reply
              checking. Makes only sence if a higher number for -e is given in
              the usrloc, message or invite mode.

       -q, --search REGEXP
              match  replies  against  REGEXP  and  return  false  if no match
              occured. Useful for example to  detect  server  name  in  Server
              header field.

       -r, --remote-port PORT
              Instead  of  the  default  sip  port 5060 the PORT will be used.
              Alternatively the remote port can be given within the sip uri of
              the -s parameter.

       -R, --random-mode
              This activates the randtrash mode. In this mode OPTIONS requests
              will be send to  server  with  increasing  numbers  of  randomly
              crashed  characters within this request. The position within the
              request and the replacing character  are  randomly  chosen.  Any
              other  response than Bad request (4xx) will stop this mode. Also
              three unresponded  sends  will  stop  this  mode.  With  the  -t
              parameter the maximum of trashed characters can be given.

       -s, --sip-uri SIPURI
              This  mandatory  option  sets the destination of the request. It
              depends on the mode if only the server name or also an user name
              is  mandatory.  Example for a full SIPURI : sip:test@foo.bar:123
              See the note in the  description  part  about  SRV  lookups  for
              details how the hostname of this URI is converted into an IP and
              port.

       -S, --symmetric
              With this option sipsak will use only one port for  sending  and
              receiving  messages. With this option the local port for sending
              will be the value from the -l option. In the default mode sipsak
              sends  from a random port and listens on the given port from the
              -l option.  Note: With this option sipsak will not  be  able  to
              receive  replies  from  servers  with  asymmetric signaling (and
              broken rport implementation) like the Cisco proxy.  If  you  run
              sipsak  as  root  and  with raw socket support (check the output
              from the -V option) then this option is not required because  in
              this  case  sipsak  already  uses  only one port for sending and
              receiving messages.

       -t, --trash-chars NUMBER
              This parameter specifies the maximum of  trashed  characters  in
              the  randtrash mode. If omitted NUMBER will be set to the length
              of the request.

       -T, --traceroute-mode
              This activates the traceroute mode. This  mode  works  like  the
              well  known  traceroute(8) command expect that not the number of
              network hops are counted rather the number of server on the  way
              to  the  destination  user.  Also  the  round  trip time of each
              request is printed out, but due to a limitation within  the  sip
              protocol  the  identity  (IP  or  name)  can only determined and
              printed out if the response from the server contains  a  warning
              header field. In this mode on each outgoing request the value of
              the Max-Forwards header field is increased, starting  with  one.
              The  maximum  of  the  Max-Forwards  header will 255 if no other
              value is given by the -m parameter. Any other response than  483
              or  1xx  are treated as a final response and will terminate this
              mode.

       -u, --auth-username STRING
              Use the given STRING as username value  for  the  authentication
              (different account and authentication username).

       -U, --usrloc-mode
              This activates the usrloc mode. Without the -I or the -M option,
              this only registers users at a registrar. With one of the  above
              options  the  previous registered user will also be probed ether
              with a simulated call flow (invite, 200, ack) or with an instant
              message  (message,  200).  One  password  for all users accounts
              within the usrloc test can be given with the -a option. An  user
              name  is mandatory for this mode in the -s parameter. The number
              starting from the -b parameter to the -e parameter  is  appended
              the  user name. If the -b and the -e parameter are omitted, only
              one runs with the given username, but without append  number  to
              the usernames is done.

       -v, --verbose
              This  parameter  increases  the  output  verbosity.  No -v means
              nearly no output except in traceroute and  error  messages.  The
              maximum  of  three  v’s  prints  out  the content of all packets
              received and sent.

       -V, --version
              Prints out the name and version number of sipsak and the options
              which were compiled into the binary.

       -w, --extract-ip
              Activates  the extraction of the IP or hostname from the Warning
              header field.

       -W, --nagios-warn NUMBER
              Return  Nagios  warn  exit   code   (1)   if   the   number   of
              retransmissions before success was above the given number.

       -x, --expires NUMBER
              Sets the value of the Expires header to the given number.

       -z, --remove-bindings
              Activates  the  randomly  removing of old bindings in the usrloc
              mode. How many per cent of the  bindings  will  be  removed,  is
              determined  by  the USRLOC_REMOVE_PERCENT define within the code
              (set it before compilation).  Multiple removing of  bindings  is
              possible, and cannot be prevented.

RETURN VALUES

       The  return  value  0  means that a 200 was received. 1 means something
       else then 1xx or 2xx was received.  2 will be returned on local  errors
       like  non  resolvable  names  or  wrong  options combination. 3 will be
       returned on  remote  errors  like  socket  errors  (e.g.  icmp  error),
       redirects without a contact header or simply no answer (timeout).

       If  the  -N  option  was given the return code will be 2 in case of any
       (local or remote) error. 1 in case there have been retransmissions from
       sipsak to the server. And 0 if there was no error at all.

CAUTION

       Use  sipsak  responsibly.  Running  it  in any of the stress modes puts
       substantial burden on network and server under test.

EXAMPLES

       sipsak -vv -s sip:nobody@foo.bar
              displays received replies.

       sipsak -T -s sip:nobody@foo.bar
              traces SIP path to nobody.

       sipsak -U -C sip:me@home -x 3600 -a password -s sip:myself@company
              inserts forwarding from work to home for one hour.

       sipsak -f bye.sip -g ’!FTAG!345.af23!TTAG!1208.12!’ -s sip:myproxy
              reads the file bye.sip, replaces $FTAG$ with 345.af23 and $TTAG$
              with 1208.12 and finally send this message to myproxy

LIMITATIONS / NOT IMPLEMENTED

       Many  servers  may  decide  NOT to include SIP "Warning" header fields.
       Unfortunately, this makes displaying IP addresses  of  SIP  servers  in
       traceroute mode impossible.

       IPv6 is not supported.

       Missing support for the Record-Route and Route header.

BUGS

       sipsak is only tested against the SIP Express Router (ser) though their
       could be various bugs. Please feel free to mail them to the author.

AUTHOR

       Nils Ohlmeier <nils at sipsak dot org>

SEE ALSO

       traceroute(8)