diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 8d81eef41b..2566d66e71 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,9 @@ +2011-08-18 Sergio Martin + + * extensions/snmp_explorer.php + godmode/agentes/agent_manager.php: Add extension to the agents + management to get modules from SNMP with a wizard + 2011-08-18 Miguel de Dios * include/javascript/pandora_modules.js: fixed get the parameters diff --git a/pandora_console/extensions/snmp_explorer.php b/pandora_console/extensions/snmp_explorer.php new file mode 100755 index 0000000000..fcf7381a74 --- /dev/null +++ b/pandora_console/extensions/snmp_explorer.php @@ -0,0 +1,431 @@ + $snmp) { + + $data = explode(': ',$snmp); + $keydata = explode('::',$key); + $keydata2 = explode('.',$keydata[1]); + + if(!isset($keydata2[1])) { + continue; + } + + if(array_key_exists(1,$data)){ + $interfaces[$keydata2[1]][$keydata2[0]]['type'] = $data[0]; + $interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[1]; + }else { + $interfaces[$keydata2[1]][$keydata2[0]]['type'] = ''; + $interfaces[$keydata2[1]][$keydata2[0]]['value'] = $data[0]; + } + + $interfaces[$keydata2[1]][$keydata2[0]]['oid'] = $key; + $interfaces[$keydata2[1]][$keydata2[0]]['checked'] = 0; + } + + unset($interfaces[0]); + } + + if($create_modules) { + $interfaces = json_decode(html_entity_decode(get_parameter_post("snmp_json")), true); + $values = array(); + + if($tcp_port != ''){ + $values['tcp_port'] = $tcp_port; + } + $values['snmp_community'] = $snmp_community; + $values['ip_target'] = $ip_target; + $values['tcp_send'] = $snmp_version; + + if($snmp_version == '3') { + $values['plugin_user'] = $snmp3_auth_user; + $values['plugin_pass'] = $snmp3_auth_pass; + $values['plugin_parameter'] = $snmp3_auth_method; + $values['custom_string_1'] = $snmp3_privacy_method; + $values['custom_string_2'] = $snmp3_privacy_pass; + $values['custom_string_3'] = $snmp3_security_level; + } + + $oids = array(); + foreach($interfaces as $key => $interface) { + foreach($interface as $key2 => $module) { + $oid = get_parameter($key."-".$key2, ''); + if($oid != '') { + $interfaces[$key][$key2]['checked'] = 1; + $oids[$key][] = $interfaces[$key][$key2]['oid']; + } + else { + $interfaces[$key][$key2]['checked'] = 0; + } + } + } + $modules = get_parameter('module'); + $id_snmp = get_parameter('id_snmp'); + + if($id_snmp == false) { + ui_print_error_message (__('No modules selected')); + $id_snmp = array(); + } + + if(agents_get_name($id_agent) == false) { + ui_print_error_message (__('No agent selected or the agent does not exist')); + $id_snmp = array(); + } + + $result = false; + + foreach($id_snmp as $id) { + foreach($modules as $module) { + + $oid_array = explode('.',$module); + $oid_array[count($oid_array)-1] = $id; + $oid = implode('.',$oid_array); + + // Get the name + $name_array = explode('::',$oid_array[0]); + $name = $name_array[1] . "_" . $interfaces[$id]['ifName']['value']; + + // Clean the name + $name = str_replace ( "\"" , "" , $name); + + // Proc moduletypes + if (preg_match ( "/Status/", $name_array[1])) + $module_type = 18; + + elseif (preg_match ( "/Present/", $name_array[1])) + $module_type = 18; + + elseif (preg_match ( "/PromiscuousMode/", $name_array[1])) + $module_type = 18; + + // String moduletypes + elseif (preg_match ( "/Alias/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Address/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Name/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Specific/", $name_array[1])) + $module_type = 17; + + elseif (preg_match ( "/Descr/", $name_array[1])) + $module_type = 17; + + // Specific counters (ends in s) + elseif (preg_match ( "/s$/", $name_array[1])) + $module_type = 16; + + // Otherwise, numeric + else + $module_type = 15; + + $values['id_tipo_modulo'] = $module_type; + $values['descripcion'] = "(" . $ip_target." - ".$name . ") " . $interfaces[$id]['ifDescr']['value']; + + $values['snmp_oid'] = $oid; + $values['id_modulo'] = 2; + + $result = modules_create_agent_module ($id_agent, $name, $values); + } + } + + ui_print_result_message ($result, __('Successfully modules created'), __('Could not be created')); + } + + // Create the interface list for the interface + $interfaces_list = array(); + foreach($interfaces as $interface){ + /*foreach($interface as $key => $interf) { + echo $key.": ".$interf['value']."
"; + }*/ + + // Get the interface name, removing " " characters and avoid "blank" interfaces + if (!isset($interface['ifName']) || $interface['ifName']['value'] == "") + continue; + + $interfaces_list[$interface['ifIndex']['value']] = str_replace ( "\"" , "" , $interface['ifName']['value']); + + } + + echo ''; + echo "
"; + + $table->width = '98%'; + + $table->valign[0] = 'top'; + $table->valign[1] = 'top'; + + $table->data[0][0] = '' . __('Target IP') . ''; + $table->data[0][1] = html_print_input_text ('ip_target', $ip_target, '', 15, 60, true); + + $table->data[0][2] = '' . __('Port') . ''; + $table->data[0][3] = html_print_input_text ('tcp_port', $tcp_port, '', 5, 20, true); + + $snmp_versions['1'] = 'v. 1'; + $snmp_versions['2'] = 'v. 2'; + $snmp_versions['2c'] = 'v. 2c'; + $snmp_versions['3'] = 'v. 3'; + + $table->data[1][0] = '' . __('SNMP community') . ''; + $table->data[1][1] = html_print_input_text ('snmp_community', $snmp_community, '', 15, 60, true); + + $table->data[1][2] = '' . _('SNMP version') . ''; + $table->data[1][3] = html_print_select ($snmp_versions, 'snmp_version', $snmp_version, '', '', '', true, false, false, ''); + + $table->data[1][3] .= ''; + html_print_input_hidden('snmpwalk', 1); + + html_print_table($table); + + unset($table); + + //SNMP3 OPTIONS + $table->width = '98%'; + + $table->valign[0] = 'top'; + $table->valign[1] = 'top'; + + $table->data[2][1] = ''.__('Auth user').''; + $table->data[2][2] = html_print_input_text ('snmp3_auth_user', $snmp3_auth_user, '', 15, 60, true); + $table->data[2][3] = ''.__('Auth password').''; + $table->data[2][4] = html_print_input_text ('snmp3_auth_pass', $snmp3_auth_pass, '', 15, 60, true); + $table->data[2][4] .= html_print_input_hidden('active_snmp_v3', 0, true); + + $table->data[5][0] = ''.__('Privacy method').''; + $table->data[5][1] = html_print_select(array('DES' => __('DES'), 'AES' => __('AES')), 'snmp3_privacy_method', $snmp3_privacy_method, '', '', '', true); + $table->data[5][2] = ''.__('privacy pass').''; + $table->data[5][3] = html_print_input_text ('snmp3_privacy_pass', $snmp3_privacy_pass, '', 15, 60, true); + + $table->data[6][0] = ''.__('Auth method').''; + $table->data[6][1] = html_print_select(array('MD5' => __('MD5'), 'SHA' => __('SHA')), 'snmp3_auth_method', $snmp3_auth_method, '', '', '', true); + $table->data[6][2] = ''.__('Security level').''; + $table->data[6][3] = html_print_select(array('noAuthNoPriv' => __('Not auth and not privacy method'), + 'authNoPriv' => __('Auth and not privacy method'), 'authPriv' => __('Auth and privacy method')), 'snmp3_security_level', $snmp3_security_level, '', '', '', true); + + if($snmp_version == 3) { + echo '
'; + }else { + echo ''; + + echo "
"; + echo ''; + html_print_submit_button(__('SNMP Walk'), 'snmp_walk', false, array('class' => 'sub next')); + echo "
"; + + if($snmpwalk && !$snmpis) { + echo ''.__('Unable to do SNMP walk').''; + } + + unset($table); + + echo ""; + + echo ""; + echo ""; + + if(!empty($interfaces_list)){ + echo ''; + echo ''; + echo "
"; + + html_print_input_hidden('snmp_json', htmlentities(json_encode($interfaces))); + html_print_input_hidden('create_modules', 1); + html_print_input_hidden('ip_target', $ip_target); + html_print_input_hidden('tcp_port', $tcp_port); + html_print_input_hidden('snmp_community', $snmp_community); + html_print_input_hidden('snmp_version', $snmp_version); + html_print_input_hidden('snmp3_auth_user', $snmp3_auth_user); + html_print_input_hidden('snmp3_auth_pass', $snmp3_auth_pass); + html_print_input_hidden('snmp3_auth_method', $snmp3_auth_method); + html_print_input_hidden('snmp3_privacy_method', $snmp3_privacy_method); + html_print_input_hidden('snmp3_privacy_pass', $snmp3_privacy_pass); + html_print_input_hidden('snmp3_security_level', $snmp3_security_level); + + $table->width = '98%'; + + $table->valign[0] = 'top'; + $table->valign[1] = 'top'; + + //Agent selector + $table->data[0][0] = ''.__('Interfaces').''; + $table->data[0][1] = ''; + $table->data[0][2] = ''.__('Modules').''; + + $table->data[1][0] = html_print_select ($interfaces_list, 'id_snmp[]', 0, false, '', '', true, true, true, '', false, 'width:200px;'); + $table->data[1][1] = html_print_image('images/darrowright.png', true); + $table->data[1][2] = html_print_select (array (), 'module[]', 0, false, '', 0, true, true, true, '', false, 'width:200px;'); + $table->data[1][2] .= html_print_input_hidden('agent', $id_agent, true); + + html_print_table($table); + + echo "
"; + html_print_submit_button(__('Create modules'), '', false, array('class' => 'sub add')); + echo "
"; + unset($table); + + echo "
"; + echo '
'; + } + + ui_require_jquery_file ('pandora.controls'); + ui_require_jquery_file ('ajaxqueue'); + ui_require_jquery_file ('bgiframe'); + ui_require_jquery_file ('autocomplete'); + +// OJO CON ESTO... debe funcionar en la open ! +// ui_require_javascript_file ('pandora_snmp', ENTERPRISE_DIR.'/include/javascript/'); + +?> + + + diff --git a/pandora_console/godmode/agentes/agent_manager.php b/pandora_console/godmode/agentes/agent_manager.php index f0d809e6c8..309134b544 100644 --- a/pandora_console/godmode/agentes/agent_manager.php +++ b/pandora_console/godmode/agentes/agent_manager.php @@ -49,6 +49,37 @@ if (is_ajax ()) { return; } + $get_modules_json_for_multiple_snmp = (bool) get_parameter("get_modules_json_for_multiple_snmp", 0); + if ($get_modules_json_for_multiple_snmp) { + $idSNMP = get_parameter('id_snmp'); + $snmp = json_decode(html_entity_decode(get_parameter('snmp_json')),true); + + $oid_snmp = array(); + $out = false; + foreach($idSNMP as $id) { + foreach($snmp[$id] as $key => $value){ + + // Check if it has "ifXXXX" syntax and skip it + if (! preg_match ( "/if/", $key)) { + continue; + } + + $oid_snmp[$value['oid']] = $key; + } + + if($out === false){ + $out = $oid_snmp; + } + else{ + $out = array_intersect($out,$oid_snmp); + } + + $oid_snmp = array(); + } + + echo json_encode($out); + } + return; } // Load global vars