Man Linux: Main Page and Category List

NAME

       jpnevulator - Just another serial sniffer

SYNOPSIS

       jpnevulator [OPTION]... <FILE>

DESCRIPTION

       jpnevulator is a handy serial sniffer. You can use it to send data on a
       serial device too. You can read or write from/to  one  or  more  serial
       devices at the same time.

       In write (--write) mode data to be sent on the serial device(s) is read
       from a file or stdin in hexadecimal notation. The input format is FD or
       0xFD.  Of  course  all input is treated case-insensitive. Spaces may or
       may not be included in the input. So DEADBEEF is exactly the same as DE
       AD   BE  EF. Data is sent on the serial device(s) line by line.

       In  read  (--read)  mode  data  to be read from the serial device(s) is
       written to a file or stdout in hexadecimal notation. Skim  through  the
       options  for  several enhancements in the output. It’s even possible to
       pass(--pass) on the data between the several serial devices.

       Mandatory arguments to long options are  mandatory  for  short  options
       too.

       Generic options:

       -f, --file=NAME
              In  write mode read the contents of the file given and send them
              on the serial device(s) and in read mode write the  contents  of
              the serial device(s) to the file given.

       -h, --help
              Shows a brief list of options.

       -l, --alias-separator
              Use  the given string as the alias separator. See --tty for more
              information.

       -r, --read
              Put the program in read mode. This way you read  the  data  from
              the  given  serial  device(s)  and write it to the file given or
              stdout if none given.  See the read  options  section  for  more
              read specific options.

       -t, --tty=NAME:ALIAS
              The  serial  device to read from or write to. Use multiple times
              to read/write from/to more than one serial device(s). For  handy
              reference  you can also separate an alias from the tty name with
              a collon ’:’. If a collon is for some  strange  reason  part  of
              your  device  name,  you can use the --alias-separator option to
              specify another separation string. If an alias is given it  will
              be used as the name of the serial device.

       -v, --version
              Output the version information, a small GPL notice and exit.

       -w, --write
              Put  the  program  in  write mode. This way you read data from a
              given file or stdin if none given and write  it  to  the  serial
              device(s)  given.  See  the write options section for more write
              specific options.

       Read options:

       -a, --ascii
              Besides the hexadecimal output also display an extra column with
              the  data  in the ASCII representation. Non printable characters
              are displayed as a dot ’.’.  The ASCII data is  displayed  after
              the hexadecimal data.

       -b, --byte-count
              Besides the hexadecimal output also display an extra column with
              the current index number  of  the  byte  in  the  output.  These
              numbers  are  displayed  in  front of the hexadecimal data. When
              readin from multiple serial devices at the same time  the  index
              number will increase per serial device.

       -e, --timing-delta=MICROSECONDS
              The timing delta is the amount of microseconds between two bytes
              that the latter is considered to be part of a new  package.  The
              default  is 100 miliseconds. Use this option in conjunction with
              the --timing-print option.

       -g, --timing-print
              Print a line of timing information before every continues stream
              of  bytes. When multiple serial devices are given also print the
              name or alias of the device where the data is coming from.

       -i, --width-delta=WIDTH
              The number of bytes to display on one line. The default is 16.

       -P, --pass
              This one passes all the data between the serial  devices.  Handy
              if  you  want  to  put your serial sniffer in between the serial
              devices you want to sniff.

       Write options:

       -c, --checksum
              Append a single checksum byte to the line of data written to the
              serial  device(s)  choosen. This checksum is a simple modulo 256
              addition of all input bytes on a line.

       -d, --delay-line=MICROSECONDS
              This delay is an optional amount  of  microseconds  to  wait  in
              between every input line is sent on the serial device(s).

       -k, --delay-byte=MICROSECONDS
              This  delay  is  an  optional  amount of microseconds to wait in
              between every input byte is sent on the serial device(s).

       -j, --fuck-up
              This is the special fuck up option. When the  calculation  of  a
              checksum  is choosen (see checksum and crc* options) the checkum
              will be crippled on purpose. Carefully named after  the  special
              Jan Arie de Bruin ’fuck up crc’ button.

       -n, --no-send
              Do  not  actually send the bytes on the serial device(s). Rather
              pointless, but seemed one day long ago  to  be  a  rather  handy
              feature.

       -p, --print
              Besided  sending the data on the serial device(s) also write the
              data to stdout.

       -s, --size=SIZE
              The maximum number of bytes per  line  to  send  on  the  serial
              device(s). The default is 22, coming from back in the Cham2 days
              of the program.

       -y, --crc16=POLY
              Append a crc16 checksum to the  line  of  data  written  to  the
              serial  device(s) choosen.  Use the optionally given poly as the
              polynomial. Specify the polynomial as hexadecimal value,  as  in
              0xA001 (the default).

       -z, --crc8=POLY
              Append a crc8 checksum to the line of data written to the serial
              device(s)  choosen.   Use  the  optionally  given  poly  as  the
              polynomial.  Specify  the polynomial as hexadecimal value, as in
              0x07 (the default).

DIAGNOSTICS

       Normally, exit status is 0 if the  program  did  run  with  no  problem
       whatsoever.  If  the  exit status is not equal to 0 an error message is
       printed on stderr which should help you solve the problem.

BUGS

       Order of bytes broke when reading several tty devices at once

       The display of incoming bytes can be broke  if  you  use  multiple  tty
       devices  to  read from. At the moment I do not have a solution for this
       problem. Since I use select() to watch  the  several  tty  devices  and
       after  the  select()  I  have  to  read()  them  one  by one, I can not
       completely 100% display which bytes came after which on  different  tty
       devices. Take the example below:

              $ jpnevulator --ascii --timing-print --tty /dev/ttyS0 --tty /dev/ttyUSB0 --read
              2006-05-30 13:23:49.461075: /dev/ttyS0
              00 00 05 3B 0D 00 00 05                         ...;....
              2006-05-30 13:23:49.461113: /dev/ttyUSB0
              00 05 3B 0D 00 00 05 3B 0D                      ..;....;.
              2006-05-30 13:23:49.473074: /dev/ttyS0
              3B 0D 00 00 05 3B 0D                            ;....;.
              2006-05-30 13:23:49.473105: /dev/ttyUSB0
              00 12 05 06 39 00 12 05 06 39 1F 00 22 80 00 0E ....9....9.."...
              $

       And now see the order in which things really got sent on the line:

              /dev/ttyS0:
              00 00 05 3B 0D
              /dev/ttyUSB0:
              00 00 05 3B 0D
              /dev/ttyS0:
              00 00 05 3B 0D
              /dev/ttyUSB0:
              00 00 05 3B 0D
              /dev/ttyS0:
              00 00 05 3B 0D
              /dev/ttyUSB0:
              00 00 05 3B 0D 00 12 05 06 39 00 12 05 06 39 ...

       As  you  can  see  /dev/ttyUSB0 receives the echo of all things sent by
       /dev/ttyS0.  This is exactly what happens. But since there does exist a
       small  time  between  the select() who is happy expressing something is
       available and the read() who does get the available  data,  some  extra
       data  will  be  available.  I  have no idea on how I can use high level
       system call like select() and read() and be still able to put the bytes
       in the correct order. Anyone an idea?

AUTHOR

       Written by Freddy Spierenburg.

REPORTING BUGS

       Report bugs to <freddy@snarl.nl>.

COPYRIGHT

       Copyright © 2006-2009 Freddy Spierenburg