#!/bin/sh - # # Reads /usr/local/arpwatch/arp.dat and displays a history. # Works with arpwatch (/usr/ports/net/arpwatch on FreeBSD). # # Oliver Fromme # This is free software. BSD-style license applies (no GPL). # ARPDAT="/usr/local/arpwatch/arp.dat" ETHDAT="/usr/local/arpwatch/ethercodes.dat" DO_DATE=0 DO_VEND=1 while [ $# -gt 0 ]; do case "$1" in -d) DO_DATE=$((1 - $DO_DATE)) shift ;; -v) DO_VEND=$((1 - $DO_VEND)) shift ;; -dv|-vd) DO_DATE=$((1 - $DO_DATE)) DO_VEND=$((1 - $DO_VEND)) shift ;; *) ME=`basename "$0"` echo "Usage: $ME [-d] [-v]" >&2 echo "-d toggle display of date/time stamps" >&2 echo "-v toggle display of vendors" >&2 exit 1 ;; esac; done export ETHDAT DO_DATE DO_VEND sort -n -k 3 "$ARPDAT" \ | awk ' BEGIN { zeit = ""; vendor = ""; ethdat = ENVIRON["ETHDAT"]; do_date = ENVIRON["DO_DATE"]; do_vend = ENVIRON["DO_VEND"]; columns = ENVIRON["COLUMNS"]; if (!columns || columns < 80) columns = 80; if (do_vend) while ((getline < "'"$ETHDAT"'") > 0) { e = tolower($1); n = $0; sub(/^[^ ]*[ ]*/, "", n); gsub(/[ ][ ]+/, " ", n); vendortab[e] = n; } } { ether = $1; ip = $2; name = $4; if (do_date) zeit = strftime("%Y-%m-%d %H:%M:%S ", $3); if (!name) name = ""; if (do_vend) { vendorcode = tolower(ether); sub(/:[^:]+:[^:]+:[^:]+$/, "", vendorcode) if (!(vendor = vendortab[vendorcode])) vendor = ""; } s = sprintf("%s%-15s %-15s %-18s%s", zeit, ip, name, ether, vendor); print substr(s, 1, columns - 1); } ' #--