/includes/discovery/ipv4-addresses.inc.php

https://bitbucket.org/MelFlynn/observium · PHP · 64 lines · 49 code · 13 blank · 2 comment · 12 complexity · 42edae1ea388ab2186c94eac8a7d83bf MD5 · raw file

  1. <?php
  2. echo("IPv4 Addresses : ");
  3. $oids = trim(snmp_walk($device,"ipAdEntIfIndex","-Osq","IP-MIB"));
  4. $oids = str_replace("ipAdEntIfIndex.", "", $oids);
  5. foreach (explode("\n", $oids) as $data)
  6. {
  7. $data = trim($data);
  8. list($oid,$ifIndex) = explode(" ", $data);
  9. $mask = trim(snmp_get($device,"ipAdEntNetMask.$oid","-Oqv","IP-MIB"));
  10. $addr = Net_IPv4::parseAddress("$oid/$mask");
  11. $network = $addr->network . "/" . $addr->bitmask;
  12. $cidr = $addr->bitmask;
  13. if (mysql_result(mysql_query("SELECT count(*) FROM `ports` WHERE device_id = '".$device['device_id']."' AND `ifIndex` = '$ifIndex'"), 0) != '0' && $oid != "0.0.0.0")
  14. {
  15. $i_query = "SELECT interface_id FROM `ports` WHERE device_id = '".$device['device_id']."' AND `ifIndex` = '$ifIndex'";
  16. $interface_id = mysql_result(mysql_query($i_query), 0);
  17. if (mysql_result(mysql_query("SELECT COUNT(*) FROM `ipv4_networks` WHERE `ipv4_network` = '$network'"), 0) < '1')
  18. {
  19. mysql_query("INSERT INTO `ipv4_networks` (`ipv4_network`) VALUES ('$network')");
  20. #echo("Create Subnet $network\n");
  21. echo("S");
  22. }
  23. $ipv4_network_id = @mysql_result(mysql_query("SELECT `ipv4_network_id` from `ipv4_networks` WHERE `ipv4_network` = '$network'"), 0);
  24. if (mysql_result(mysql_query("SELECT COUNT(*) FROM `ipv4_addresses` WHERE `ipv4_address` = '$oid' AND `ipv4_prefixlen` = '$cidr' AND `interface_id` = '$interface_id'"), 0) == '0')
  25. {
  26. mysql_query("INSERT INTO `ipv4_addresses` (`ipv4_address`, `ipv4_prefixlen`, `ipv4_network_id`, `interface_id`) VALUES ('$oid', '$cidr', '$ipv4_network_id', '$interface_id')");
  27. #echo("Added $oid/$cidr to $interface_id ( $hostname $ifIndex )\n $i_query\n");
  28. echo("+");
  29. } else { echo("."); }
  30. $full_address = "$oid/$cidr|$ifIndex";
  31. $valid_v4[$full_address] = 1;
  32. } else { echo("!"); }
  33. }
  34. $sql = "SELECT * FROM ipv4_addresses AS A, ports AS I WHERE I.device_id = '".$device['device_id']."' AND A.interface_id = I.interface_id";
  35. $data = mysql_query($sql);
  36. while ($row = mysql_fetch_assoc($data))
  37. {
  38. $full_address = $row['ipv4_address'] . "/" . $row['ipv4_prefixlen'] . "|" . $row['ifIndex'];
  39. if (!$valid_v4[$full_address])
  40. {
  41. echo("-");
  42. $query = @mysql_query("DELETE FROM `ipv4_addresses` WHERE `ipv4_address_id` = '".$row['ipv4_address_id']."'");
  43. if (!mysql_result(mysql_query("SELECT count(*) FROM ipv4_addresses WHERE ipv4_network_id = '".$row['ipv4_network_id']."'"),0))
  44. {
  45. $query = @mysql_query("DELETE FROM `ipv4_networks` WHERE `ipv4_network_id` = '".$row['ipv4_network_id']."'");
  46. }
  47. }
  48. }
  49. echo("\n");
  50. unset($valid_v4);
  51. ?>