Given snmp community and single device, crawls the network via discovering LLDP/CDP neighbours, while producing list or dot file (for graphviz digraphs)
% gem install netcrawl
% netcrawl --graphiz router.example.com
Usage: netcrawl [options] hostname
    -g, --graphviz       dot output use 'dot -Tpng -o map.png map.dot'
    -l, --list           list nodes
    -j, --json           json output
    -y, --yaml           yaml output
    -a, --hash           hash/associative array output
    -r, --resolve        resolve addresses to names
    -p, --purge          remove peers not in configured CIDR
    -c, --community      SNMP community to use
    -d, --debug          turn debugging on
    -h, --help           Display this help message.
- graphiz - graphis (dot) output
 - list - list nodes found
 - json - json output
 - yaml - yaml output
 - hash - ruby hash output
 - resolve - resolve IP addresses
 - purge - remove non-cidr matching peers from output
 - community - sets snmp community
 - debug - turn on debugging
 
---
use:
- LLDP
- CDP
poll:
- 192.0.2.0/24
snmp:
  community: public
  timeout: 1
  retries: 2
  bulkrows: 35
dot:
  bothlinks: true
  color:
  - - cpe
    - gold
  - - -sw
    - blue
  - - -pe
    - red
  - - ' -p'
    - yellow
dns:
  afi: 
log: STDERR
debug: false
namemap:
- - -re\d+
  - ''
- - (.*(?<!as23456.net)$)
  - \1.as23456.net
- use - methods to use for crawling
 - poll - cidrs to allow snmp for
 - snmp community - snmp community to use
 - snmp timout - snmp timout in seconds
 - snmp retries - snmp retries count
 - snmp bulkrows - snmp row count for bulkget
 - dot bothlinks - show a-b and b-a link
 - dot color - regexp to color, first hit used
 - dns afi - ipv4/ipv6 or nil
 - log - STDERR/STDOUT or file
 - debug - debugging
 - namemap - map (LLDP) name to FQDN (JunOS does not give domain)
 
require 'netcrawl' output = NetCrawl.new.crawl('192.0.2.1').to_hash