441 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			441 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
|     /*****************************************************************************
 | |
|     IP Reg, a PHP/MySQL IPAM tool
 | |
|     Copyright (C) 2007-2009 Wietse Warendorff
 | |
| 
 | |
|     This program is free software: you can redistribute it and/or modify
 | |
|     it under the terms of the GNU General Public License as published by
 | |
|     the Free Software Foundation, either version 3 of the License, or
 | |
|     (at your option) any later version.
 | |
| 
 | |
|     This program is distributed in the hope that it will be useful,
 | |
|     but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|     GNU General Public License for more details.
 | |
| 
 | |
|     You should have received a copy of the GNU General Public License
 | |
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
|     For more information, visit http://sourceforge.net/projects/ipreg,
 | |
|     or contact me at wietsew@users.sourceforge.net
 | |
|     *****************************************************************************/
 | |
| 
 | |
|     // start page
 | |
|         // includes
 | |
|         include("includes.php");
 | |
| 
 | |
|         // get id
 | |
|         $subnet_id = sanitize($_GET['subnet_id']);
 | |
| 
 | |
|         // get page
 | |
|         if(isset($_GET['page'])) {
 | |
|             $page = sanitize($_GET['page']);
 | |
|         }
 | |
| 
 | |
|         // start output
 | |
|         $smarty->assign("scripts",'changetext.js');
 | |
|         include("header.php");
 | |
| 
 | |
|         // set language variables
 | |
|         $smarty->assign($lang);
 | |
| 
 | |
|     // setup subnet
 | |
|         // build query
 | |
|         $query = "SELECT
 | |
|                 subnet.subnet_address,
 | |
|                 subnet.subnet_mask,
 | |
|                 subnet.subnet_dhcp_start,
 | |
|                 subnet.subnet_dhcp_end,
 | |
|                 subnet.subnet_info,
 | |
|                 subnet.protocol_version,
 | |
|                 subnet.ntp_server,
 | |
|                 COUNT(node.subnet_id) AS node_counter
 | |
|             FROM
 | |
|                 subnet
 | |
|             LEFT JOIN
 | |
|                 node
 | |
|             ON
 | |
|                 node.subnet_id=subnet.subnet_id
 | |
|             WHERE
 | |
|                 subnet.subnet_id=" . $subnet_id . "
 | |
|             GROUP BY
 | |
|                 subnet.subnet_id";
 | |
| 
 | |
|         // run query
 | |
|         $subnet = $db->db_select($query);
 | |
| 
 | |
|         // set needed variables
 | |
|         $subnet_address = $subnet[0]['subnet_address'];
 | |
|         $subnet_mask = $subnet[0]['subnet_mask'];
 | |
|         $subnet_dhcpstart = $subnet[0]['subnet_dhcp_start'];
 | |
|         $subnet_dhcpend = $subnet[0]['subnet_dhcp_end'];
 | |
|         $subnet_proto_vers = $subnet[0]['protocol_version'];
 | |
|         $subnet_ntp_server = $subnet[0]['ntp_server'];
 | |
| 
 | |
|         // set counters
 | |
|         $host_counter = pow(2,(32-$subnet_mask));
 | |
|         $node_counter = $subnet[0]['node_counter'];
 | |
|         $subnet_usedpercentage = round((($node_counter/($host_counter-2))*100), 1);
 | |
| 
 | |
|         // send to tpl
 | |
|         $smarty->assign("subnet_id", $subnet_id);
 | |
|         $smarty->assign("subnet_address", $subnet_address);
 | |
|         $smarty->assign("subnet_mask", $subnet_mask);
 | |
|         $smarty->assign("subnet_dhcpstart", $subnet_dhcpstart);
 | |
|         $smarty->assign("subnet_dhcpend", $subnet_dhcpend);
 | |
|         $smarty->assign("subnet_info", nl2br($subnet[0]['subnet_info']));
 | |
|         $smarty->assign("subnet_proto_vers", $subnet_proto_vers);
 | |
|         $smarty->assign("subnet_ntp_server", $subnet_ntp_server);
 | |
|         $smarty->assign("node_counter", $node_counter);
 | |
|         $smarty->assign("subnet_usedpercentage", $subnet_usedpercentage);
 | |
