2007-04-03 16:18:19 +00:00
#!/usr/bin/php
2009-09-07 11:07:59 +00:00
< ? php
2007-04-03 16:18:19 +00:00
2009-04-11 19:10:48 +00:00
#ini_set('display_errors', 1);
#ini_set('display_startup_errors', 1);
#ini_set('log_errors', 1);
#ini_set('error_reporting', E_WARNING);
2008-09-07 22:31:23 +00:00
2007-04-03 16:18:19 +00:00
include ( " config.php " );
include ( " includes/functions.php " );
2007-04-15 14:38:26 +00:00
include ( " includes/cdp.inc.php " );
2007-04-03 16:18:19 +00:00
2009-04-11 19:10:48 +00:00
if ( $argv [ 1 ] == " --device " && $argv [ 2 ]) {
$where = " AND `device_id` = ' " . $argv [ 2 ] . " ' " ;
}
2009-04-13 19:16:22 +00:00
$device_query = mysql_query ( " SELECT * FROM `devices` WHERE `status` = '1' AND (`os` = 'IOS' OR `os` = 'IOS XE') AND hostname NOT LIKE '%esr%' $where ORDER BY `device_id` DESC " );
2007-04-03 16:18:19 +00:00
while ( $device = mysql_fetch_array ( $device_query )) {
$hostname = $device [ 'hostname' ];
$community = $device [ 'community' ];
2008-09-07 22:31:23 +00:00
$id = $device [ 'device_id' ];
2007-04-03 16:18:19 +00:00
$host = $id ;
2009-03-02 18:12:09 +00:00
echo ( " \n Detecting CDP neighbours on $device[1] ... \n " );
2007-04-03 16:18:19 +00:00
$snmp = new snmpCDP ( $hostname , $community );
$ports = $snmp -> getports ();
$cdp = $snmp -> explore_cdp ( $ports );
2008-09-25 13:54:58 +00:00
$cdp_links = " " ;
2007-04-03 16:18:19 +00:00
foreach ( array_keys ( $cdp ) as $key ) {
$port = $ports [ $key ];
$link = $cdp [ $key ];
$cdp_links .= $hostname . " , " . $port [ 'desc' ] . " , " . $link [ 'host' ] . " , " . $link [ 'port' ] . " \n " ;
}
$cdp_links = trim ( $cdp_links );
2009-03-02 18:12:09 +00:00
2007-04-03 16:18:19 +00:00
foreach ( explode ( " \n " , $cdp_links ) as $link ) {
if ( $link == " " ) { break ; }
list ( $src_host , $src_if , $dst_host , $dst_if ) = explode ( " , " , $link );
$dst_host = strtolower ( $dst_host );
$dst_if = strtolower ( $dst_if );
$src_host = strtolower ( $src_host );
$src_if = strtolower ( $src_if );
$ip = gethostbyname ( $dst_host );
2008-03-15 17:58:15 +00:00
if ( match_network ( $config [ 'nets' ], $ip ) ) {
2009-03-02 18:12:09 +00:00
if ( mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `devices` WHERE `sysName` = ' $dst_host ' " ), 0 ) == '0' ) {
2009-03-16 15:19:44 +00:00
if ( $config [ 'cdp_autocreate' ]) {
echo ( " ++ Creating: $dst_host \n " );
createHost ( $dst_host , $community , " v2c " );
}
2007-04-03 16:18:19 +00:00
} else {
2009-04-11 19:10:48 +00:00
echo ( " . " );
2007-04-03 16:18:19 +00:00
}
2009-03-02 18:12:09 +00:00
} else {
2009-04-11 19:10:48 +00:00
echo ( " !( $dst_host ) " );
2009-03-02 18:12:09 +00:00
}
if ( mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `devices` WHERE `sysName` = ' $dst_host ' " ), 0 ) == '1' &&
2007-04-03 16:18:19 +00:00
mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `devices` WHERE `hostname` = ' $src_host ' " ), 0 ) == '1' &&
2009-03-02 18:12:09 +00:00
mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `interfaces` AS I, `devices` AS D WHERE `ifDescr` = ' $dst_if ' AND sysName = ' $dst_host ' AND D.device_id = I.device_id " ), 0 ) == '1' &&
2007-04-15 15:16:11 +00:00
mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `interfaces` AS I, `devices` AS D WHERE `ifDescr` = ' $src_if ' AND hostname = ' $src_host ' AND D.device_id = I.device_id " ), 0 ) == '1' )
2009-03-02 18:12:09 +00:00
{
$dst_if_id = mysql_result ( mysql_query ( " SELECT I.interface_id FROM `interfaces` AS I, `devices` AS D WHERE `ifDescr` = ' $dst_if ' AND sysName = ' $dst_host ' AND D.device_id = I.device_id " ), 0 );
2007-04-15 15:16:11 +00:00
$src_if_id = mysql_result ( mysql_query ( " SELECT I.interface_id FROM `interfaces` AS I, `devices` AS D WHERE `ifDescr` = ' $src_if ' AND hostname = ' $src_host ' AND D.device_id = I.device_id " ), 0 );
2007-04-03 16:18:19 +00:00
$linkalive [] = $src_if_id . " , " . $dst_if_id ;
if ( mysql_result ( mysql_query ( " SELECT COUNT(*) FROM `links` WHERE `dst_if` = ' $dst_if_id ' AND `src_if` = ' $src_if_id ' " ), 0 ) == '0' )
{
$sql = " INSERT INTO `links` (`src_if`, `dst_if`, `cdp`) VALUES (' $src_if_id ', ' $dst_if_id ', '1') " ;
mysql_query ( $sql );
2009-04-13 19:16:22 +00:00
echo ( " \n ++( $src_host $src_if -> $dst_host $dst_if ) " );
2007-04-03 16:18:19 +00:00
} else {
2009-04-11 19:10:48 +00:00
echo ( " .. " );
2007-04-03 16:18:19 +00:00
}
2009-03-02 18:12:09 +00:00
} else {
2007-04-03 16:18:19 +00:00
}
}
}
2009-04-11 19:10:48 +00:00
echo ( " \n " );
2007-04-03 16:18:19 +00:00
echo ( count ( $linkalive ) . " Entries \n " );
$query = mysql_query ( " SELECT * FROM `links` " );
while ( $entry = mysql_fetch_array ( $query )) {
$i = 0 ;
unset ( $alive );
while ( $i < count ( $linkalive ) && ! $alive ) {
list ( $src_if_id , $dst_if_id ) = explode ( " , " , $linkalive [ $i ]);
$thislink = $entry [ 'src_if' ] . " , " . $entry [ 'dst_if' ];
if ( $thislink == $linkalive [ $i ]) {
$alive = " yes " ;
}
$i ++ ;
}
if ( ! $alive ) {
mysql_query ( " DELETE FROM `links` WHERE `src_if` = ' $entry[src_if] ' AND `dst_if` = ' $entry[dst_if] ' " );
2009-03-16 15:19:44 +00:00
# echo("$src_if_id -> $dst_if_id REMOVED \n");
2007-04-03 16:18:19 +00:00
} else {
2009-03-16 15:19:44 +00:00
# echo("$src_if_id -> $dst_if_id VALID \n");
2007-04-03 16:18:19 +00:00
}
}
?>