From 1117b2ade2dda123b6d28db8e0eba0ef33ae50d3 Mon Sep 17 00:00:00 2001 From: DANYDHSV Date: Thu, 27 Nov 2025 09:09:58 -0600 Subject: [PATCH] =?UTF-8?q?feat:=20agregar=20modo=20claro/oscuro=20y=20opt?= =?UTF-8?q?imizaciones=20m=C3=B3viles=20(v1.3.3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Agregar sistema de modo claro/oscuro con botón toggle (☀️/🌙) - Implementar persistencia de tema con localStorage - Optimizar tabla para móviles (3 columnas en lugar de 5) - Cambiar límite por defecto a 5 IPs para búsquedas más rápidas - Mejorar tipografía de direcciones IP (más grande y negrita) - Actualizar documentación y versión a 1.3.3 Características del modo claro/oscuro: - Botón flotante en esquina superior derecha - Paleta de colores profesional para tema claro - Transiciones suaves entre temas - Preferencia guardada automáticamente Mejoras móviles: - Columna "Tipo de IP" oculta en móviles - Badge de tipo mostrado bajo la dirección IP - Mejor distribución de espacio (40% IP, 35% Estado, 25% Acción) - Fuentes y padding optimizados Archivos modificados: - public.php: Sistema de temas, optimizaciones móviles, límite por defecto - CHANGELOG.md: entrada v1.3.3 - README.md: documentación de nuevas características - manifest.json: actualización de versión a 1.3.3 --- CHANGELOG.md | 11 + README.md | 4 +- data/plugin.log | 1313 +++++++++++++++++++++++++++++++++ manifest.json | 2 +- public.php | 165 ++++- siip-available-ips.zip | Bin 407002 -> 410715 bytes vendor/composer/installed.php | 4 +- 7 files changed, 1486 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33cd4d3..26d43c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,17 @@ y este proyecto adhiere a [Semantic Versioning](https://semver.org/lang/es/). --- +## [1.3.3] - 2025-11-27 + +### ✨ Añadido +- **Modo Claro/Oscuro**: Botón toggle (☀️/🌙) en esquina superior derecha para cambiar entre temas con persistencia en localStorage. +- **Tema Claro**: Paleta de colores profesional para uso diurno con fondo claro y textos oscuros. + +### 🔄 Mejorado +- **Tabla Móvil**: Optimizada para pantallas pequeñas ocultando columna "Tipo de IP" y mostrando el badge bajo la dirección IP (3 columnas en lugar de 5). +- **Límite por Defecto**: Cambiado a 5 IPs para búsquedas más rápidas. +- **Tipografía**: Direcciones IP más destacadas con fuente más grande y negrita. + ## [1.3.2] - 2025-11-26 ### ✨ Añadido diff --git a/README.md b/README.md index 90c5c65..5b6671e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # SIIP - Buscador de IP's Disponibles UISP -[![Version](https://img.shields.io/badge/version-1.3.2-blue.svg)](manifest.json) +[![Version](https://img.shields.io/badge/version-1.3.3-blue.svg)](manifest.json) [![UCRM](https://img.shields.io/badge/UCRM-Compatible-green.svg)](https://uisp.com/) [![UNMS](https://img.shields.io/badge/UNMS-Compatible-green.svg)](https://uisp.com/) @@ -30,10 +30,12 @@ Plugin para UISP CRM (anteriormente UCRM) que permite buscar direcciones IP disp - 🔍 **Búsqueda de IPs disponibles** por segmento de red (172.16.X.x) - 🌐 **Interfaz web moderna** con diseño responsive y atractivo +- 🌓 **Modo Claro/Oscuro** con toggle y persistencia de preferencia - 🔌 **API REST completa** para integraciones externas - 📋 **Copiar al portapapeles** con un solo clic - 🎯 **Filtrado inteligente** de IPs administrativas vs. IPs para clientes - 🏓 **Verificación por ping** para detectar dispositivos no registrados (opcional) +- 🛑 **Cancelar verificación** en cualquier momento conservando resultados parciales - 📊 **Estadísticas en tiempo real** de IPs disponibles y en uso - 🔐 **Integración nativa** con UISP CRM y UNMS - 🪝 **Soporte para webhooks** y eventos personalizados diff --git a/data/plugin.log b/data/plugin.log index c8d981d..d11d15c 100644 --- a/data/plugin.log +++ b/data/plugin.log @@ -2268,3 +2268,1316 @@ Verificando lote de 1 IPs Iniciando verificación por ping de 1 IPs (lotes de 1) Procesando lote 1/1 (1 IPs) Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary132aec8f00e4399a77e10b8f69e91fd6 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarydf4caabd97009e0f7fedb9ec8d917ea9 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarycc7f00db4803da203cd78ebc77af6ad +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary176f4c49203216046bddfad316eddfa0 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary2786e7c5fca80b01b55f2a1209f9adfd +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary463b69847040bbf05f4ffd61ed3ba052 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.37\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary3429b490c7013e2cf8015a6a1fd4b000 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.38\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarya25df5ab1a765da2a7e7ef7a24e3bb3c +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.39\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary4cd1a47a69fa3a4f81c3e3dd059d28f +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.40\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundaryfcc4e28a7feff324d8fc1550e454ed9 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.41\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundaryd39424087cdd8c3de59ed7bc0b500227 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.42\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary2b75e2b55ea1a4af519327320a65aefa +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.43\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary300d27e22ed931ac89f5337c8b35092d +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.44\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary6f37b79578cac6dd7001bdfab88ec869 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.45\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarybee6eaf6cb26f0756c752f12370afb9 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 1/1 IPs responden (0.11s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.47\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarya3d6834b32750bd3a74f107021b50136 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.48\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary43e843bc5790f750a7131e9483843eb0 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.13s) +Lote completado: 0/1 IPs responden (1.11s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFgQ6z2bAg3YuCOU0 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryaREaOiHIS6bVoEef +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryEgiP3Lgeoc9hz0Rz +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary72Ns9ghjC67vFyat +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7RYZBdV4JvGJCKJq +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryMJlCAAUFY8sXEtDL +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.37\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySRPnGp9F9KXmw7cR +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.38\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvviQB272lTFed2b6 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.39\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryCTAOVB4sKLRHlCaE +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.40\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6pN3mrTg4vxzhFSE +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.41\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryifgDiSI8CMsnX9iP +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarydPyqZetMVWtzNmN4 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryrFczlgmz2qCrJAMG +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryt3deDXsvy0ajofnQ +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7Xi1ZHWDiSOegq1Y +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQuJXLkVARzXi147B +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6mWmjgDwVAVrx79L +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"100","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAjbshDQmhlcjB0il +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 100 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.100.x - Disponibles: 123, En uso: 131 +Resultado de búsqueda: {"success":true,"ipsDisponibles":123,"ipsEnUso":131} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryV84UsTixEeLgpy3M +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.32\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryYgkMau9rMzUewJDQ +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarysq6AyQhpg0LqR2R5 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryRLFOlMlUqbfwc8Js +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryyOOIFGwaVwgBpftm +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"100","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx2Od8HyuJgXdhd2p +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 100 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.100.x - Disponibles: 123, En uso: 131 +Resultado de búsqueda: {"success":true,"ipsDisponibles":123,"ipsEnUso":131} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUFGVpKY3OuhtHgeH +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.32\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxxqAa4antEs3nNTi +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5AbTTHVSQpbO6d7B +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryV8bfH2EKSVVFjVk1 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryv4EzgyxwJVz5Qnjq +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"100","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvANFC4zvCm0BygQF +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 100 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.100.x - Disponibles: 123, En uso: 131 +Resultado de búsqueda: {"success":true,"ipsDisponibles":123,"ipsEnUso":131} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"100","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryyAHsnODjhOtDFm3l +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 100 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.100.x - Disponibles: 123, En uso: 131 +Resultado de búsqueda: {"success":true,"ipsDisponibles":123,"ipsEnUso":131} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryJG7UFzHNi17ApOBH +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.32\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarya0KyIHAdc9Qljs2d +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryIdXNiCOYBbsFXl46 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryHdF8QJH0V9feQAyC +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWfpcAA7vq8nqx0ki +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"100","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarydcb91f230442ea71952fd6783575689c +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 100 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.100.x - Disponibles: 123, En uso: 131 +Resultado de búsqueda: {"success":true,"ipsDisponibles":123,"ipsEnUso":131} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary54c71e3f28fed3535a4d5494afec6a8a +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.32\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary3f8d2e317f65e429775a02c7739045fe +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary1b14d06fae7be3ebf7d8aa3326c433df +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarybadc8f3718e3513d2cdc2ab832d8f7f7 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.100.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary1ecb9eadd68c81a98f41863c2717a87c +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary17b2a19cc4024bd2478d729042063177 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundarydf5913b04686b14885bd681e1a97dc +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary144c61ec5d6e434e90baee31f85358c +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary589b31730e8c0af1baf81e67ff47e344 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary8512948a9eabcb05711f86e2c4f59b06 +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----geckoformboundary6621e4fb187dbcb9c984f6673832255f +User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:145.0) Gecko/20100101 Firefox/145.0 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryKLILysw03YSBBhZu +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5txOkhNOvkr29uin +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryodSFmRCldVEmsEb1 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryRrjHItl6zpc1n0R9 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryziLEvS001tDZHqdB +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1Q6aoJdtXqwg9zBZ +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypgXZM5CSPyregFuY +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary8AHecqFkEBBRO36I +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryrEvJ1oSJpc1nLJRk +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary0boG6J25A6f6OKYC +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABaHKaSEekIw8NnA +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryj8QHXgXoy4IaeG9H +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryi5UXZ8BH8xHw4hmW +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5Hx5PlrgP6GrW6kc +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryCwxyjgWdhfBfg4rI +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarybS9T9sX1o3gVCDSY +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryKSPW6vnF93cMRAqv +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryeAUUFSJj9DP176si +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPqc8v6LA5lIkGCqq +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXKgVcOKPiGJJfpab +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhXDpoYX6BLh3KUG8 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryAmiSNGM4NTRaauwp +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryI1IRsSzRChkRiBnB +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryaCfBJ2c6n1uiPoA3 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryRHipAsoqSiD5MAQI +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXj1MXnCgvtlt6c2c +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3EdhT8GT8VC9xNq1 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarycFby7BzsvJb1UMYY +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryInujPhoPhIUjN8yU +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryzEGBYb1DnqhFhAqz +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: GET +POST data: [] +GET data: [] +Content-Type: +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +Acceso a la interfaz pública de búsqueda de IPs +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"search","segment":"13","verify_ping":"false"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySVU1RmVxVxABSQTH +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de búsqueda AJAX +Configuración cargada: {"ipserver":"sistema.siip.mx","hasUnmsToken":true,"hasApiToken":true} +Buscando IPs en segmento: 13 (Búsqueda inicial rápida) +URL de API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Iniciando conexión a API: https://sistema.siip.mx/nms/api/v2.1/devices/ips?suspended=false&management=true&includeObsolete=true +Respuesta HTTP: 200 +Longitud de respuesta: 48906 bytes +IPs obtenidas exitosamente: 3105 direcciones +Búsqueda de IPs en segmento 172.16.13.x - Disponibles: 153, En uso: 101 +Resultado de búsqueda: {"success":true,"ipsDisponibles":153,"ipsEnUso":101} +<<< Finalizando handler de búsqueda AJAX +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.31\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye6PP8orDgerJLfOd +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.33\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUJrPZOAIB4PAEuBA +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.34\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryDQHWo82DAkcEqlmT +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.35\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySQtNiFiOWrsL69K4 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) +=== NUEVA PETICIÓN === +Método: POST +POST data: {"action":"verify_batch","ips":"[\"172.16.13.36\"]"} +GET data: [] +Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryDOTtmBE5DBwZQdV3 +User Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Mobile Safari/537.36 +>>> Entrando al handler de verificación por lotes (verify_batch) +Verificando lote de 1 IPs +Iniciando verificación por ping de 1 IPs (lotes de 1) +Procesando lote 1/1 (1 IPs) +Lote completado: 0/1 IPs responden (1.10s) diff --git a/manifest.json b/manifest.json index 7b446d0..2762fd9 100644 --- a/manifest.json +++ b/manifest.json @@ -5,7 +5,7 @@ "displayName": "SIIP - Buscador de IP's Disponibles UISP", "description": "Este plugin permite buscar IP's disponibles en UISP (UNMS) y asignarlas a los clientes en UCRM. Evitando así la asignación de IP's duplicadas y mejorando la gestión de direcciones IP en la red.", "url": "https://siip.mx", - "version": "1.3.2", + "version": "1.3.3", "ucrmVersionCompliancy": { "min": "1.0.0", "max": null diff --git a/public.php b/public.php index b445a04..81e2b73 100644 --- a/public.php +++ b/public.php @@ -245,7 +245,8 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing box-sizing: border-box; } - :root { + /* Tema Oscuro (por defecto) */ + [data-theme="dark"] { --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%); --secondary-gradient: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); --success-gradient: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); @@ -258,6 +259,20 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing --shadow-xl: 0 25px 80px rgba(0, 0, 0, 0.4); } + /* Tema Claro */ + [data-theme="light"] { + --primary-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + --secondary-gradient: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); + --success-gradient: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); + --dark-bg: #f7fafc; + --card-bg: rgba(255, 255, 255, 0.95); + --card-border: rgba(0, 0, 0, 0.1); + --text-primary: #1a202c; + --text-secondary: #4a5568; + --shadow-lg: 0 10px 40px rgba(0, 0, 0, 0.08); + --shadow-xl: 0 15px 50px rgba(0, 0, 0, 0.12); + } + body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: var(--dark-bg); @@ -271,6 +286,7 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing radial-gradient(circle at 20% 50%, rgba(102, 126, 234, 0.15) 0%, transparent 50%), radial-gradient(circle at 80% 80%, rgba(245, 87, 108, 0.15) 0%, transparent 50%); background-attachment: fixed; + transition: background 0.3s ease, color 0.3s ease; } .container { @@ -556,9 +572,9 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing .ip-address { font-family: 'Courier New', monospace; - font-weight: 600; - font-size: 1rem; - color: #4facfe; + font-weight: 900; + font-size: 1.7rem; + color: #2095fbff; } .btn-copy { @@ -666,6 +682,67 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing .stats { grid-template-columns: 1fr; } + + /* Optimizaciones para tabla en móvil */ + th, td { + padding: 10px 6px; + font-size: 0.8rem; + } + + /* Ocultar columnas # y Tipo de IP en móvil */ + th:first-child, + td:first-child, + th:nth-child(3), + td:nth-child(3) { + display: none; + } + + /* Contenedor de IP con badge debajo */ + .ip-cell-mobile { + display: flex; + flex-direction: column; + gap: 6px; + } + + .ip-address { + font-size: 0.85rem; + } + + .ip-type-badge { + font-size: 0.65rem; + padding: 3px 8px; + align-self: flex-start; + } + + .status-badge { + font-size: 0.7rem; + padding: 4px 8px; + white-space: normal; + line-height: 1.3; + } + + .btn-copy { + padding: 8px 12px; + font-size: 0.75rem; + } + + /* Hacer la tabla más compacta */ + .table-container { + font-size: 0.85rem; + } + + /* Ajustar anchos de columnas en móvil (3 columnas) */ + th:nth-child(2), td:nth-child(2) { /* Dirección IP + Tipo */ + width: 40%; + } + + th:nth-child(4), td:nth-child(4) { /* Estado */ + width: 35%; + } + + th:nth-child(5), td:nth-child(5) { /* Acción */ + width: 25%; + } } .status-badge { @@ -730,9 +807,49 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing width: 100%; } } + + /* Botón de cambio de tema */ + .theme-toggle { + position: fixed; + top: 20px; + right: 20px; + width: 50px; + height: 50px; + border-radius: 50%; + background: var(--card-bg); + border: 2px solid var(--card-border); + color: var(--text-primary); + font-size: 1.5rem; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + box-shadow: var(--shadow-lg); + z-index: 1000; + } + + .theme-toggle:hover { + transform: scale(1.1) rotate(15deg); + box-shadow: var(--shadow-xl); + } + + @media (max-width: 768px) { + .theme-toggle { + width: 45px; + height: 45px; + font-size: 1.3rem; + top: 15px; + right: 15px; + } + } - + + +
@@ -767,14 +884,14 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing
@@ -852,6 +969,29 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing const cancelBtn = document.getElementById('cancelBtn'); let verificationCancelled = false; + // Theme toggle functionality + const themeToggle = document.getElementById('themeToggle'); + const themeIcon = document.getElementById('themeIcon'); + const body = document.body; + + // Load saved theme or default to dark + const savedTheme = localStorage.getItem('theme') || 'dark'; + body.setAttribute('data-theme', savedTheme); + updateThemeIcon(savedTheme); + + // Theme toggle event + themeToggle.addEventListener('click', () => { + const currentTheme = body.getAttribute('data-theme'); + const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; + body.setAttribute('data-theme', newTheme); + localStorage.setItem('theme', newTheme); + updateThemeIcon(newTheme); + }); + + function updateThemeIcon(theme) { + themeIcon.textContent = theme === 'dark' ? '🌙' : '☀️'; + } + // Toggle visibility of ping limit select const verifyPingCheckbox = document.getElementById('verifyPing'); @@ -1015,12 +1155,19 @@ $pingEnabled = !empty($config['enablePingVerification']) && ($config['enablePing if (isHidden) row.classList.add('hidden-row'); if (ipTypeLabel === 'Administración') row.classList.add('admin-row'); - // Calcular índice visual (opcional, por ahora usamos conteo de filas) + // Calcular índice visual const index = ipTableBody.children.length + 1; row.innerHTML = ` ${index} - ${ip} + +
+ ${ip} + + ${ipTypeLabel} + +
+ ${ipTypeLabel} diff --git a/siip-available-ips.zip b/siip-available-ips.zip index f2b0ed774fc753658967300bdd63054bf9a022d3..ff9e699caf84c087ce8d3d443136b7f24bc1594a 100644 GIT binary patch delta 36874 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 delta 33006 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 diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 92d9c02..a87157b 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'fd47782cbe549fa50c32e6a36c4c3852ca98ec66', + 'reference' => '99d283dd3d70dde73fbcfd497ea5e9f562448847', 'name' => '__root__', 'dev' => false, ), @@ -16,7 +16,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'fd47782cbe549fa50c32e6a36c4c3852ca98ec66', + 'reference' => '99d283dd3d70dde73fbcfd497ea5e9f562448847', 'dev_requirement' => false, ), 'guzzlehttp/guzzle' => array(