Some Freely-Available Software Packages that I've Authored:

  • fincore

    fincore ("File IN CORE") is a command that shows which pages (blocks) of a file are in core memory. It is particularly useful for determining the contents of the buffer-cache. The latest distribution can be found here.
  • fadvise

    fadvise is a command used to give file advisory information to the operating system. Its "--dontneed" option is particularly useful in that it causes the files' pages (blocks) to be evicted from the buffer-cache. The latest distribution can be found here.
  • FlowScan

    FlowScan is a system to analyze and report on flows exported by IP routers and collected using flow-tools, argus, cflowd, etc. It could also be considered a "front-end" for RRDTOOL. The latest distribution can be found here.
  • RRGrapher

    RRGrapher is a CGI graphing tool for RRDTOOL. It's basically an interactive web graph construction set. The latest distribution can be found here.
  • Net::Patricia

    This is a perl API to a Patricia Trie data structure to perform fast lookups by IP address. Patricia Trie is the data structure used by the BSD kernel routing code where it is named "radix". The latest distribution can be found on CPAN.
  • junipoll

    junipoll is a JUNIper router snmp POLLer. It is an mrtg-like utility which polls the counter values from the firewall filters configured on Juniper routers. The latest revision can be found here.
  • Spectrum::CLI

    This is a my perl module/class which provides a way to invoke the functionality of Spectrum Enterprise Manager's Command Line Interface. The latest distribution can be found here or you can find it on CPAN.
  • headers

    This is a utility to identify C header files that should be included in C source files. You run it on your C source files, and it looks for your use of ANSI or POSIX identifiers and generates #include directives for those source files. The latest distribution is headers1.002.tar.gz.
  • Altoids

    This is a distribution of my perl module that provides SNMP get/walk functionality with built-in name to OID translation alternatively by using .oid files. It is implemented as a derived class based upon SNMP_Session.pm. (A word of caution - Altoids may be confusing unless you've first familiarized yourself with SNMP_Session.pm.) The latest distribution can be found here.
  • Cflow

    Cflow is a perl module for analyzing flow files written by cflowd, an package used to collect Cisco NetFlow data. Cflow is available here.
  • IOSchat, getcnf

    This is a distribution of my perl module that provides the ability to "chat" (ala expect(1), chat2.pl, or Comm.pl) with Cisco Internet Operating System routers. The getcnf utility, which is probably the useful component of this package, uses IOSchat to get the flash and/or running configuration. (This output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest release can be found here. getcnf installation requires shc - the neato generic SHell script "Compiler", by Francisco Rosales' (frosal@fi.upm.es). shc is available here, but I've had lots of trouble with ftp timeouts trying to pull it from Spain.)

  • e-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations of Cisco Catalyst 5000s. We use Catalyst 5000s as ATM LANE "edge" devices (hence the name e-getcnf). e-getcnf can fetch the flash and running configurations for the Catalyst 5000 and various optionally installed Cisco ATM OC-3 and OC-12 modules. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. e-getcnf installation requires shc.
  • vpn3000-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations from the Cisco VPN 3000 Concentrator Series. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. Installation of this utility requires shc.
  • s-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations of Cisco Catalyst 1900 Switches. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. Installation of this utility requires shc.
  • a-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations of Fore ASX switches. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. a-getcnf installation requires shc.
  • alteon-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations of Alteon Switches. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. Installation of this utility requires shc.
  • fore-es-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations of Fore ES-3810 Ethernet Switches. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. Installation of this utility requires shc.
  • extreme-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations of Extreme Equipment. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. Installation of this utility requires shc.
  • apc-getcnf

    This is a distribution of my perl script that provides the ability to GET the CoNFigurations from APC Uninterruptable Power Supplies. (As with getcnf above, this output is suitable for storing in an RCS revision file, or to diff(1) to discover configurations changes.)

    The latest distribution can be found here. Installation of this utility requires shc.
  • NetCMS

    NetCMS is a Network Configuration Management System for network devices. Currently it supports only Cisco routers and switches. The underlying router getcnf utility have been tested with approximately 200 Cisco routers (2500, 3000, 4500, 7000 and 7500 series) running IOS versions 9.x through 11.25. The switch e-getcnf utility currently supports only Cisco's Catalyst 5000, and optionally installed ATM modules (where the Catalyst 5000 is operating as an ATM "edge" device).

    The latest distribution is NetCMS1.001.tar.gz.

    You may wish to check out these more recently released alternatives written by others:

  • NetTree

    NetTree is a perl package to encapusate the subnet allocations within a network. If you're a hostmaster that manages a large number of subnets it may be useful to you to be sure that you don't define overlapping subnets and such. It is available here.
  • find_revisions

    find_revisions is a reporting utility for use with RCS. This is the accompanying code for my article "Sys Admin File Revision Control with RCS" from the December 1998 issue of Sys Admin magazine. It is available here.
  • sort_revisions

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    sort_revisions is a perl script that sorts the output of find_revisions.

  • catwatch

    APwatch

    es3810watch

    These haven't been formally packaged yet. Contact me if you'd like it ASAP.

    These utilities watch and record which MAC addresses are in use on which ports of Cisco Catalyst switches, Cisco/Aironet Access Points, and Marconi/Fore ES-3810 ethernet switches, respectively. They maintain a flat-file database, but can also push this data into a relational database such as MySQL.

  • ipwatch

    ipwatch is a perl script which maintains a simple database of IP addresses that it has "seen". It was written to help discover which IP addresses can be recovered by observing that they were not in use over some specified period of time - eg. 1 month. (Once this tool is adopted, its data file serves as a rudimentary database to track assignment of IP addresses.)

    ipwatch uses 2 methods to determine if a given IP address is in use:
    (1) by sending ICMP echoes (pings) and waiting for responses, and
    (2) by examining the ARP cache of specfied routers or switches, via SNMP.

    The latest release is ipwatch1.007.tar.gz and requires Altoids (see above) and fping.

  • physaddrwatch

    physaddrwatch is a perl script which maintains a simple database of physical media addresses (MAC or ATM) that it has "seen" and the IP or AppleTalk address to which they belong. It does this by walking various tables via SNMP on gateways (routers) that you specify.

    The latest release is available here and requires Altoids (see above) and BER.pm and SNMP_Session.pm.

    You should check out arpwatch too:
    http://www-nrg.ee.lbl.gov/
    ftp://ftp.ee.lbl.gov/arpwatch.tar.gz
  • ip2anonip

    ip2anonip is a perl script which can be used to anonymize or obfuscate IP addresses or translates IP addresses to hostnames, like ip2hostname. The anonymization employs the prefix-preserving technique implemented in tcpdpriv.

  • ip2hostname

    - This hasn't been formally packaged yet. However, it is included in the current FlowScan distribution.

    ip2hostname is a perl script/filter which simply translates IP addresses to hostnames. This is useful to improve readability of files containing lots of IP addresses and such.

  • mac2vendor

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    mac2vendor is a perl script/filter which simply scans input looking for ethernet MAC addresses and appends their respective vendor names (which presumably manufactured the NIC or device that is using the given MAC address). This is done using the IEEE OUI database. This utility is useful to improve readability of files containing lots of MAC addresses. I find that it helps to sanity check hand-typed MAC addresses, for instance in a DHCP server's configuration file, to discover typos (since the address ought to be registered).

  • iftop

    iftop top interfaces in real time, similarly to the way the Unix top command displays top CPU processes. This script is a quick hack based on if-counters.pl by Simon Leinen, which is supplied with his SNMP in Perl.

  • ifTop

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    ifTop is a perl script that will show the "top" (most active) interfaces on a router. This is useful for identifying which interface is the source of a Denial-of-Service flood, especially when the source IP addresses are forged.

  • utmp_days

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    utmp_days is a perl script that simply shows you which login process have utmp entries older than `n' days. E.g.:

    $ utmp_days 7
    

  • reaper

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    reaper is a perl script to kill off old login processes found by utmp_days.

  • cpuhogs

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    cpuhogs is a perl script to identify processes which are CPU hogs and optionally kill and notify the owner of the process(es).

  • sortbyip

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    sortbyip is a perl script/filter that sorts its lines of input by the first IP address on each line.

  • sar2rrd

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    sar2rrd is a perl script to convert sar data to RRD format.

    If you're just looking for a nice way to visualize sar data, try kSar.
  • subnets2ospf

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    subnets2ospf is a perl script to summarize network and subnet allocations using a format that Cisco IOS likes. E.g.:

    $ subnets2ospf
    Enter the network (e.g. 10.10.0.0/16): 10.0.0.0/8
    Enter subnets to exclude, one per line, terminated with single '.' or EOF:
    10.42.42.0/24
    .
    network 10.0.0.0 0.31.255.255 area 0.0.0.0
    network 10.32.0.0 0.7.255.255 area 0.0.0.0
    network 10.40.0.0 0.1.255.255 area 0.0.0.0
    network 10.42.0.0 0.0.31.255 area 0.0.0.0
    network 10.42.32.0 0.0.7.255 area 0.0.0.0
    network 10.42.40.0 0.0.1.255 area 0.0.0.0
    network 10.42.43.0 0.0.0.255 area 0.0.0.0
    network 10.42.44.0 0.0.3.255 area 0.0.0.0
    network 10.42.48.0 0.0.15.255 area 0.0.0.0
    network 10.42.64.0 0.0.63.255 area 0.0.0.0
    network 10.42.128.0 0.0.127.255 area 0.0.0.0
    network 10.43.0.0 0.0.255.255 area 0.0.0.0
    network 10.44.0.0 0.3.255.255 area 0.0.0.0
    network 10.48.0.0 0.15.255.255 area 0.0.0.0
    network 10.64.0.0 0.63.255.255 area 0.0.0.0
    network 10.128.0.0 0.127.255.255 area 0.0.0.0
    

  • uniqmail

    - This hasn't been formally packaged yet. Contact me if you'd like it ASAP.

    uniqmail is a perl script to discard duplicate messages in a Unix mbox. It is useful for mailing list archive administrators to remove duplicate messages before running HyperMail or MHonARC.

  • locker

    - This hasn't been formally packaged yet. However, it is included in the current FlowScan distribution.

    locker is a perl script to run a command under the protection of a file lock. This is especially useful in a crontab entry so that only one instance of that job can run at a time. E.g.:

    $ touch /tmp/.lock                 # create the lock file
    $ locker -ne /tmp/.lock sleep 60 & # spawn a command with a lock
    ...
    $ locker -ne /tmp/.lock sleep 60   # attempt to acquire the lock
    flock failed: Resource temporarily unavailable
    $ locker -e /tmp/.lock sleep 60    # block, waiting for the lock
    ...
    $
    

  • loadimm

    This utility is used to examine or modify the ``load immediate'' instructions in ELF 32-bit SPARC executables. These instructions are those which load ``hard-coded'' 32-bit constant values into registers.

    For instance if there is an executable for which you don't have the source code that is hard-coded to bind the port 0xd00d, you could modify it to bind port 0xbabe instead.

    While obscure, I've inculded this utility just because it was a fun hack.

  • form-remind-pr

    This archive contains the accompanying code to an article that I wrote on the use of GNATS (the GNU Problem Report Management System) by System Administrators. It was published in the February '97 issue of SysAdmin magazine.
  • qcam

    I contributed (only a bit) to qcam-lib for Linux. This is a library and commands for use with the B&W Connectix QuickCam. Other drivers, such as for the color QuikCam, can be found here and there.

  • Copyright (c) 1999-2014 Dave Plonka. All rights reserved.
    All content may be used freely for non-commerical use.