Help
RSS
API
Feed
Maltego
Contact
Domain > www.imfed.ateneo.co
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-05-30
3.212.131.67
(
ClassC
)
2026-01-04
35.171.128.110
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyDate: Sun, 04 Jan 2026 11:56:03 GMTServer: ApacheLocation: https://www.imfed.ateneo.co/Content-Length: 276Content-Type: text/html; charsetiso-8859-1 !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01//EN http://www.w3.org/TR/html4/strict.dtd>html>head>title>301 Moved Permanently/title>/head>body>h1>Moved Permanently/h1>p>The document has moved a hrefhttps://www.imfed.ateneo.co/>here/a>./p>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Sun, 04 Jan 2026 11:56:03 GMTServer: ApacheSet-Cookie: PHPSESSIDm6g4gtok38oon2rlodrpvj0uti; path/Expires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidatePragma: no-cacheVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/html; charsetUTF-8 !DOCTYPE html>html langes>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Dashboard IA - Análisis de Datos/title> !-- Bootstrap 5 --> link hrefhttps://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css relstylesheet> !-- Font Awesome --> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css> !-- Chart.js --> script srchttps://cdn.jsdelivr.net/npm/chart.js>/script> style> .query-box { background-color: #f8f9fa; border-radius: 10px; padding: 20px; } .chart-container { position: relative; height: 400px; margin-bottom: 20px; } .suggestion-item { cursor: pointer; padding: 8px 15px; transition: background-color 0.2s; } .suggestion-item:hover { background-color: #e9ecef; } .insight-card { border-left: 4px solid #0d6efd; } .loading-spinner { display: none; } .stat-card { transition: transform 0.3s; } .stat-card:hover { transform: translateY(-5px); } /style>/head>body> nav classnavbar navbar-expand-lg stylebackground-color: #000066; color: white;> div classcontainer> a classnavbar-brand text-white href#> i classfas fa-brain me-2>/i> Dashboard IMFeD /a> /div> /nav> div classcontainer-fluid mt-4> div classrow> !-- Columna izquierda (25%) - Gráficos iniciales --> div classcol-md-3> div classrow mb-3> div classcol-12> div classcard stat-card mb-3 stylebackground-color: #FF3399; color: white; border: none;> div classcard-body> h5 classcard-title>Total Usuarios/h5> h2>1,918/h2> /div> /div> /div> div classcol-12> div classcard stat-card mb-3 stylebackground-color: #3399FF; color: white; border: none;> div classcard-body> h5 classcard-title>Total Cursos/h5> h2>8/h2> /div> /div> /div> /div> div classcard mb-4 styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-header stylebackground-color: #000066; color: white;> h5 classmb-0>Usuarios por País/h5> /div> div classcard-body> div classchart-container> canvas idcountryChart>/canvas> /div> /div> /div> /div> !-- Columna central (50%) - Consulta y resultados --> div classcol-md-6> !-- Consulta por lenguaje natural --> div classcard mb-4 styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-body query-box stylebackground-color: #f8f9fa;> h5 classcard-title mb-3 stylecolor: #000066;> i classfas fa-robot me-2 stylecolor: #FF3399;>/i> Consulta por lenguaje natural /h5> div classinput-group mb-3> input typetext idai-query classform-control form-control-lg placeholderEj: ¿Cuántos usuarios de Colombia completaron el curso en abril? aria-labelConsulta IA> button classbtn typebutton idquery-button stylebackground-color: #FF3399; color: white;> i classfas fa-search>/i> Consultar /button> /div> div classposition-relative> div idquery-suggestions classcard position-absolute w-100 shadow-sm styledisplay: none; z-index: 1000;> div classcard-body p-0> !-- Aquí se mostrarán las sugerencias --> /div> /div> /div> div classd-flex justify-content-between align-items-center> small classtext-muted>Haz preguntas sobre usuarios, cursos y progreso en lenguaje natural/small> div classspinner-border loading-spinner rolestatus idloading-spinner stylecolor: #FF3399;> span classvisually-hidden>Cargando.../span> /div> /div> /div> /div> !-- Resultados de la consulta IA --> div idai-results classmb-4 styledisplay: none;> div classcard styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-header stylebackground-color: #000066; color: white;> h5 classmb-0>Resultados de la consulta/h5> /div> div classcard-body> !-- Insights de los datos --> div classrow mb-4 idinsights-container> !-- Los insights se cargarán aquí dinámicamente --> /div> !-- Visualización generada por IA --> div classcard mb-4 styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-header d-flex justify-content-between align-items-center stylebackground-color: #f8f9fa; color: #000066;> h5 classmb-0 idvisualization-title>Visualización/h5> div> button classbtn btn-sm idexport-csv stylebackground-color: #3399FF; color: white;> i classfas fa-download me-1>/i> Exportar CSV /button> /div> /div> div classcard-body> div classchart-container styleheight: 350px;> canvas idaiGeneratedChart>/canvas> /div> /div> /div> !-- Tabla de datos --> div classcard styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-header stylebackground-color: #f8f9fa; color: #000066;> h5 classmb-0>Datos detallados/h5> /div> div classcard-body> div classtable-responsive> table classtable table-striped table-hover idresults-table> thead stylebackground-color: #000066; color: white;> tr> !-- Los encabezados se generarán dinámicamente --> /tr> /thead> tbody> !-- Los datos se generarán dinámicamente --> /tbody> /table> /div> /div> /div> /div> /div> /div> /div> !-- Columna derecha (25%) - Consultas sugeridas y historial --> div classcol-md-3> div classrow mb-3> div classcol-12> div classcard stat-card mb-3 stylebackground-color: #FFC107; color: #000; border: none;> div classcard-body> h5 classcard-title>Cursos Completados/h5> h2>3,736/h2> /div> /div> /div> div classcol-12> div classcard stat-card mb-3 stylebackground-color: #28a745; color: white; border: none;> div classcard-body> h5 classcard-title>Países Activos/h5> h2>15/h2> /div> /div> /div> /div> !-- Consultas sugeridas --> div classcard mb-4 styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-header stylebackground-color: #FF3399; color: white;> h6 classmb-0>Consultas sugeridas/h6> /div> div classcard-body p-0> div classlist-group list-group-flush> div classsuggestion-item list-group-item list-group-item-action onclicksetQuery(¿Cuántos usuarios tenemos registrados de Colombia en mayo de 2024?)> i classfas fa-users me-2 stylecolor: #3399FF;>/i> Usuarios por país y período /div> div classsuggestion-item list-group-item list-group-item-action onclicksetQuery(Dame el listado de usuarios de México con su teléfono y avance en los cursos)> i classfas fa-address-book me-2 stylecolor: #28a745;>/i> Datos de contacto y progreso /div> div classsuggestion-item list-group-item list-group-item-action onclicksetQuery(¿Qué usuarios tienen más del 80% de progreso en los cursos?)> i classfas fa-chart-line me-2 stylecolor: #3399FF;>/i> Usuarios con alto progreso /div> div classsuggestion-item list-group-item list-group-item-action onclicksetQuery(¿Cuál es la especialidad médica con más usuarios registrados?)> i classfas fa-user-md me-2 stylecolor: #FF3399;>/i> Usuarios por especialidad /div> div classsuggestion-item list-group-item list-group-item-action onclicksetQuery(Compara la cantidad de usuarios registrados esta semana con la semana pasada)> i classfas fa-chart-bar me-2 stylecolor: #FFC107;>/i> Comparación temporal /div> div classsuggestion-item list-group-item list-group-item-action onclicksetQuery(Muestra los emails de todos los usuarios de Argentina que no han avanzado en ningún curso)> i classfas fa-envelope me-2 stylecolor: #28a745;>/i> Contactos sin actividad /div> /div> /div> /div> !-- Historial de consultas --> div classcard mb-4 styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-header d-flex justify-content-between align-items-center stylebackground-color: #000066; color: white;> h6 classmb-0>Historial de consultas/h6> button classbtn btn-sm onclicklocalStorage.removeItem(queryHistory); queryHistory ; updateHistoryUI(); stylebackground-color: #FF3399; color: white;> i classfas fa-trash-alt>/i> Limpiar /button> /div> div classcard-body p-0> div idquery-history classlist-group list-group-flush> !-- Aquí se mostrará el historial --> /div> /div> /div> !-- Gráfico de completitud --> div classcard mb-4 styleborder-color: #ddd; border-radius: 10px; overflow: hidden;> div classcard-header stylebackground-color: #000066; color: white;> h5 classmb-0>Estado de Completitud/h5> /div> div classcard-body> div classchart-container> canvas idcompletionChart>/canvas> /div> /div> /div> /div> /div> /div> footer classpy-4 mt-5 stylebackground-color: #000066; color: white;> div classcontainer text-center> p classmb-0>© 2025 IMFeD. Todos los derechos reservados./p> /div> /footer>/body> !-- Bootstrap JS --> script srchttps://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js>/script> script> // Cargar los gráficos iniciales document.addEventListener(DOMContentLoaded, function() { const savedHistory localStorage.getItem(queryHistory); if (savedHistory) { try { queryHistory JSON.parse(savedHistory); updateHistoryUI(); } catch (e) { console.error(Error al cargar historial:, e); } } // Datos de usuarios por país const countryData {pais:Argentina,total:500},{pais:Colombia,total:435},{pais:Ecuador,total:230},{pais:M\u00e9xico,total:202},{pais:Guatemala,total:106},{pais:Brasil,total:86},{pais:Chile,total:81},{pais:El Salvador,total:69},{pais:Nicaragua,total:62},{pais:Panam\u00e1,total:49},{pais:Honduras,total:36},{pais:Costa Rica,total:33},{pais:Rep\u00fablica Dominicana,total:15},{pais:Otro,total:11},{pais:Per\u00fa,total:3}; const countryLabels countryData.map(item > item.pais); const countryValues countryData.map(item > item.total); // Crear gráfico de países const countryChart new Chart( document.getElementById(countryChart), { type: bar, data: { labels: countryLabels, datasets: { label: Número de usuarios, data: countryValues, backgroundColor: rgba(54, 162, 235, 0.7), borderColor: rgba(54, 162, 235, 1), borderWidth: 1 } }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: top, }, title: { display: true, text: Distribución de usuarios por país } }, scales: { y: { beginAtZero: true } } } } ); // Datos de completitud de cursos const completionData {estado_curso:Completado,total:3736},{estado_curso:M\u00e1s del 50%,total:97},{estado_curso:Menos del 50%,total:257},{estado_curso:Sin avance,total:170}; const completionLabels completionData.map(item > item.estado_curso); const completionValues completionData.map(item > item.total); // Colores para el gráfico de pie const backgroundColors rgba(46, 204, 113, 0.7), rgba(52, 152, 219, 0.7), rgba(243, 156, 18, 0.7), rgba(231, 76, 60, 0.7) ; // Crear gráfico de completitud const completionChart new Chart( document.getElementById(completionChart), { type: pie, data: { labels: completionLabels, datasets: { label: Usuarios, data: completionValues, backgroundColor: backgroundColors, borderColor: backgroundColors.map(color > color.replace(0.7, 1)), borderWidth: 1 } }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: right, }, title: { display: true, text: Estado de cursos } } } } ); }); // Variables globales let currentChart null; let currentQueryData null; // Función para establecer la consulta desde las sugerenciasfunction setQuery(query) { document.getElementById(ai-query).value query; document.getElementById(query-button).click();} // Procesamiento de consultas en lenguaje natural document.getElementById(query-button).addEventListener(click, function() { const query document.getElementById(ai-query).value.trim(); if (query ) { alert(Por favor, ingresa una consulta); return; } // Añadir a historial addToHistory(query); // Mostrar spinner de carga document.getElementById(loading-spinner).style.display inline-block; // Ocultar resultados anteriores document.getElementById(ai-results).style.display none; // Realizar la petición AJAX fetch(/dashboard/processQuery, { method: POST, headers: { Content-Type: application/x-www-form-urlencoded, }, body: query + encodeURIComponent(query) }) .then(response > response.json()) .then(data > { // Ocultar spinner de carga document.getElementById(loading-spinner).style.display none; if (!data.success) { let msg ❌ Error: + data.message; if (typeof data.sql ! undefined && data.sql) { msg + \n\n🔎 Consulta generada:\n + data.sql; } else { msg + \n\n⚠️ No se recibió la consulta SQL en la respuesta.; } console.warn(📋 Respuesta de error completa:, data); alert(msg); return;} // Guardar los datos de la consulta currentQueryData data; // Mostrar sección de resultados document.getElementById(ai-results).style.display block; // Renderizar insights renderInsights(data.insights); // Renderizar visualización renderVisualization(data.visualization, query); // Renderizar tabla de datos renderDataTable(data.data); // Desplazarse a los resultados document.getElementById(ai-results).scrollIntoView({ behavior: smooth }); }) .catch(error > { console.error(Error:, error); document.getElementById(loading-spinner).style.display none; alert(Error al procesar la consulta. Por favor, intenta de nuevo.); }); }); // Evento para presionar Enter en el campo de consulta document.getElementById(ai-query).addEventListener(keypress, function(event) { if (event.key Enter) { document.getElementById(query-button).click(); } }); // Agregar auto-sugerencias mientras se escribedocument.getElementById(ai-query).addEventListener(input, function(e) { const query e.target.value.trim().toLowerCase(); if (query.length 3) return; // Verificar si coincide con alguna sugerencia anterior const matchingQueries queryHistory.filter(q > q.toLowerCase().includes(query) && q.toLowerCase() ! query ).slice(0, 3); // Mostrar sugerencias const suggestionsContainer document.getElementById(query-suggestions); if (!suggestionsContainer) return; suggestionsContainer.innerHTML ; if (matchingQueries.length > 0) { suggestionsContainer.style.display block; matchingQueries.forEach(suggestion > { const item document.createElement(div); item.className suggestion-item py-2; item.textContent suggestion; item.onclick function() { setQuery(suggestion); suggestionsContainer.style.display none; }; suggestionsContainer.appendChild(item); }); } else { suggestionsContainer.style.display none; }});// Ocultar sugerencias al hacer clic fueradocument.addEventListener(click, function(e) { const suggestionsContainer document.getElementById(query-suggestions); if (!suggestionsContainer) return; if (!e.target.closest(#ai-query) && !e.target.closest(#query-suggestions)) { suggestionsContainer.style.display none; }}); // Renderizar insights generados por la IA function renderInsights(insights) { const container document.getElementById(insights-container); container.innerHTML ; // Verificar si los insights están vacíos if (!insights || insights.trim() ) { const col document.createElement(div); col.className col-12 mb-3; const card document.createElement(div); card.className card h-100 insight-card; const cardBody document.createElement(div); cardBody.className card-body; const icon document.createElement(i); icon.className fas fa-info-circle text-primary mb-3; icon.style.fontSize 1.5rem; const text document.createElement(p); text.className card-text; text.textContent No hay insights disponibles para esta consulta.; cardBody.appendChild(icon); cardBody.appendChild(text); card.appendChild(cardBody); col.appendChild(card); container.appendChild(col); return; } // Dividir los insights por múltiples patrones let insightsList ; // Intentar dividir por números seguidos de punto const numberPattern /(\d+\.\s+)/; if (numberPattern.test(insights)) { insightsList insights.split(numberPattern).filter(item > !numberPattern.test(item) && item.trim() ! ); } // Intentar dividir por saltos de línea else if (insights.includes(\n)) { insightsList insights.split(/\n+/).filter(item > item.trim() ! ); } // Si no hay patrón claro, tratar como un solo insight else { insightsList insights; } // Si después de la división hay demasiados fragmentos, reagruparlos if (insightsList.length > 6) { // Reagrupar en máximo 6 insights const maxInsights 6; const itemsPerInsight Math.ceil(insightsList.length / maxInsights); const regroupedInsights ; for (let i 0; i insightsList.length; i + itemsPerInsight) { regroupedInsights.push(insightsList.slice(i, i + itemsPerInsight).join( )); } insightsList regroupedInsights; } // Renderizar cada insight como una tarjeta insightsList.forEach((insight, index) > { if (insight.trim() ) return; const col document.createElement(div); col.className col-md-6 col-lg-4 mb-3; const card document.createElement(div); card.className card h-100 insight-card; const cardBody document.createElement(div); cardBody.className card-body; const icon document.createElement(i); icon.className fas fa-lightbulb text-primary mb-3; icon.style.fontSize 1.5rem; const text document.createElement(p); text.className card-text; text.textContent insight.trim(); cardBody.appendChild(icon); cardBody.appendChild(text); card.appendChild(cardBody); col.appendChild(card); container.appendChild(col); });}// Añadir función para manejar historial de consultaslet queryHistory ;const MAX_HISTORY_SIZE 10;function addToHistory(query) { // Evitar duplicados consecutivos if (queryHistory.length > 0 && queryHistory0 query) { return; } // Añadir al inicio queryHistory.unshift(query); // Limitar tamaño if (queryHistory.length > MAX_HISTORY_SIZE) { queryHistory.pop(); } // Guardar en localStorage localStorage.setItem(queryHistory, JSON.stringify(queryHistory)); // Actualizar historial visible updateHistoryUI();}function updateHistoryUI() { const historyContainer document.getElementById(query-history); if (!historyContainer) return; historyContainer.innerHTML ; queryHistory.forEach(query > { const item document.createElement(div); item.className suggestion-item; item.textContent query; item.onclick function() { setQuery(query); }; historyContainer.appendChild(item); });} // Renderizar visualización generada por la IA function renderVisualization(visualizationConfig, query) { const canvas document.getElementById(aiGeneratedChart); // Si ya existe un gráfico, destruirlo if (currentChart) { currentChart.destroy(); } // Establecer título de la visualización document.getElementById(visualization-title).textContent Visualización: + query; // Verificar si la configuración de visualización es válida if (!visualizationConfig || !visualizationConfig.type) { // Si no hay configuración válida, mostrar mensaje canvas.getContext(2d).clearRect(0, 0, canvas.width, canvas.height); const ctx canvas.getContext(2d); ctx.font 16px Arial; ctx.textAlign center; ctx.fillText(No se pudo generar una visualización para esta consulta, canvas.width / 2, canvas.height / 2); return; } try { // Aplicar opciones adicionales para mejorar la apariencia del gráfico if (!visualizationConfig.options) { visualizationConfig.options {}; } // Configuración responsiva visualizationConfig.options.responsive true; visualizationConfig.options.maintainAspectRatio false; // Mejorar la configuración de plugins if (!visualizationConfig.options.plugins) { visualizationConfig.options.plugins {}; } // Asegurar que la leyenda esté bien posicionada visualizationConfig.options.plugins.legend { position: visualizationConfig.type pie || visualizationConfig.type doughnut ? right : top, labels: { font: { size: 12 } } }; // Añadir título si no existe if (!visualizationConfig.options.plugins.title) { visualizationConfig.options.plugins.title { display: true, text: Resultados para: + query, font: { size: 16 } }; } // Mejorar el tooltip para mostrar porcentajes en gráficos circulares if (visualizationConfig.type pie || visualizationConfig.type doughnut) { if (!visualizationConfig.options.plugins.tooltip) { visualizationConfig.options.plugins.tooltip {}; } visualizationConfig.options.plugins.tooltip.callbacks { label: function(context) { const label context.label || ; const value context.raw || 0; const total context.chart.getDatasetMeta(0).total; const percentage Math.round((value / total) * 100); return `${label}: ${value} (${percentage}%)`; } }; } // Configuración específica para gráficos de barras y líneas if (visualizationConfig.type bar || visualizationConfig.type line) { if (!visualizationConfig.options.scales) { visualizationConfig.options.scales {}; } // Configurar eje Y para comenzar desde cero visualizationConfig.options.scales.y { beginAtZero: true, ticks: { precision: 0 } }; } // Crear nuevo gráfico currentChart new Chart(canvas, visualizationConfig); } catch (error) { console.error(Error al renderizar el gráfico:, error); canvas.getContext(2d).clearRect(0, 0, canvas.width, canvas.height); const ctx canvas.getContext(2d); ctx.font 16px Arial; ctx.textAlign center; ctx.fillText(Error al generar la visualización: + error.message, canvas.width / 2, canvas.height / 2); }} // Renderizar tabla de datos function renderDataTable(data) { const table document.getElementById(results-table); const thead table.querySelector(thead tr); const tbody table.querySelector(tbody); // Limpiar tabla thead.innerHTML ; tbody.innerHTML ; if (!data || data.length 0) { const emptyRow document.createElement(tr); const emptyCell document.createElement(td); emptyCell.textContent No hay datos disponibles; emptyCell.colSpan 1; emptyRow.appendChild(emptyCell); tbody.appendChild(emptyRow); return; } // Añadir encabezados const headers Object.keys(data0); headers.forEach(header > { const th document.createElement(th); th.textContent header.replace(/_/g, ).charAt(0).toUpperCase() + header.replace(/_/g, ).slice(1); thead.appendChild(th); }); // Añadir filas de datos (limitamos a 25 filas para no sobrecargar la vista) const rowsToShow data.slice(0, 25); rowsToShow.forEach(row > { const tr document.createElement(tr); headers.forEach(header > { const td document.createElement(td); td.textContent rowheader ! null ? rowheader : -; tr.appendChild(td); }); tbody.appendChild(tr); }); // Si hay más de 25 filas, mostrar un mensaje if (data.length > 25) { const infoRow document.createElement(tr); const infoCell document.createElement(td); infoCell.colSpan headers.length; infoCell.className text-center text-muted; infoCell.textContent `Mostrando 25 de ${data.length} filas. Exporta a CSV para ver todos los datos.`; infoRow.appendChild(infoCell); tbody.appendChild(infoRow); } } // Exportar a CSV document.getElementById(export-csv).addEventListener(click, function() { if (!currentQueryData || !currentQueryData.data || currentQueryData.data.length 0) { alert(No hay datos para exportar); return; } // Crear un ID único para esta consulta const queryId Date.now(); // Guardar los datos en la sesión (simulado - en la implementación real esto se haría en el servidor) sessionStorage.setItem(query_results_ + queryId, JSON.stringify(currentQueryData.data)); // Redirigir a la URL de exportación window.location.href /dashboard/exportToCSV?id + queryId; }); /script>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]