if ($Scan->icmp_type == "fping") { if (!file_exists($Scan->settings->scanFPingPath)) { die("Invalid fping path!"); } } //first fetch all subnets to be scanned $scan_subnets = $Subnets->fetch_all_subnets_for_pingCheck(); if ($Scan->debugging) { print_r($scan_subnets); } if ($scan_subnets === false) { die("No subnets are marked for checking status updates"); } //fetch all addresses that need to be checked foreach ($scan_subnets as $s) { $subnet_addresses = $Addresses->fetch_subnet_addresses($s->id); //set array for fping if ($Scan->icmp_type == "fping") { $subnets[] = array("id" => $s->id, "cidr" => $Subnets->transform_to_dotted($s->subnet) . "/" . $s->mask); } //save addresses if (sizeof($subnet_addresses) > 1) { foreach ($subnet_addresses as $a) { //ignore excludePing if ($a->excludePing != 1) { //create old status $tDiff = time() - strtotime($a->lastSeen); $oldStatus = $tDiff <= $statuses[1] ? 0 : 2; //create different array for fping if ($Scan->icmp_type == "fping") { $addresses2[$s->id][$a->id] = array("id" => $a->id, "ip_addr" => $a->ip_addr, "description" => $a->description, "subnetId" => $a->subnetId, "lastSeen" => $a->lastSeen, "oldStatus" => $oldStatus);
print " <form name='domainEdit' id='domainEdit'><input type='hidden' name='action' value='delete'><input type='hidden' name='id' value='{$domain->id}'></form>"; print "\t<div class='domain-edit-result'></div>"; print "</div>"; } elseif (isset($_POST['DNSrecursive']) && $domain === false) { // use default values $values = json_decode($User->settings->powerDNS, true); $values['name'] = $zone; // create domain $PowerDNS->domain_edit("add", array("name" => $zone, "type" => "NATIVE")); // save id $domain_id = $PowerDNS->get_last_db_id(); // create default records $PowerDNS->create_default_records($values); // create PTR records $Addresses->pdns_validate_connection(); $hosts = $Addresses->fetch_subnet_addresses($subnet_old_details['id'], "ip_addr", "asc"); // loop if (sizeof($hosts) > 0) { $cnt = 0; $err = 0; $ski = 0; // loop foreach ($hosts as $h) { if ($h->PTRignore == "1") { $ski++; } elseif ($Addresses->ptr_add($h, false, $h->id) !== false) { $cnt++; } else { $err++; } }
} else { $sort['directionNext'] = "asc"; } # subnet-related variables $subnet = (array) $Subnets->fetch_subnet(null, $_POST['subnetId']); //subnet details $subnet_detailed = $Subnets->get_network_boundaries($subnet['subnet'], $subnet['mask']); //set network boundaries $slaves = $Subnets->has_slaves($subnet['id']) ? true : false; //check if subnet has slaves and set slaves flag true/false # fetch all addresses - sorted if ($slaves) { $addresses = $Addresses->fetch_subnet_addresses_recursive($subnet['id'], false, $sort['field'], $sort['direction']); $slave_subnets = (array) $Subnets->fetch_subnet_slaves($subnet['id']); } else { $addresses = $Addresses->fetch_subnet_addresses($subnet['id'], $sort['field'], $sort['direction']); } # set permissions $subnet_permission = $Subnets->check_permission($User->user, $subnet['id']); } # We need DNS object $DNS = new DNS($Database, $User->settings); /* verifications */ # checks if (sizeof($subnet) == 0) { $Result->show("danger", _('Subnet does not exist'), true); } //subnet doesnt exist if ($subnet_permission == 0) { $Result->show("danger", _('You do not have permission to access this network'), true); }
require dirname(__FILE__) . '/../../../functions/PEAR/Spreadsheet/Excel/Writer.php'; # initialize required objects $Database = new Database_PDO(); $Result = new Result(); $User = new User($Database); $Subnets = new Subnets($Database); $Tools = new Tools($Database); $Addresses = new Addresses($Database); # verify that user is logged in $User->check_user_session(); # we dont need any errors! //ini_set('display_errors', 0); # fetch subnet details $subnet = (array) $Subnets->fetch_subnet(null, $_GET['subnetId']); # fetch all IP addresses in subnet $addresses = $Addresses->fetch_subnet_addresses($_GET['subnetId'], "ip_addr", "asc"); # get all custom fields $custom_fields = $Tools->fetch_custom_fields('ipaddresses'); # Create a workbook $filename = "phpipam_subnet_export.xls"; $workbook = new Spreadsheet_Excel_Writer(); //formatting headers $format_header =& $workbook->addFormat(); $format_header->setBold(); $format_header->setColor('black'); $format_header->setSize(12); //format vlan $format_vlan =& $workbook->addFormat(); $format_vlan->setColor('black'); $format_vlan->setSize(11); //formatting titles
/** * Checks if it ok to split subnet * * @access private * @param mixed $subnet_old * @param mixed $number * @param string $group * @param string $strict * @return void */ private function verify_subnet_split($subnet_old, $number, $group, $strict) { # addresses class $Addresses = new Addresses($this->Database); # get new mask - how much we need to add to old mask? switch ($number) { case "2": $mask_diff = 1; break; case "4": $mask_diff = 2; break; case "8": $mask_diff = 3; break; case "16": $mask_diff = 4; break; case "32": $mask_diff = 5; break; case "64": $mask_diff = 6; break; case "128": $mask_diff = 7; break; case "256": $mask_diff = 8; break; //otherwise die //otherwise die default: $Result->show("danger", _("Invalid number of subnets"), true); } //set new mask $mask = $subnet_old->mask + $mask_diff; //set number of subnets $number_of_subnets = pow(2, $mask_diff); //set max hosts per new subnet $max_hosts = $this->get_max_hosts($mask, $this->identify_address($this->transform_to_dotted($subnet_old->subnet)), false); # create array of new subnets based on number of subnets (number) for ($m = 0; $m < $number_of_subnets; $m++) { $newsubnets[$m] = (array) $subnet_old; $newsubnets[$m]['id'] = $m; $newsubnets[$m]['mask'] = $mask; // if group is selected rewrite the masterSubnetId! if ($group == "yes") { $newsubnets[$m]['masterSubnetId'] = $subnet_old->id; } // recalculate subnet if ($m > 0) { $newsubnets[$m]['subnet'] = gmp_strval(gmp_add($newsubnets[$m - 1]['subnet'], $max_hosts)); } } // recalculate old hosts to put it to right subnet $addresses = $Addresses->fetch_subnet_addresses($subnet_old->id, "ip_addr", "asc"); # get all IP addresses $subSize = sizeof($newsubnets); # how many times to check $n = 0; # ip address count // loop foreach ($addresses as $ip) { //cast $ip = (array) $ip; # check to which it belongs for ($m = 0; $m < $subSize; $m++) { # check if between this and next - strict if ($strict == "yes") { # check if last if ($m + 1 == $subSize) { if ($ip['ip_addr'] > $newsubnets[$m]['subnet']) { $addresses[$n]->subnetId = $newsubnets[$m]['id']; } } elseif ($ip['ip_addr'] > $newsubnets[$m]['subnet'] && $ip['ip_addr'] < @$newsubnets[$m + 1]['subnet']) { $addresses[$n]->subnetId = $newsubnets[$m]['id']; } } else { # check if last if ($m + 1 == $subSize) { if ($ip['ip_addr'] >= $newsubnets[$m]['subnet']) { $addresses[$n]->subnetId = $newsubnets[$m]['id']; } } elseif ($ip['ip_addr'] >= $newsubnets[$m]['subnet'] && $ip['ip_addr'] < $newsubnets[$m + 1]['subnet']) { $addresses[$n]->subnetId = $newsubnets[$m]['id']; } } } # if subnetId is still the same save to error if ($addresses[$n]->subnetId == $subnet_old->id) { $this->Result->show("danger", _('Wrong IP addresses (subnet or broadcast)') . ' - ' . $this->transform_to_dotted($ip['ip_addr']), true); } # next IP address $n++; } # check if new overlap (e.g. was added twice) $nested_subnets = $this->fetch_subnet_slaves($subnet_old->id); if ($nested_subnets !== false) { //loop through all current slaves and check foreach ($nested_subnets as $nested_subnet) { //check all new foreach ($newsubnets as $new_subnet) { $new_subnet = (object) $new_subnet; if ($this->verify_overlapping($this->transform_to_dotted($new_subnet->subnet) . "/" . $new_subnet->mask, $this->transform_to_dotted($nested_subnet->subnet) . "/" . $nested_subnet->mask) === true) { $Result->show("danger", _("Subnet overlapping - ") . $this->transform_to_dotted($new_subnet->subnet) . "/" . $new_subnet->mask . " overlapps with " . $this->transform_to_dotted($nested_subnet->subnet) . "/" . $nested_subnet->mask, true); } } } } # all good, return result array of newsubnets and addresses return array(0 => $newsubnets, 1 => $addresses); }
$vlan = (array) $Tools->fetch_object("vlans", "vlanId", $subnet['vlanId']); if (strlen($vlan['number']) > 0) { $vlanText = " (vlan: " . $vlan['number']; if (strlen($vlan['name']) > 0) { $vlanText .= ' - ' . $vlan['name'] . ')'; } else { $vlanText .= ")"; } } else { $vlanText = ""; } $worksheet->write($lineCount, 0, $Subnets->transform_to_dotted($subnet['subnet']) . "/" . $subnet['mask'] . " - " . $subnet['description'] . $vlanText, $format_header); $worksheet->mergeCells($lineCount, 0, $lineCount, $colSize); $lineCount++; //IP addresses in subnet $ipaddresses = $Addresses->fetch_subnet_addresses($subnet['id']); //write headers $worksheet->write($lineCount, 0, _('ip address'), $format_title); $worksheet->write($lineCount, 1, _('ip state'), $format_title); $worksheet->write($lineCount, 2, _('description'), $format_title); $worksheet->write($lineCount, 3, _('hostname'), $format_title); $worksheet->write($lineCount, 4, _('mac'), $format_title); $worksheet->write($lineCount, 5, _('owner'), $format_title); $worksheet->write($lineCount, 6, _('device'), $format_title); $worksheet->write($lineCount, 7, _('port'), $format_title); $worksheet->write($lineCount, 8, _('note'), $format_title); $m = 9; //custom if (sizeof($myFields) > 0) { foreach ($myFields as $myField) { $worksheet->write($lineCount, $m, $myField['name'], $format_title);
$domain = $PowerDNS->fetch_domain_by_name($zone); // default values $values = json_decode($User->settings->powerDNS, true); $values['name'] = $zone; // domain missing, create it and default records if ($domain === false) { // create domain $PowerDNS->domain_edit("add", array("name" => $zone, "type" => "NATIVE")); // create default records $PowerDNS->create_default_records($values); } // remove existing records and links $PowerDNS->remove_all_ptr_records($domain->id); $Addresses->ptr_unlink_subnet_addresses($subnet->id); // fetch all hosts $hosts = $Addresses->fetch_subnet_addresses($subnet->id, "ip_addr", "asc"); // create PTR records if (sizeof($hosts) > 0) { foreach ($hosts as $h) { // ignore PTR if ($h->PTRignore == "1") { $ignored[] = $h; } elseif ($Result->validate_hostname($h->dns_name) !== false) { // formulate new record $record = $PowerDNS->formulate_new_record($domain->id, $PowerDNS->get_ip_ptr_name($h->ip), "PTR", $h->dns_name, $values['ttl']); // insert record $PowerDNS->add_domain_record($record, false); // link $Addresses->ptr_link($h->id, $PowerDNS->lastId); // ok $success[] = $h;
/** * Returns array of all addresses to be scanned * * @access public * @param mixed $subnetId * @return void */ public function prepare_addresses_to_update($subnetId) { # first fetch all addresses $Addresses = new Addresses($this->Database); // get all existing IP addresses in subnet $subnet_addresses = $Addresses->fetch_subnet_addresses($subnetId); //create array if (sizeof($subnet_addresses) > 0) { foreach ($subnet_addresses as $a) { $scan_addresses[$a->id] = $a->ip_addr; } //reindex $scan_addresses = array_values(@$scan_addresses); //return return $scan_addresses; } else { return array(); } }