#! usr/bin/perl -w use GraphViz; use SNMP_util "0.90"; use subroutine; use Data::Dumper; use strict; my @ip = qw(10.17.5.201 10.16.5.201 10.37.4.201 10.46.10.201 10.17.3.201 10.18.5.201); my $ipaddress; my @port_address_table; my @mac_tabel_filter; my @mac_tabel_result; my $graph; my %mac_ip; my %graph; foreach $ipaddress (@ip){ my $host = ("rmon12\@$ipaddress"); my @snmp_result_port_mac = &snmpwalk($host, ("1.3.6.1.2.1.2.2.1.6")); my @mac_address_port = convert_mac_address(@snmp_result_port_mac); foreach my $port_mac (@mac_address_port){ push (@port_address_table, $port_mac); } my @snmp_result = &snmpwalk($host, ("1.3.6.1.2.1.17.4.3.1.1")); my @mac_address_result = convert_mac_address(@snmp_result); foreach my $port_address_table (@port_address_table) { foreach my $mac_address (@mac_address_result) { if ($mac_address eq $port_address_table){ if ($mac_address =~/[a-fA-F1-9]$/){ push (@mac_tabel_result, $mac_address); $mac_ip{$mac_address} = $ipaddress; } } } } } foreach my $ipaddress (@ip){ my $host = ("rmon12\@$ipaddress"); my @snmp_result_port_mac = &snmpwalk($host, ("1.3.6.1.2.1.2.2.1.6")); my @mac_address_port = convert_mac_address(@snmp_result_port_mac); foreach my $mac_port_address (@mac_address_port) { foreach my $mac_address_2 (@mac_tabel_result) { if ($mac_address_2 eq $mac_port_address){ push @{$graph{$ipaddress}},$mac_ip{$mac_address_2}; } } } } print Dumper(\%graph); my $g = GraphViz->new(); for my $k (keys %graph) { $g -> add_edge($k=>$_) for @{$graph->{$k}}; } print $g->as_png('graph.png');