|         $smarty->assign("config_color_unused", $config_color_unused);
 | |
|         $smarty->assign("host_counter", $host_counter-2);
 | |
|         $smarty->assign("free_counter", (($host_counter-2)-$node_counter));
 | |
| 
 | |
|     // setup subnet
 | |
|         // split up the range
 | |
|         $iprange = explode('.', $subnet_address);
 | |
|         $iprange1 = $iprange[0];
 | |
|         $iprange2 = $iprange[1];
 | |
|         $iprange3 = $iprange[2];
 | |
|         $iprange4 = $iprange[3];
 | |
| 
 | |
|         // create empty subnet-array
 | |
|         $subnet = array();
 | |
| 
 | |
|         // determine range (Class A/B/C)
 | |
|             if ($subnet_mask>=24) {
 | |
|                 // Class C
 | |
|                 // fill subnet-array with addresses we want to see
 | |
|                 for($i=0;$i<$host_counter;$i++) {
 | |
|                     // build ip
 | |
|                     $ip = $iprange1 . '.' . $iprange2 . '.' . $iprange3 . '.' . ($iprange4+$i);
 | |
| 
 | |
|                     // fill subnet-array
 | |
|                     $subnet[$ip] = array();
 | |
|                 }
 | |
| 
 | |
|                 // calculate broadcast address
 | |
|                 $broadcast_address = $iprange1 . '.' . $iprange2 . '.' . $iprange3 .  '.' . ($iprange4+$i-1);
 | |
| 
 | |
|                 // to tpl
 | |
|                 $smarty->assign("iprange1", $iprange1);
 | |
|                 $smarty->assign("iprange2", $iprange2);
 | |
|                 $smarty->assign("iprange3", $iprange3);
 | |
|                 $smarty->assign("iprange4", $iprange4);
 | |
|                 $smarty->assign("subnetmask1", 255);
 | |
|                 $smarty->assign("subnetmask2", 255);
 | |
|                 $smarty->assign("subnetmask3", 255);
 | |
|                 $smarty->assign("subnetmask4", 256-$host_counter);
 | |
| 
 | |
|                 // no pagination needed
 | |
|                 $smarty->assign("noselect", TRUE);
 | |
|                 $smarty->assign("one_select", FALSE);
 | |
|                 $smarty->assign("two_select", FALSE);
 | |
| 
 | |
|                 // set displayed nodes
 | |
|                 $nodes_displayed = $host_counter;
 | |
|             } else if ($subnet_mask>=16) {
 | |
|                 // Class B
 | |
|                 // which part do we want to see?
 | |
|                 if((empty($page)) ? $page=$subnet_address : $page=$page);
 | |
|                 $page = explode('.', $page);
 | |
|                 $page2 = $page[2];
 | |
| 
 | |
|                 // fill subnet-array with addresses we want to see
 | |
|                 for($i=0;$i<256;$i++) {
 | |
|                     // build ip
 | |
|                     $ip = $iprange1 . '.' . $iprange2 . '.' . $page2 .  '.' . $i;
 | |
| 
 | |
|                     // fill subnet-array
 | |
|                     $subnet[$ip] = array();
 | |
|                 }
 | |
| 
 | |
|                 // calculate broadcast address
 | |
|                 $broadcast_address = $iprange1 . '.' . $iprange2 . '.' . ($iprange3+$i-1) .  '.255';
 | |
| 
 | |
|                 // to tpl
 | |
|                 $smarty->assign("iprange1", $iprange1);
 | |
|                 $smarty->assign("iprange2", $iprange2);
 | |
| 
 | |
|                 // loop addresses in range3
 | |
|                 for($i=$iprange3;$i<(pow(2,(32-$subnet_mask))/256);$i++) {
 | |
|                     // send to tpl
 | |
|                     $smarty->assign("iprange3", $i);
 | |
|                     $smarty->assign("iprange4", 0);
 | |
| 
 | |
|                     // set select box
 | |
|                     if($i==$page2) {
 | |
|                         $smarty->assign("row_selected", "selected");
 | |
| 
 | |
|                     } else {
 | |
|                         $smarty->assign("row_selected", "");
 | |
|                     }
 | |
| 
 | |
|                 }
 | |
| 
 | |
|                 $smarty->assign("subnetmask1", 255);
 | |
|                 $smarty->assign("subnetmask2", 255);
 | |
|                 $smarty->assign("subnetmask3", 256-($host_counter/256));
 | |
|                 $smarty->assign("subnetmask4", 0);
 | |
| 
 | |
|                 // one select box
 | |
|                 $smarty->assign("noselect", FALSE);
 | |
|                 $smarty->assign("one_select", TRUE);
 | |
|                 $smarty->assign("two_select", FALSE);
 | |
| 
 | |
|                 // set displayed nodes
 | |
|                 $nodes_displayed = 256;
 | |
|             } else {
 | |
|                 // Class A
 | |
|                 // which part do we want to see?
 | |
|                 if((empty($page)) ? $page=$subnet_address : $page=$page);
 | |
|                 $page = explode('.', $page);
 | |
|                 $page2 = $page[1];
 | |
|                 $page3 = $page[2];
 | |
| 
 | |
|                 // fill subnet-array with addresses we want to see
 | |
|                 for($i=0;$i<256;$i++) {
 | |
|                     // build ip
 | |
|                     $ip = $iprange1 . '.' . $page2 . '.' . $page3 .  '.' . $i;
 | |
| 
 | |
|                     // fill subnet-array
 | |
|                     $subnet[$ip] = array();
 | |
|                 }
 | |
| 
 | |
|                 // calculate broadcast address
 | |
|                 $broadcast_address = $iprange1 . '.' . ($iprange2+$i-1) . '.255.255';
 | |
| 
 | |
|                 // to tpl
 | |
|                 $smarty->assign("iprange1", $iprange1);
 | |
|                 $smarty->assign("iprange2", $iprange2);
 | |
| 
 | |
|                 // loop addresses in range 2
 | |
|                 for($i=$iprange2;$i<(pow(2,(24-$subnet_mask))/256);$i++) {
 | |
|                     // send to tpl
 | |
|                     $smarty->assign("iprange1", $iprange1);
 | |
|                     $smarty->assign("iprange2", $i);
 | |
|                     $smarty->assign("iprange3", $page3);
 | |
|                     $smarty->assign("iprange4", $iprange4);
 | |
| 
 | |
|                     // set select box
 | |
|                     if($i==$page2) {
 | |
|                         $smarty->assign("row1_selected", "selected");
 | |
| 
 | |
|                     } else {
 | |
|                         $smarty->assign("row1_selected", "");
 | |
|                     }
 | |
| 
 | |
|                     // parse block
 | |
|                     $tp->parse("two_select_row1");
 | |
|                 }
 | |
| 
 | |
|                 // loop addresses in range 3
 | |
|                 for($i=0;$i<256;$i++) {
 | |
|                     // send to tpl
 | |
|                     $smarty->assign("iprange1", $iprange1);
 | |
|                     $smarty->assign("iprange2", $page2);
 | |
|                     $smarty->assign("iprange3", $i);
 | |
|                     $smarty->assign("iprange4", $iprange4);
 | |
| 
 | |
|                     // set select box
 | |
|                     if($i==$page3) {
 | |
|                         $smarty->assign("row2_selected", "selected");
 | |
| 
 | |
|                     } else {
 | |
|                         $smarty->assign("row2_selected", "");
 | |
|                     }
 | |
| 
 | |
|                     // parse block
 | |
|                     $tp->parse("two_select_row2");
 | |
|                 }
 | |
| 
 | |
|                 $smarty->assign("subnetmask1", 255);
 | |
|                 $smarty->assign("subnetmask2", 256-($host_counter/65536));
 | |
|                 $smarty->assign("subnetmask3", 0);
 | |
|                 $smarty->assign("subnetmask4", 0);
 | |
| 
 | |
|                 // one select box
 | |
|                 $smarty->assign("noselect", FALSE);
 | |
|                 $smarty->assign("one_select", FALSE);
 | |
|                 $smarty->assign("two_select", TRUE);
 | |
| 
 | |
|                 // set displayed nodes
 | |
|                 $nodes_displayed = 256;
 | |
|             }
 | |
