<?php // Pandora FMS - http://pandorafms.com // ================================================== // Copyright (c) 2005-2011 Artica Soluciones Tecnologicas // Please see http://pandorafms.org for full contribution list // 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; version 2 // 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. $id_agente = get_parameter ("id_agente"); // This extension is usefull only if the agent has associated IP $address = agents_get_address($id_agente); if (!empty($address) || empty($id_agente)) { extensions_add_opemode_tab_agent ('network_tools','Network Tools','extensions/net_tools/nettool.png',"main_net_tools", "v1r1", 'AW'); } function whereis_the_command ($command) { global $config; if (isset($config['network_tools_config'])) { $network_tools_config = json_decode($config['network_tools_config'], true); $traceroute_path = $network_tools_config['traceroute_path']; $ping_path = $network_tools_config['ping_path']; $nmap_path = $network_tools_config['nmap_path']; $dig_path = $network_tools_config['dig_path']; $snmpget_path = $network_tools_config['snmpget_path']; switch ($command) { case 'traceroute': if (!empty($traceroute_path)) return $traceroute_path; break; case 'ping': if (!empty($ping_path)) return $ping_path; break; case 'nmap': if (!empty($nmap_path)) return $nmap_path; break; case 'dig': if (!empty($dig_path)) return $dig_path; break; case 'snmpget': if (!empty($snmpget_path)) return $snmpget_path; break; } } ob_start(); system('whereis '. $command); $output = ob_get_clean(); $result = explode(':', $output); $result = trim($result[1]); if ( empty($result)) { return NULL; } $result = explode(' ', $result); $fullpath = trim($result[0]); if (! file_exists($fullpath)) { return NULL; } return $fullpath; } function main_net_tools () { $id_agente = get_parameter ("id_agente"); $principal_ip = db_get_sql ("SELECT direccion FROM tagente WHERE id_agente = $id_agente"); $list_address = db_get_all_rows_sql ("select id_a from taddress_agent where id_agent = " . $id_agente); foreach ($list_address as $address) { $ids []= join(",",$address); } $ids_address = implode(",",$ids); $ips = db_get_all_rows_sql ("select ip from taddress where id_a in (" . $ids_address . ")"); if ($ips == "") { echo "<div class='error' style='margin-top:5px'>" . __('The agent hasn\'t got IP') . "</div>"; return; } echo " <script type='text/javascript'> function mostrarColumns(ValueSelect) { value = ValueSelect.value; if (value == 3) { $('netToolTable').css('width','100%'); $('#snmpcolumn').show(); } else { $('netToolTable').css('width','100%'); $('#snmpcolumn').hide(); } } </script>"; echo "<div>"; echo "<form name='actionbox' method='post'>"; echo "<table class='databox filters' width=100% id=netToolTable>"; echo "<tr><td>"; echo __("Operation"); ui_print_help_tip( __('You can set the command path in the menu Administration -> Extensions -> Config Network Tools')); echo "</td><td>"; echo "<select name='operation' onChange='mostrarColumns(this);'>"; echo "<option value='1'>" . __("Traceroute"); echo "<option value='2'>" . __("Ping host & Latency"); echo "<option value='3'>" . __("SNMP Interface status"); echo "<option value='4'>" . __("Basic TCP Port Scan"); echo "<option value='5'>" . __("DiG/Whois Lookup"); echo "</select>"; echo "</td>"; echo "<td>"; echo __("IP address"); echo "</td><td>"; echo "<select name='select_ips'>"; foreach ($ips as $ip) { if ($ip['ip'] == $principal_ip) { echo "<option value='". $ip['ip'] ."' selected = 'selected'>" . $ip['ip']; } else { echo "<option value='". $ip['ip'] ."'>" . $ip['ip']; } } echo "</select>"; echo "</td>"; echo "<td id='snmpcolumn' style=\"display:none;\">"; echo __("SNMP Community") . " "; echo "<input name=community type=text value='public'>"; echo "</td><td>"; echo "<input style='margin:0px;' name=submit type=submit class='sub next' value='".__('Execute')."'>"; echo "</td>"; echo "</tr></table>"; echo "</form>"; $operation = get_parameter ("operation", 0); $community = get_parameter ("community", "public"); $ip = get_parameter("select_ips"); if(!validate_address($ip)){ ui_print_error_message(__('The ip or dns name entered cannot be resolved')); } else{ switch($operation) { case 1: $traceroute = whereis_the_command ('traceroute'); if (empty($traceroute)) { ui_print_error_message(__('Traceroute executable does not exist.')); } else { echo "<h3>".__("Traceroute to "). $ip. "</h3>"; echo "<pre>"; echo system ("$traceroute $ip"); echo "</pre>"; } break; case 2: $ping = whereis_the_command ('ping'); if (empty($ping)) { ui_print_error_message(__('Ping executable does not exist.')); } else { echo "<h3>" . __("Ping to %s", $ip) . "</h3>"; echo "<pre>"; echo system ("$ping -c 5 $ip"); echo "</pre>"; } break; case 4: $nmap = whereis_the_command ('nmap'); if (empty($nmap)) { ui_print_error_message(__('Nmap executable does not exist.')); } else { echo "<h3>".__("Basic TCP Scan on "). $ip. "</h3>"; echo "<pre>"; echo system ("$nmap -F $ip"); echo "</pre>"; } break; case 5: echo "<h3>".__("Domain and IP information for "). $ip. "</h3>"; $dig = whereis_the_command ('dig'); if (empty($dig)) { ui_print_error_message(__('Dig executable does not exist.')); } else { echo "<pre>"; echo system ("dig $ip"); echo "</pre>"; } $whois = whereis_the_command ('whois'); if (empty($whois)) { ui_print_error_message(__('Whois executable does not exist.')); } else { echo "<pre>"; echo system ("whois $ip"); echo "</pre>"; } break; case 3: echo "<h3>".__("SNMP information for "). $ip. "</h3>"; $snmpget = whereis_the_command ('snmpget'); if (empty($snmpget)) { ui_print_error_message(__('SNMPget executable does not exist.')); } else { echo "<h4>" . __("Uptime") . "</h4>"; echo "<pre>"; echo exec ("$snmpget -Ounv -v1 -c $community $ip .1.3.6.1.2.1.1.3.0 "); echo "</pre>"; echo "<h4>" . __("Device info") . "</h4>"; echo "<pre>"; echo system ("$snmpget -Ounv -v1 -c $community $ip .1.3.6.1.2.1.1.1.0 "); echo "</pre>"; echo "<h4>Interface Information</h4>"; echo "<table class=databox>"; echo "<tr><th>".__("Interface"); echo "<th>".__("Status"); $int_max = exec ("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.1.0 "); for ($ax=0; $ax < $int_max; $ax++) { $interface = exec ("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.2.1.2.$ax "); $estado = exec ("$snmpget -Oqunv -v1 -c $community $ip .1.3.6.1.2.1.2.2.1.8.$ax "); echo "<tr><td>$interface<td>$estado"; } echo "</table>"; } break; } } echo "</div>"; } function godmode_net_tools() { global $config; check_login(); if (! check_acl ($config['id_user'], 0, "PM")) { db_pandora_audit("ACL Violation", "Trying to access Profile Management"); require ("general/noaccess.php"); return; } ui_print_page_header (__('Config Network Tools')); $update_traceroute = (bool)get_parameter('update_traceroute', 0); $traceroute_path = (string)get_parameter('traceroute_path', ''); $ping_path = (string)get_parameter('ping_path', ''); $nmap_path = (string)get_parameter('nmap_path', ''); $dig_path = (string)get_parameter('dig_path', ''); $snmpget_path = (string)get_parameter('snmpget_path', ''); if ($update_traceroute) { $network_tools_config = array(); $network_tools_config['traceroute_path'] = $traceroute_path; $network_tools_config['ping_path'] = $ping_path; $network_tools_config['nmap_path'] = $nmap_path; $network_tools_config['dig_path'] = $dig_path; $network_tools_config['snmpget_path'] = $snmpget_path; $result = config_update_value('network_tools_config', json_encode($network_tools_config)); ui_print_result_message($result, __('Set the paths.'), __('Set the paths.')); } else { if (isset($config['network_tools_config'])) { $network_tools_config_output = io_safe_output($config['network_tools_config']); $network_tools_config = json_decode($network_tools_config_output, true); $traceroute_path = $network_tools_config['traceroute_path']; $ping_path = $network_tools_config['ping_path']; $nmap_path = $network_tools_config['nmap_path']; $dig_path = $network_tools_config['dig_path']; $snmpget_path = $network_tools_config['snmpget_path']; } } $table = null; $table->width = "100%"; $table->data = array(); $table->data[0][0] = __("Traceroute path"); $table->data[0][0] .= ui_print_help_tip(__('If empty, %s will search the traceroute system.', get_product_name()), true); $table->data[0][1] = html_print_input_text('traceroute_path', $traceroute_path, '', 40, 255, true); $table->data[1][0] = __("Ping path"); $table->data[1][0] .= ui_print_help_tip(__('If empty, %s will search the ping system.', get_product_name()), true); $table->data[1][1] = html_print_input_text('ping_path', $ping_path, '', 40, 255, true); $table->data[2][0] = __("Nmap path"); $table->data[2][0] .= ui_print_help_tip(__('If empty, %s will search the nmap system.', get_product_name()), true); $table->data[2][1] = html_print_input_text('nmap_path', $nmap_path, '', 40, 255, true); $table->data[3][0] = __("Dig path"); $table->data[3][0] .= ui_print_help_tip(__('If empty, %s will search the dig system', get_product_name()), true); $table->data[3][1] = html_print_input_text('dig_path', $dig_path, '', 40, 255, true); $table->data[4][0] = __("Snmpget path"); $table->data[4][0] .= ui_print_help_tip(__('If empty, %s will search the snmpget system.', get_product_name()), true); $table->data[4][1] = html_print_input_text('snmpget_path', $snmpget_path, '', 40, 255, true); echo '<form id="form_setup" method="post" >'; echo "<fieldset>"; echo "<legend>" . __('Options') . "</legend>"; html_print_input_hidden('update_traceroute', 1); html_print_table($table); echo "</fieldset>"; echo '<div class="action-buttons" style="width: '.$table->width.'">'; html_print_submit_button (__('Update'), 'update_button', false, 'class="sub upd"'); echo '</div>'; echo '</form>'; } extensions_add_godmode_menu_option (__('Config Network Tools'), 'PM'); extensions_add_godmode_function ('godmode_net_tools'); ?>