pftop

Pftop is a small, curses-based utility for real-time display of active states and rule statistics for pf, the packet filter. for OpenBSD.
Current release pftop-0.7, written and maintained by Can E. Acar.

Screenshots:

80 column:
pfTop: Up State 1-3/64, View: default, Order: none

PR   DIR SRC                  DEST                 STATE   AGE   EXP  PKTS BYTES
icmp Out 192.168.100.32:361   192.168.100.22:361    0:0      9     1     2    96
icmp Out 192.168.100.32:361   192.168.100.23:361    0:0      9     1     2    96
tcp  In  192.168.100.7:1029   192.168.100.32:443    4:4   4165 86302 25871 9251K

120 column:
pfTop: Up State 1-3/68, View: default, Order: none

PR   DIR SRC                      DEST                              STATE                AGE       EXP     PKTS    BYTES
tcp  In  192.168.100.1:1029       192.168.100.32:80        ESTABLISHED:ESTABLISHED  01:12:52  23:58:55    25873  9473801
tcp  In  192.168.100.9:38474      192.168.100.32:25        ESTABLISHED:ESTABLISHED  00:02:47  24:00:00      193   140803
tcp  In  192.168.100.12:1031      192.168.100.32:110       ESTABLISHED:ESTABLISHED  06:27:26  23:55:31    37249 15556515

Changes in version 0.7:
This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below:

  • Do not show pfsync or carp traffic:
  •   not (pfsync or carp)
      not pfsync and not carp
    
  • DNS traffic not going to or coming from the DNS servers:
  •   port 53 and not host (10.0.0.10 or 10.0.0.11)
    
  • States with input bytes greater than 1M:
  •   inb > 1000000
    
  • Traffic with very small average packet size:
  •   ((inb / inp) + (outb / outp))/2 < 100
      inb / inp + outb / outp < 200
    

    Changes in version 0.6:
    No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier.

    Changes in version 0.5:
    This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed.

  • New command-line switch 'S' to start the display at a given state.
  • Display HFCS statistics in the queue page.
  • Fixed state and rule byte and packet counters
  • Fixed state sorting by packets and bytes
  • Fixed some minor display problems
  • The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names.
  • Anchor and Label fields dynamically resize themselves


  • Changes in version 0.4:
    This version adds caches states between updates, making it possible to compute per state throughput. The rule and state views are improved. There is a new ALTQ view by Primož Gabrijelčič

  • Better, stable state sorting using mergesort.
  • New command 'p' to pause view updates
  • Add state cache to store a number of states between updates (configurable with -c command line switch, defaults to 10000)
  • Compute and display instantaneous and peak throughput for cached states.
  • New sortable state fields 'peak' and 'rate' and a new 'speed' view for throughput display.
  • New 'queue' view that displays information about ALTQ queues. Contributed by Primož Gabrijelčič, thanks.
  • Improved, more detailed rule view.


  • Changes in version 0.3:
    This version is developed with invaluable help from Camiel Dobbelaar who fixed many documentation, style(9) and interface issues and tested most of the changes and suggested improvements. Many thanks.

  • Fix performance issues with a large number of states.
  • Fix a typo that would cause pftop to crash if rules are added while pftop is running.
  • Display states like in pfctl on wide displays.
  • Display interface and extra rule information in Rule views.
  • Display local time at the upper right corner
  • New -w option to set display width in raw mode.
  • Removed redundant -n option.
  • New key bindings to make the interface more like 'top'.
  • Left/Right cursor keys switch views.
  • CTRL-L refreshes display, SPACE updates immediately.
  • New command 's' to set display update interval
  • New command 'n' to set number of lines in display


  • Changes in version 0.2:
    There are no big changes in version 0.2. Just minor additions/corrections to make porting easier.

  • Fix make install (suggested by Greg Fitzgerald)
  • Move manual page to section 8, minor corrections to the manpage.
  • Use getprotobynumber in state display. bonus: protocol column is now consistently lowercase. (suggested by Camiel Dobbelaar)
  • Steal more code from pfctl to display state column in text for large displays. (suggested by Camiel Dobbelaar & Daniel Hartmeier)
  • Display age and expiry columns in HH:MM:SS format as in pfctl (suggested by Daniel Hartmeier)
  • Left/right cursor keys switch views.
  • Increase viewing area by condensing header lines. (suggested by Camiel Dobbelaar)


  • For more information read the manual page
    download: pftop-0.7.tar.gz


    previous versions:
  • pftop-0.6.tar.gz
  • pftop-0.5.tar.gz
  • pftop-0.4.tar.gz
  • pftop-0.3.tar.gz
  • pftop-0.2.tar.gz
  • pftop-0.1.tar.gz


  • MD5 (pftop-0.7.tar.gz) = 2fdef1e3fffc38ae40f27aa2dfdcf6fc
    MD5 (pftop-0.6.tar.gz) = c84fb960d36e9a9271c211c98efae062
    MD5 (pftop-0.5.tar.gz) = d4bdb5dfa7722f76ed3027c1d0be1653
    MD5 (pftop-0.4.tar.gz) = d33b3a30152bac7d50d019a78bc58c72
    MD5 (pftop-0.3.tar.gz) = 6227be2a51ba79cca1fe9e18fbe495dc
    MD5 (pftop-0.2.tar.gz) = 8c561d8fdd8893d0df535cf970b9850c
    MD5 (pftop.tar.gz) = 643db786c9904fdab0e5a339221e29e1

    for comments and suggestions, please contact canacar (at) openbsd.org