9 |
rodolico |
1 |
v1.0
|
|
|
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 |
|
|
|
6 |
The results are saved in a YAML file and used to initialize the internal structures if it exists, so when a device
|
|
|
7 |
goes off the network, the information that it was there remains available (and the date/time it was last seen).
|
|
|
8 |
|
|
|
9 |
Since the data is stored in a YAML file, a second script, mapSwitchesShow.pl was created to convert to a tab delimited text
|
|
|
10 |
file for human viewing and/or script processing.
|
|
|
11 |
|
|
|
12 |
Files:
|
|
|
13 |
|
|
|
14 |
mapSwitches.pl - the main file which connects to each device in config, gathers data, and updates persistent storage
|
|
|
15 |
mapSwitchesShow.pl - converts stored data into a CSV (tab delimited)
|
|
|
16 |
mapswitches.cron - sample cron file to gather information hourly and generate a CSV once a day
|
|
|
17 |
|
|
|
18 |
The following files are not required for the system to run
|
|
|
19 |
mapSwitches.config.yaml.sample - sample configuration file
|
|
|
20 |
README - This file
|
|
|
21 |
makeConfig.pl.sample - generate configuration file from hash. Easier for perl programmers
|
|
|
22 |
mapSwitches.config.yaml.sample - sample configuration file
|
|
|
23 |
pingall.pl - utility to ping all available ports on a /24 network. Used to artificially refresh arp table
|
|
|
24 |
|
|
|
25 |
The configuration file MUST be created before running the script. It can be manually created
|
|
|
26 |
(rename mapSwitches.config.yaml.sample to mapSwitches.config.yaml and edit) or generated makeConfig.pl.sample
|
|
|
27 |
(edit hash, then run)
|
|
|
28 |
|
|
|
29 |
The following file is created on first run.
|
|
|
30 |
mapSwitches.yaml
|
|
|
31 |
This is the persistent storage. It can be safely deleted at any time to reinitialize the system.
|
|
|
32 |
|
|
|
33 |
The script requires snmp to be installed (no MIB files required), and uses the perl module YAML::Tiny. On a Debian based
|
|
|
34 |
system, this can be installed with the command:
|
|
|
35 |
|
|
|
36 |
apt-get libyaml-tiny-perl snmp
|
|
|
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 |
|
|
|
43 |
Tested under Devuan Jessie, connecting to HP Procurve and OpnSense router
|