I wrote the netlogger package in order to have an extremely lightweight toolset for basic network monitoring of my home network. Several of my computers are rated at 3-5 bogoMips, and any intrusive logging is fatal to their usability. The package relies on features of the Linux kernel and I'm using it on i386, Sparc, Sparc64, m68k, Alpha, PowerPC, ARM, MIPS, IA64.

The latest version of this package can be downloaded from:

ftp://arcana.linux.it/pub/netlogger/

The scripts that are included in the package rely on ettclsh th be installed. Ettcl is Tcl-7.6 extended with a few low-level commands, including UDP support. It is extensively used in the Etlinux embedded system, which I designed in its 1.0 and 1.1 versions, when I was working in Prosa. The ettcl package can be dowloaded from ftp://ar.linux.it/pub/ettcl .

The programs have been run on the PC using libc version 5 and 6 (glibc). On the other platforms using whatever I found there (usually glibc)

The Netlogger is a simple tool based on UDP. It is made up of the following components:

``make'' builds the C programs, and ``make install'' copies the tools to /usr/local/bin. ``make uninstall'' removes everything that was (or would have been) installed.

The network packets sent/received by the scripts are very simple: they are ASCII UDP packets with no trailing newline; each packet is a Tcl list made up of two items: a symbolic identifier for the sender and the actual data. Packets sent/received by the C programs are binary.

More details on individual tools:

NETLOG-KSEND:

        Invoke the command with two arguments: the symbolic identifier
        and the destination UDP address (in the form IP:PORT).

        Example:
                netlog-ksend  pico-kernel  192.168.16.1:3210

        If your  ettcl is recent  enough (newer than release  12), you
        can use host names instead of IP numbers and omit the hostname
        altogether  to  use  the  broadcast  address  255.255.255.255.
        There is  currently no support  for broadcast using  the local
        broadcast address.

        Examples:
                netlog-ksend pico-kernel server:3210
                netlog-ksend pico-kernel 3210

NETLOG-STAT

        Invoke the  command with two or three  arguments: the symbolic
        identifier, the destination UDP  address (in the form IP:PORT)
        and optionally  the number of  seconds (default is  5) between
        packet transmission. The data field of each packet includes:
                - the loadavg (1-minute average)
                - the number of running processes
                - the total number of processes
                - used memory (kB)
                - free memory (kB)
                - used swap (kB)
                - free swap (kB)

        Example:
                netlog-stat pico-stat 192.168.16.1:3210 1

        Example data packet:
                pico-stat {0.70   2  16  15424   3520   1324  13672}

        Note that the number of running processes is always at least 1,
        as netlog-stat is running while reading /proc.

        If your  ettcl is recent  enough (newer than release  12), you
        can use host names instead of IP numbers and omit the hostname
        altogether  to  use  the  broadcast  address  255.255.255.255.
        There is  currently no support  for broadcast using  the local
        broadcast address.

        Examples:
                netlog-stat pico-stat server:3210
                netlog-stat pico-stat 3210

NETLOG-STATC

Same as above, but implemented in C (no need to have ettclsh).

NETLOG-GET

        Invoke the command  with one argument, the UDP  port to listen
        to.  The program  will print to stdout any  packet it receives
        as a Tcl list of  four items: the current time (HH:MM:SS), the
        sender  host:port, the  sender's symbolic  name,  the sender's
        data.

        Example invocation:
                netlog-get 3210
        Example data line (shown as two lines to fit in 70 columns):
                18:30:20 192.168.16.12:60003 pico-stat
                {0.70   2  16  15424   3520   1324  13672}

NETLOG-IF

        The program  offers a simple frontend to  show collected data.
        It is implemented in  Tcl/Tk and uses netlog-get internally to
        collect  information  (so  you   still  need  ettclsh  to  run
        netlog-if).

        Sources of  information are told  apart using their  name, not
        their IP:port  address, so  several sources may  be considered
        one (this will be either a bug or a feature, I'm uncertain).

        Each source  of information is allocated a line of information
        in the  main application  window.  The line  is composed  of a
        checker (green  for active sources of information  and red for
        those that  have been  silent for a  while), a label  with the
        name of  that source of information, another  label that shows
        the  loadavg  and  the  number of  processes  for  netlog-stat
        sources (it currently doesn't show anything for other sources)
        and a  checkbutton that  can be used  to open the  text window
        associated to that source. The second label gets red when  the
        loadavg goes bigger than  a predefined threshold and  gets red
        when it goes lower. When the color is changed, the window gets
        raised to catch the user's attention.   Clicking  on the label
        turns it back to the default color (black).

        The text window is currently only a text widget that shows the
        last lines  of information printed by that  source. The number
        of lines is currently limited to 5000 (set g(nlines) to change
        it).

        The main  window has two  extra buttons: ``Reset'' is  used to
        forget  about all  connections,  (currently the  only mean  to
        dispose   of  dead  connections)   and  quit   terminates  the
        application.

        Future features (plans):

          - ``save-to-file'' feature for each source of information

          - different number of active lines for each source

          - a way to draw a diagram on selectable fields of the data

UDP-SEND

        Invoke the command with a single argument: the destination UDP
        address. The program accepts <hostname>:<port>, where hostname
        can be either  a name (looked up using DNS)  or an IP address.
        It also  accepts <port>  alone; in that  case it  transmits to
        broadcast (255.255.255.255).

        It may  be useful, for example,  to replicate a  tty session.
        Example:
                telnet localhost | tee /dev/tty | udp-send 12345

        broadcasts the session to  port 12345. You can
        also use the tool to broadcast kernel  messages.
        Example:
                cat /proc/kmsg | udp-send 6666

UDP-GET

        Invoke the  program with  a single argument:  the UDP  port it
        should listen  to. For example,  to replicate the  tty section
        broadcast by the example above (about udp-send) you can issue:
        udp-get 12345

NETLOG-RAWSEND

        Invoke the command with a single argument: the destination UDP
        address (in the form IP:PORT). This is similar to ``udp-send''
        but  is written  in  ettcl.  Since ettcl  support  for UDP  is
        text-only,  the tool  can't  work with  null  bytes, and  adds
        delimiters to the packet in order to preserve newlines.

        There is no support for broadcast, as udp-send already performs
        the tast much better than this tool.

NETLOG-RAWGET

        Invoke the  command with  a single argument:  the UDP  port it
        should  listen to.   This is  similar to  ``udp-send''  but is
        written in  ettcl. Since ettcl  support for UDP  is text-only,
        the tool  can't work with  null bytes. It removes the
        delimiters added by ``netlog-rawsend''.

WHOSUP

        The program draws  a Tk window showing which  hosts are up. It
        collects information by sending  ping packets to the broadcast
        address.   The  destination   of  the   ping  is   by  default
        255.255.255.255, but you can specify an address on the command
        line (the  255.255.255.255 address is sent  according the your
        default route, and you might  want to use a LAN broadcast like
        192.168.16.255  if  your  default  gateway  is  behind  a  ppp
        interface or otherwise).

        The  program  sends a  ping  every  5  seconds, and  uses  the
        difference  in the response  to successive  pings in  order to
        show which hosts get shut down or brought up.

Enjoy
/alessandro (alessandro.rubini@linux.it)