The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use lib qw(blib/arch blib/lib ../blib/arch ../blib/lib );

use warnings;
use strict;

use NetworkInfo::Discovery;
use NetworkInfo::Discovery::Register;
use NetworkInfo::Discovery::Sniff;
use NetworkInfo::Discovery::Traceroute;

my $d = new NetworkInfo::Discovery::Register ('file' => 'sample.register', 'autosave' => 1) 
    || warn ("failed to make new obj");

my $s = new NetworkInfo::Discovery::Sniff;


$s->maxcapture(10);
$s->do_it;
$d->add_interface($_) for ($s->get_interfaces);


my @traced;
foreach my $h ($s->get_interfaces) {
    (print "----- already traced to " . $h->{ip} . "\n" && next ) if (grep { $_ eq $h->{ip}  } @traced);
    print "Tracing to " . $h->{ip} . "\n";
    push (@traced, $h->{ip}); 

    my $t = new NetworkInfo::Discovery::Traceroute (host=>$h->{ip});
    $t->do_it;
    $d->add_interface($_) for ($t->get_interfaces);
    $d->add_gateway($_) for ($t->get_gateways);
}

$d->write_register;
$d->print_register;