| 33 | 
           rodolico | 
           1 | 
           v1.1
  | 
        
        
           | 9 | 
           rodolico | 
           2 | 
              | 
        
        
           | 5 | 
           rodolico | 
           3 | 
           This script polls network switch ports to see which MAC addresses are assigned to them, then polls the arp table
  | 
        
        
            | 
            | 
           4 | 
           on one or more routers to determine the IP address. It then uses reverse DNS to look up the name of the device
  | 
        
        
            | 
            | 
           5 | 
              | 
        
        
           | 33 | 
           rodolico | 
           6 | 
           The script requires snmp to be installed (no MIB files required), and uses the perl module YAML::Tiny. On a Debian based
  | 
        
        
            | 
            | 
           7 | 
           system, this can be installed with the command:
  | 
        
        
            | 
            | 
           8 | 
              | 
        
        
            | 
            | 
           9 | 
           apt-get libyaml-tiny-perl snmp
  | 
        
        
            | 
            | 
           10 | 
              | 
        
        
           | 5 | 
           rodolico | 
           11 | 
           The results are saved in a YAML file and used to initialize the internal structures if it exists, so when a device
  | 
        
        
            | 
            | 
           12 | 
           goes off the network, the information that it was there remains available (and the date/time it was last seen).
  | 
        
        
            | 
            | 
           13 | 
              | 
        
        
            | 
            | 
           14 | 
           Since the data is stored in a YAML file, a second script, mapSwitchesShow.pl was created to convert to a tab delimited text
  | 
        
        
            | 
            | 
           15 | 
           file for human viewing and/or script processing.
  | 
        
        
            | 
            | 
           16 | 
              | 
        
        
            | 
            | 
           17 | 
           Files:
  | 
        
        
            | 
            | 
           18 | 
              | 
        
        
            | 
            | 
           19 | 
           mapSwitches.pl - the main file which connects to each device in config, gathers data, and updates persistent storage
  | 
        
        
           | 33 | 
           rodolico | 
           20 | 
           mapSwitchesCSV.pl - converts stored data into a CSV (default is tab delimited)
  | 
        
        
           | 5 | 
           rodolico | 
           21 | 
           mapswitches.cron - sample cron file to gather information hourly and generate a CSV once a day
  | 
        
        
            | 
            | 
           22 | 
              | 
        
        
            | 
            | 
           23 | 
           The following files are not required for the system to run
  | 
        
        
            | 
            | 
           24 | 
           mapSwitches.config.yaml.sample - sample configuration file
  | 
        
        
            | 
            | 
           25 | 
           README - This file
  | 
        
        
            | 
            | 
           26 | 
           makeConfig.pl.sample - generate configuration file from hash. Easier for perl programmers
  | 
        
        
            | 
            | 
           27 | 
           mapSwitches.config.yaml.sample - sample configuration file
  | 
        
        
            | 
            | 
           28 | 
           pingall.pl - utility to ping all available ports on a /24 network. Used to artificially refresh arp table
  | 
        
        
            | 
            | 
           29 | 
              | 
        
        
            | 
            | 
           30 | 
           The configuration file MUST be created before running the script. It can be manually created
  | 
        
        
            | 
            | 
           31 | 
           (rename mapSwitches.config.yaml.sample to mapSwitches.config.yaml and edit) or generated makeConfig.pl.sample
  | 
        
        
            | 
            | 
           32 | 
           (edit hash, then run)
  | 
        
        
            | 
            | 
           33 | 
              | 
        
        
            | 
            | 
           34 | 
           The following file is created on first run.
  | 
        
        
            | 
            | 
           35 | 
           mapSwitches.yaml
  | 
        
        
            | 
            | 
           36 | 
           This is the persistent storage. It can be safely deleted at any time to reinitialize the system.
  | 
        
        
            | 
            | 
           37 | 
              | 
        
        
            | 
            | 
           38 | 
           We generally set this to be run hourly, and we then generate a tab delimited text file once a day. See the sample cron file
  | 
        
        
            | 
            | 
           39 | 
           for how we do it.
  | 
        
        
           | 7 | 
           rodolico | 
           40 | 
              | 
        
        
            | 
            | 
           41 | 
           Script does not need any special permissions so can be run as any user.
  | 
        
        
            | 
            | 
           42 | 
              | 
        
        
           | 33 | 
           rodolico | 
           43 | 
           mapSwitchesCSV.pl accepts two positional parameters. The first is the delimiter for the output, the second is a character to
  | 
        
        
            | 
            | 
           44 | 
           encapsulate the columns. Default is a tab for delimiter and no encapsulation.
  | 
        
        
            | 
            | 
           45 | 
              | 
        
        
           | 7 | 
           rodolico | 
           46 | 
           Tested under Devuan Jessie, connecting to HP Procurve and OpnSense router
  |