<?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"); } 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"); $ip = db_get_sql ("SELECT direccion FROM tagente WHERE id_agente = $id_agente"); if ($ip == "") { echo "<div class='error' style='margin-top:5px'>" . __('The agent hasn\'t got IP') . "</div>"; return; } echo "<div>"; echo "<form name='actionbox' method='post'>"; echo "<table class=databox width=650>"; 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>"; echo "<select name='operation'>"; 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 __("SNMP Community"); echo "<td>"; echo "<input name=community type=text value='public'>"; echo "<td>"; echo "<input name=submit type=submit class='sub next' value='".__('Execute')."'>"; echo "</tr></table>"; echo "</form>"; $operation = get_parameter ("operation", 0); $community = get_parameter ("community", "public"); 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 "). $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; 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 = 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']; } } $table = null; $table->width = "80%"; $table->data = array(); $table->data[0][0] = __("Traceroute path"); $table->data[0][0] .= ui_print_help_tip(__('If it is empty, Pandora searchs the traceroute system.'), 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 it is empty, Pandora searchs the ping system.'), 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 it is empty, Pandora searchs the nmap system.'), 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 it is empty, Pandora searchs the dig system.'), 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 it is empty, Pandora searchs the snmpget system.'), 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'); ?>