| 
 | |
|         // get nodes for this subnetview and implement the values into the array
 | |
|             // build query
 | |
|             $query = "SELECT
 | |
|                     asset.asset_name,
 | |
|                     assetclassgroup.assetclassgroup_color,
 | |
|                     node.node_id,
 | |
|                     node.node_ip
 | |
|                 FROM
 | |
|                     asset,
 | |
|                     assetclass,
 | |
|                     assetclassgroup,
 | |
|                     node
 | |
|                 WHERE
 | |
|                     node.node_ip IN ('".implode("','",array_keys($subnet))."')
 | |
|                     AND node.subnet_id='$subnet_id'
 | |
|                     AND asset.asset_id=node.asset_id
 | |
|                     AND assetclass.assetclass_id=asset.assetclass_id
 | |
|                     AND assetclassgroup.assetclassgroup_id=assetclass.assetclassgroup_id";
 | |
| 
 | |
|             // run query
 | |
|             $nodes = $db->db_select($query);
 | |
| 
 | |
|             // count results
 | |
|             $node_counter = count($nodes);
 | |
| 
 | |
|             // any nodes?
 | |
|             if ($node_counter>0) {
 | |
|                 // get objects
 | |
|                 foreach($nodes AS $node) {
 | |
|                     // add node-values to ip in subnet-array
 | |
|                     $subnet[$node['node_ip']] = $node;
 | |
| 
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|         // replace ip's in subnet-array (if necessary)
 | |
|             // check for subnet address
 | |
|             if(array_key_exists($subnet_address, $subnet)) {
 | |
|                 // replace
 | |
|                 $subnet[$subnet_address] = array("subnet_address");
 | |
|             }
 | |
| 
 | |
|             // check for broadcast address
 | |
|             if(array_key_exists($broadcast_address, $subnet)) {
 | |
|                 // replace
 | |
|                 $subnet[$broadcast_address] = array("broadcast_address");
 | |
|             }
 | |
| 
 | |
|                         $dhcpstart = 0;
 | |
|                         if ($subnet_dhcpstart && $subnet_dhcpend) {
 | |
|                             $dhcpstart = ip2long($subnet_dhcpstart);
 | |
|                             $dhcpend = ip2long($subnet_dhcpend);
 | |
|                         }
 | |
| 
 | |
|         // loop subnet-array and send to template
 | |
|             // start counter
 | |
| //            $i=1;
 | |
|             // loop subnet-array
 | |
|             foreach($subnet AS $node_ip => $node) {
 | |
| 
 | |
|                 // make new line?
 | |
| //              if(($i%$_SESSION['suser_imagecount']==0 && $i!=$nodes_displayed) ? $tr="</tr><tr>" : $tr="");
 | |
| 
 | |
|                                 // check if node-ip in DHCP-area
 | |
|                                 $subnet[$node_ip]["dynamic"] = False;
 | |
|                                 if ($dhcpstart > 0) {
 | |
|                                     $ipval = ip2long($node_ip);
 | |
|                                     if (($ipval >= $dhcpstart) and ($ipval <= $dhcpend)) {
 | |
|                                         $subnet[$node_ip]["dynamic"] = True;
 | |
|                                     }
 | |
|                                 }
 | |
| 
 | |
|                                 // check node
 | |
|                 if (empty($node)) {
 | |
|                     // empty node to tpl
 | |
|                     $subnet[$node_ip]["url"] = 'assigniptonode.php?subnet_id=' . $subnet_id . '&node_ip='. $node_ip;
 | |
|                     $subnet[$node_ip]["remotetext"] = $node_ip;
 | |
|                                         if ($subnet[$node_ip]["dynamic"]) {
 | |
|                                             $subnet[$node_ip]["assetclassgroup_color"] = $config_color_dynamic;
 | |
|                                         } else {
 | |
|                                             $subnet[$node_ip]["assetclassgroup_color"] = $config_color_unused;
 | |
|                                         }
 | |
| 
 | |
|         } else if (array_key_exists(0, $node) && $node[0]=="subnet_address") {
 | |
|                     // subnet address to tpl
 | |
|                     $subnet[$node_ip]["url"] = "";
 | |
|                     $subnet[$node_ip]["remotetext"] = $node_ip . ' ' . $lang['lang_subnet_subnetaddress'];
 | |
|                     $subnet[$node_ip]["assetclassgroup_color"] = $config_color_blocked;
 | |
|                 } else if (array_key_exists(0, $node) && $node[0]=="broadcast_address") {
 | |
|                     // broadcast address to tpl
 | |
|                     $subnet[$node_ip]["url"] = "";
 | |
|                     $subnet[$node_ip]["remotetext"] = $node_ip . ' ' . $lang['lang_subnet_broadcastaddress'];
 | |
|                     $subnet[$node_ip]["assetclassgroup_color"] = $config_color_blocked;
 | |
|                 } else {
 | |
|                     // node to tpl
 | |
|                     $subnet[$node_ip]["url"] = 'nodeview.php?node_id=' . $node['node_id'];
 | |
|                     $subnet[$node_ip]["remotetext"] = $node_ip . ' ' . $node['asset_name'];
 | |
|                     $subnet[$node_ip]["assetclassgroup_color"] = $node['assetclassgroup_color'];
 | |
|                 }
 | |
| 
 | |
| 
 | |
|                 // update counter
 | |
| //              $i++;
 | |
|             }
 | |
| 
 | |
|             $smarty->assign("subnet", $subnet);
 | |
|             $smarty->assign("imagewrap", $_SESSION['suser_imagecount']);
 | |
| 
 | |
|     // setup vlan
 | |
|         // build query
 | |
|         $query = "SELECT
 | |
|                 vlan.vlan_id AS vlan_id,
 | |
|                 vlan.vlan_name AS vlan_name,
 | |
|                 vlan.vlan_number AS vlan_number
 | |
|             FROM
 | |
|                 subnetvlan,
 | |
|                 vlan
 | |
|             WHERE
 | |
|                 subnetvlan.subnet_id=" . $subnet_id . "
 | |
|                 AND vlan.vlan_id=subnetvlan.vlan_id
 | |
|             ORDER BY
 | |
|                 vlan.vlan_name";
 | |
| 
 | |
|         // run query
 | |
|         $vlans = $db->db_select($query);
 | |
|         $smarty->assign("vlans", $vlans);
 | |
| 
 | |
|     // setup location
 | |
|         // build query
 | |
|         $query = "SELECT
 | |
|                 location.location_id,
 | |
|                 location.location_name
 | |
|             FROM
 | |
|                 location
 | |
|             LEFT JOIN
 | |
|                 subnetlocation
 | |
|             ON
 | |
|                 subnetlocation.location_id=location.location_id
 | |
|             WHERE
 | |
|                 subnetlocation.subnet_id=". $subnet_id . "
 | |
|             ORDER BY
 | |
|                 location.location_name";
 | |
| 
 | |
|         // run query
 | |
|         $locations = $db->db_select($query);
 | |
|         $smarty->assign("locations", $locations);
 | |
| 
 | |
|     // setup assetclassgroup
 | |
|         // build query
 | |
|         $query = "SELECT
 | |
|                 assetclassgroup_id AS id,
 | |
|                 assetclassgroup_name AS name,
 | |
|                 assetclassgroup_color  AS color,
 | |
|                 COUNT(assetclass_id) AS counter
 | |
|             FROM subnet
 | |
|                 LEFT JOIN node USING (subnet_id)
 | |
|                 LEFT JOIN asset USING (asset_id)
 | |
|                 LEFT JOIN assetclass USING (assetclass_id)
 | |
|                 LEFT JOIN assetclassgroup USING (assetclassgroup_id)
 | |
|             WHERE subnet_id=" . $subnet_id . "
 | |
|             GROUP BY assetclass_id
 | |
|             ORDER BY counter DESC";
 | |
| 
 | |
|         // run query
 | |
|         $assetclassgroups = $db->db_select($query);
 | |
|         $smarty->assign("assetclassgroups", $assetclassgroups);
 | |
| 
 | |
|     // end page
 | |
|         // output
 | |
|         $smarty->display("subnetview.tpl");
 | |
| 
 | |
|         // end output
 | |
|         include("footer.php");
 | |
| ?>
 |