diff --git a/cleanup.php b/cleanup.php index c16f7e56d8..04b062914d 100755 --- a/cleanup.php +++ b/cleanup.php @@ -1,8 +1,8 @@ #!/usr/bin/env php +netmask; + $response = explode(" ", snmp_get($row, "ipAdEntIfIndex.".$row['ipv4_address'], "-Osq")); + $response = $response[1]; + $maskcheck = explode(" ", snmp_get($row, "ipAdEntNetMask.".$row['ipv4_address'], "-Osq")); + $maskcheck = $maskcheck[1]; - $mask = trim(shell_exec($config['ipcalc'] . " ".$row['ipv4_address']."/".$row['ipv4_prefixlen']." | grep Netmask: | cut -d \" \" -f 4")); - $response = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname]:$row[port] ipAdEntIfIndex.".$row['ipv4_address']." | cut -d " " -f 2`); - $maskcheck = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname]:$row[port] ipAdEntNetMask.".$row['ipv4_address']." | cut -d " " -f 2`); - if($response == $row['ifIndex'] && $mask == $maskcheck) { - } else { + if ($response != $row['ifIndex'] || $mask != $maskcheck) + { mysql_query("delete from ipv4_address where id = '".$row['ipv4_address_id']."'"); echo("Deleted ".$row['ipv4_address']." from $row[hostname]\n"); } @@ -25,38 +29,45 @@ while($row = mysql_fetch_array($data)) { $sql = "SELECT * FROM devices WHERE status = '1'"; $query = mysql_query($sql); -while($device = mysql_fetch_array($query)) { + +while ($device = mysql_fetch_array($query)) +{ echo($device['hostname'] . " \n\n"); - $oids = shell_exec("snmpwalk -v2c -c ".$device['community']." ".$device['hostname'].":".$device['port']." ipAddressIfIndex.ipv6 -Osq"); - $oids = str_replace("ipAddressIfIndex.ipv6.", "", $oids); $oids = str_replace("\"", "", $oids); $oids = trim($oids); + + $oids = snmp_walk($device, "ipAddressIfIndex.ipv6", "-Osq"); + $oids = str_replace("ipAddressIfIndex.ipv6.", "", $oids); + $oids = str_replace("\"", "", $oids); $oids = trim($oids); + unset($valid_ips); - foreach(explode("\n", $oids) as $data) { + foreach (explode("\n", $oids) as $data) { $data = trim($data); list($ipv6addr,$ifIndex) = explode(" ", $data); $valid_ips[] = $ipv6addr; } - $sql = "SELECT * FROM ip6addr AS A, ports AS I, devices as D WHERE A.interface_id = I.interface_id AND I.device_id = '".$device['device_id']."'"; + $sql = "SELECT * FROM ip6addr AS A, ports AS I, devices as D WHERE A.interface_id = I.interface_id AND I.device_id = '".$device['device_id']."'"; $data = mysql_query($sql); - while($row = mysql_fetch_array($data)) { - echo($row['addr'] . "\n"); + while ($row = mysql_fetch_array($data)) + { + echo($row['ipv6_address'] . "\n"); unset($valid); - foreach($valid_ips as $valid_ip) { - echo($row['addr'] . " = $valid_ip ? \n"); + foreach ($valid_ips as $valid_ip) + { + echo($row['ipv6_address'] . " = $valid_ip ? \n"); } } } -$query = "SELECT * FROM ports AS I, devices as D - WHERE I.device_id = D.device_id AND D.status = '1'"; +$query = "SELECT * FROM ports AS I, devices as D WHERE I.device_id = D.device_id AND D.status = '1'"; $data = mysql_query($query); -while($row = mysql_fetch_array($data)) { +while ($row = mysql_fetch_array($data)) +{ $index = $row['ifIndex']; - $hostname = $row['hostname']; - $community = $row['community']; - $port = $row['port']; - $response = trim(`snmpget -v2c -Osq -c $community $hostname:$port ifIndex.$index | cut -d " " -f 2`); - if($response != $index) { + + $response = explode(" ", snmp_get($row, "ifIndex.$index", "-Osq")); + $response = $response[1]; + + if ($response != $index) { mysql_query("DELETE from ports where interface_id = '" . $row['interface_id'] . "'"); mysql_query("DELETE from `adjacencies` WHERE `interface_id` = '" . $row['interface_id'] . "'"); mysql_query("DELETE from `links` WHERE `local_interface_id` = '" . $row['interface_id'] . "'"); @@ -68,23 +79,28 @@ while($row = mysql_fetch_array($data)) { echo(mysql_result(mysql_query("SELECT COUNT(*) FROM `ports`"), 0) . " ports at start\n"); $interface_query = mysql_query("SELECT interface_id,device_id FROM `ports`"); -while ($interface = mysql_fetch_array($interface_query)) { +while ($interface = mysql_fetch_array($interface_query)) +{ $device_id = $interface['device_id']; $interface_id = $interface['interface_id']; - if(mysql_result(mysql_query("SELECT COUNT(*) FROM `devices` WHERE `device_id` = '$device_id'"), 0) == '0') { + if (mysql_result(mysql_query("SELECT COUNT(*) FROM `devices` WHERE `device_id` = '$device_id'"), 0) == '0') + { mysql_query("delete from ports where `interface_id` = '$interface_id'"); echo("Deleting if $interface_id \n"); } } + echo(mysql_result(mysql_query("SELECT COUNT(*) FROM `ports`"), 0) . " ports at end\n"); echo(mysql_result(mysql_query("SELECT COUNT(id) FROM `links`"), 0) . " links at start\n"); $link_query = mysql_query("SELECT id,local_interface_id,remote_interface_id FROM `links`"); -while ($link = mysql_fetch_array($link_query)) { +while ($link = mysql_fetch_array($link_query)) +{ $id = $link['id']; $src = $link['local_interface_id']; $dst = $link['remote_interface_id']; - if(mysql_result(mysql_query("SELECT COUNT(interface_id) FROM `ports` WHERE `interface_id` = '$src'"), 0) == '0' || mysql_result(mysql_query("SELECT COUNT(*) FROM `ports` WHERE `interface_id` = '$dst'"), 0) == '0') { + if (mysql_result(mysql_query("SELECT COUNT(interface_id) FROM `ports` WHERE `interface_id` = '$src'"), 0) == '0' || mysql_result(mysql_query("SELECT COUNT(*) FROM `ports` WHERE `interface_id` = '$dst'"), 0) == '0') + { mysql_query("delete from links where `id` = '$id'"); echo("Deleting link $id \n"); } @@ -93,11 +109,13 @@ echo(mysql_result(mysql_query("SELECT COUNT(id) FROM `links`"), 0) . " links at echo(mysql_result(mysql_query("SELECT COUNT(adj_id) FROM `adjacencies`"), 0) . " adjacencies at start\n"); $link_query = mysql_query("SELECT * FROM `adjacencies` AS A, `ports` AS I, `devices` AS D, networks AS N WHERE I.interface_id = A.interface_id AND D.device_id = I.device_id AND N.id = A.network_id"); -while ($link = mysql_fetch_array($link_query)) { +while ($link = mysql_fetch_array($link_query)) +{ $id = $link['adj_id']; $netid = $link['network_id']; $ifid = $link['interface_id']; - if(mysql_result(mysql_query("SELECT COUNT(*) FROM `ports` WHERE `interface_id` = '$ifid'"), 0) == '0' || mysql_result(mysql_query("SELECT COUNT(id) FROM `networks` WHERE `id` = '$netid'"), 0) == '0') { + if (mysql_result(mysql_query("SELECT COUNT(*) FROM `ports` WHERE `interface_id` = '$ifid'"), 0) == '0' || mysql_result(mysql_query("SELECT COUNT(id) FROM `networks` WHERE `id` = '$netid'"), 0) == '0') + { $remove = 1; echo("Removed Interface!\n"); } @@ -105,21 +123,21 @@ while ($link = mysql_fetch_array($link_query)) { list($network, $cidr) = explode("/", $link['cidr']); $checksql = "SELECT COUNT(*) FROM `ipaddr` WHERE `interface_id` = '" . $link['interface_id'] . "' AND `cidr` = '$cidr' AND `network` = '$network'"; - if(mysql_result(mysql_query($checksql),0) == 0) { $remove = 1; } - + if (mysql_result(mysql_query($checksql),0) == 0) { $remove = 1; } # echo($link['if'] . " (" . $link['interface_id'] . ") -> " . $link['cidr'] . " \n"); - if($link['cidr'] == "") { $remove = 1; echo("Broken CIDR entry!"); } + if ($link['cidr'] == "") { $remove = 1; echo("Broken CIDR entry!"); } - - if($remove) { + if ($remove) + { mysql_query("delete from adjacencies where `adj_id` = '$id'"); echo("Deleting link $id (".$link['cidr']." - ". $link['hostname'] ." - ". $link['ifDescr'] .")\n"); } + unset($remove); } + echo(mysql_result(mysql_query("SELECT COUNT(adj_id) FROM `adjacencies`"), 0) . " adjacencies at end\n"); - -?> +?> \ No newline at end of file diff --git a/generate-iplist.php b/generate-iplist.php index b76bbaf53f..6404b8816f 100755 --- a/generate-iplist.php +++ b/generate-iplist.php @@ -5,21 +5,24 @@ include("includes/defaults.inc.php"); include("config.php"); include("includes/functions.php"); -shell_exec("rm ips.txt && touch ips.txt"); - -$handle = fopen("ips.txt", "w+"); +$handle = fopen("ips.txt", "w"); $query = mysql_query("SELECT * FROM `ipv4_networks`"); -while ($data = mysql_fetch_array($query)) { +while ($data = mysql_fetch_array($query)) +{ $cidr = $data['ipv4_network']; - list ($network, $bits) = preg_split("@\/@", $cidr); - if($bits != '32' && $bits != '32' && $bits > '22') { - $broadcast = trim(shell_exec($config['ipcalc']." $cidr | grep Broadcast | cut -d\" \" -f 2")); + list ($network, $bits) = explode("/", $cidr); + if($bits != '32' && $bits != '32' && $bits > '22') + { + $addr = Net_IPv4::parseAddress($cidr); + $broadcast = $addr->broadcast; $ip = ip2long($network) + '1'; $end = ip2long($broadcast); - while($ip < $end) { + while($ip < $end) + { $ipdotted = long2ip($ip); - if(mysql_result(mysql_query("SELECT count(ipv4_address_id) FROM ipv4_addresses WHERE ipv4_address = '$ipdotted'"),0) == '0' && match_network($config['nets'], $ipdotted)) { + if(mysql_result(mysql_query("SELECT count(ipv4_address_id) FROM ipv4_addresses WHERE ipv4_address = '$ipdotted'"),0) == '0' && match_network($config['nets'], $ipdotted)) + { fputs($handle, $ipdotted . "\n"); } $ip++; @@ -27,6 +30,8 @@ while ($data = mysql_fetch_array($query)) { } } -`fping -t 100 -f ips.txt > ips-scanned.txt`; +fclose($handle); + +shell_exec("fping -t 100 -f ips.txt > ips-scanned.txt"); ?> diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index e6118a23a6..67e1b1d440 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -13,7 +13,6 @@ $config['log_file'] = $config['install_dir'] . "/observium.log"; $config['sipcalc'] = "/usr/bin/sipcalc"; $config['rrdtool'] = "/usr/bin/rrdtool"; $config['fping'] = "/usr/bin/fping"; -$config['ipcalc'] = "/usr/bin/ipcalc"; $config['snmpwalk'] = "/usr/bin/snmpwalk"; $config['snmpget'] = "/usr/bin/snmpget"; $config['snmpbulkwalk'] = "/usr/bin/snmpbulkwalk"; diff --git a/includes/functions.php b/includes/functions.php index 80bd2aa9fe..674067963b 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -324,8 +324,8 @@ function scanUDP ($host, $port, $timeout) function netmask2cidr($netmask) { - list ($network, $cidr) = explode("/", trim(`ipcalc $address/$mask | grep Network | cut -d" " -f 4`)); - return $cidr; + $addr = Net_IPv4::parseAddress("1.2.3.4/$netmask"); + return $addr->bitmask; } function cidr2netmask()