Recent Posts

Actualizando FreePBX y bug en la grabación de llamadas.

En la mañana me llamó un cliente a quien hace 4 años le instalamos un servidor Asterisk, me pidió que le diéramos mantenimiento a su conmutador pues presentaba algunas fallas, a este servidor desde hace 3 años no le dábamos mantenimiento por cuestiones del cliente al no pagar una póliza de soporte. Después de hacer una revisión general, ajustar las configuraciones y hacer un upgrade de FreePBX, solo faltaba un detalle, el servidor no grababa las llamadas.


Después de revisar en la consola el seguimiento de una llamada desde una extensión con grabación de llamadas habilitada, se observaba que se saltaba la grabación. Al revisar la macro de macro-record-enable el script de freepbx en /etc/asterisk/extensions_addittional.con no estaba completo, el paso 1 era salir de la macro, por lo que había un bug en la generación del código de freepbx. Buscando información en foros vi que ya no hay soporte para la versión 2.9 por lo que busqué en que parte del código de freepbx generaba esta macro y encontré que estaba en el archivo /DIRECTORIOWEB/admin/modules/core/functions.inc.php y el código de esa parte es el de abajo.


El no generar el script para grabación de llamadas se debe a una variable global, la cuál no encontré en /etc/amportal.conf ni en las configuraciones avanzadas de asterisk, por lo que me fue más fácil alterar la condición de functions.inc.php para que el script de freepbx generara el código, con esto al hacer las pruebas quedó solucionado.


Este es el código original, solo hay que modificar la condición de disable_recording


 
          $context = 'macro-record-enable';
                        $exten = 's';
 
                        if ($disable_recording) {
                                $ext->add($context, $exten, <em>, new ext_macroexit());
                        } else {
                                $ext->add($context, $exten, </em>, new ext_gotoif('$["${BLINDTRANSFER}" = ""]', 'check'));
                                $ext->add($context, $exten, <em>, new ext_resetcdr('w'));
 
                                if ($ast_ge_14) {
                                        $ext->add($context, $exten, </em>, new ext_stopmixmonitor());
                                } else {
                                        $ext->add($context, $exten, '', new ext_stopmonitor());
                                }
 
 

OpenVPN vs IPSec

IPSec desde los tiempos de Microsoft ha sido el estándar para VPNs, un protocolo con todo lo que implica la filosofía de microsoft, con amplia distribución entre los fabricantes y el protocolo de facto en los routers.


A pesar que IPSec es el estándar de VPNs, adolece de sin fin de requerimientos que su uso a veces es más un quebradero de cabeza que una solución flexible. En mi experiencia la implementación de IPSec en empresas ha sido un claroscuro entre funciones básicas y requerimientos no soportados, sumando que a pesar de ser un estándar a veces la compatibilidad e interconexión depende de la marca, modelos y versiones de los equipos a conectar. Un protocolo que sus dependencias para funcionar requieren una infraestructura más allá de la que una PyME inicialmente pudiera tener.


Lo anterior sumado ante el desconocimiento y miedo para uso de herramientas Open Source, OpenVPN una alternaiva flexible, potente y muy segura para implementación de VPNs ha sido desestimada por la industria e ingenieros, siendo solo implementada por los expertos del software libre quienes han llevado esta tecnología a empresas teniéndolas en producción con alto rendimiento y alta disponibilidad.


Diferencias entre OpenVPN vs IPsec
IPSec tiene soporte en los principales sistemas operativos como son Windows, Linux, MacOSC, iOS y Android.
OpenVPNIPsec
Generalidades
Una avanzada y flexible solución de OpenVPN de código abierto desarrollado por OpenVPN technologies, la cuál es el estándar en entornos Linux y redes basadas en código abierto. Usa el protocolo se seguridad y encriptaicón probado SSL/TSL. Un protocolo formalmente estandarizado en el IETF con el RFC 3193
OpenVPN usa la librería OpenSSLpara proveer encriptación. OpenSSL soporta múltiples algoritmos de encriptación como son 3DES, AES, RC5, Blowfish. El RFC 4835 especifica que 3DES y AES en IPsec son los algoritmos de encriptación
OpenVPN no tiene mayores vulnerabilidades y será completamente seguro siempre y cuando se use con cualquiera de los algoritmos de seguridad soportados. IPSec no tiene mayores vulnerabilidades y es considerado extremadamente seguro cuando es usado con el algoritmo de encriptación 3DES o AES.
OpenVPN tiene mejor rendimiento que IPSec al usarse bajo el protocolo UDP. IPSec tiene ligera sobrecarga debido a la doble encapsulación.
OpenVPN es fácil de implementar y puede correr sobre cualquier puerto UDP o TCP. Para firewall restrictivos puede ser configurado para usar TCP sobre el puerto 443. IPSec usa el puerto UDP 500 para el intercambio inicial de llaves, el puerto 50 para los datos encriptados, el puerto 1701 para la sesión inicial L2TP y el puerto 4500 para NAT Transversal. Clientes IPSec son más fáciles bloquear que clientes OpenVPN.
OpenVPN no es incluido en ningún sistema operativo, pero OpenVPN tiene soporte para cualquier sistema operativo y su instalación es fácil que puede hacerse en 5 minutos. Todas las versiones de Windowx desde 200/XP y Mac OS X 10.3+ y muchos sistemas operativos para móviles tienen sporte nativo para L2TP/IPSec
OpenVPN es muy estable y rápido sobre redes inalámbrica, celular GSM y otras redes no eficientes donde la pérdida de paquetes y congestión son comunes. OpenVPN sporta TCP para redes ineficientes pero este modo sacrifica algo de velocidad debido a la ineficiencia del encapsulamiento de TCP sobre TCP. L2TP/IPSec es más complejo y difícil de configurar que OpenVPN más cuando se trata de implementarlo detrás de redes NAT.
OpenVPN tiene compatibilidad con todos los sistemas operativos para servidores, escritorio y móviles, tales como Windows, Linux, *Unix, Mac OSX, iOS, Android, Windows Mobile, *BSD, DDWRT, etc.
OpenVPN es la mejor opción debido a su flexibilidad para integrarse en cualquier tipo de redes. Es extremadamente seguro, rápido y altamente eficiente. IPSec es buena opción, pero en relación con OpenVPN queda ligeramente corto comparando las múltiples características y flexibilidad de OpenVPN a las limitaciones de IPSec por ser un estándar.
OpenVPN oficialmente no viene integrado en router de las marcas más comerciales, pero en la actualidad se puede instalar un firmware DDWRT en diversas marcas y modelos de routers, donde OpenVPN ya viene integrado permitiendo aprovechar la tecnología de OpenVPN y el hardware de router. IPSec al ser estándar, puede enontrarse en los routers de marcas comerciales.
OpenVPN permite conexión de diversos tipos de redes Lan to LAN, Roadwarrior y punto a punto, integrando estas redes a los firewalls ya que la conexión se convierte en una interfaz de red que puede ser administrada como cualquier interfaz de red física. IPSec permite conexiones VPN lan to lan, punto a punto y road warrior, teniendo ciertas limitaciones en ruteo de redes avanzadas.
OpenVPN al estar basado en código abierto su nivel de depuración es muy alto, permitiendo detectar los puntos de fallo rápida y fácilmente en una implementación. IPSec al implementarse sobre routers, la depuración de errores depende el tipo de router, siendo solo disponible en routers de gama alta, mientras en los de gama baja el debug es muy básico.



En conclusión, OpenVPN siempre será la mejor opción de VPNs para cualquier empresa que IPSec por flexibilidad, rapidez, funcionalidad, control, seguridad y adaptación a cualquier topología de red.

Hecho en México - documental que todo mexicano debe ver

"Mi Mamá me dijo, que sembrara flores, que saliera al campo, a buscar amores". Cojolites - Sembrar Flores. Parte del documental Hecho en México.



Cuando México ha sido reducido a violencia y corrupción , veo esta película -una obra de arte- y confirmo lo que las armas, la avaricia y el materialismo me estaban haciendo olvidar, me vuelvo a dar cuenta que el espectro de bellos matices de mi México es muy amplio y contrastante.


México es mucho mucho más allá de la ambición de los políticos que reducen el término México a un botín de quien ofrece más para dar menos, nuestros pueblos son más que mexicanos marginados asistidos por galletas y leche contaminada, son más que personas rezagadas como la televisión los estigmatiza, son mucho más de como el capitalismo y la OCDE los clasifica para llamarlos pobres, nuestros pueblos mexicanos su riqueza no es material su riqueza es espiritual, esa riqueza heredada desde tiempo muy atrás más allá de aquellos tiempos cuando la primera cruz fue plantada en tierras mexicanas, la riqueza de nuestros pueblos es cósmica desde la época de Quetzalcoatl, y desde los Mayas nuestros pueblos ya entendían la sincronicidad del hombre y el universo que los gobernaba, aunque en la actualidad el sistema económico ha alejado la naturaleza cósmica del hombre orientándolos hacia esa salvaje supervivencia por querer tener más reduciendo la felicidad a un ente material y de bonito diseño, cuando la felicidad y el amor nuestros ancestros mexicanos lo han descubierto cientos y miles de años antes que Erich Fromm pudiera decodificarlo y documentarlo.


Al ver este video revive el amor por mi país, ese amor que agrupaciones extranjeras quieren desaparecer y desvanecer del mexicano esa identidad para con mayor fácil conquistarnos, desheredarnos y despojarnos de esta bendita tierra en complicidad de quienes nos gobiernan quienes poco a poco han transformado a México en una tienda de conveniencia para los extranjeros, donde en cualquier lugar y cualquier día vienen a México para llevarse el oro, la plata, el petrolero, recursos naturales y hasta mano obrera dejándonos contaminación, violencia y degradación humana.


No permitamos que nuestro México desaparezca, ese México que lucha por sobrevivir pero que los extranjeros nos lo quieren cambiar por caricaturas, personajes de moda y productos sintéticos hechos en china.


Este documental Hecho en México tiene que verlo todo aquel que debajo de esa playera nike aun sienta que dentro de su corazón fluye sangre de esta tierra mexicana, que se quite los audífonos por un instante y deje de escuchar a la banda de moda y permita que las notas y voces narren con ritmos mexicanos lo que es nuestra tierra y alimente esa fuerza para evitar la invasión extranjera, defender nuestras raíces y hacerlas perdurar.


Amo este País, amo México, amo a su gente. ¡Luchemos por México!

Como leer más rápido en 7 días - PDF

Liga para descarga del PDF digitalizado del libro Como leer más rápido en 7 días escrito por William S. SChaill director del Reading Laboratory en los años 60s .

  • 50 Mb
  • Completo
  • Calidad de digitalizado: 8



    https://docs.google.com/file/d/0B_tOFECObYBOU3VRemxHb1RMdms/edit?usp=drive_web&pli=1




    Hace unos meses deambulando en un tianguis de libros, vi entre un abismal amontonamiento de libros el título Como leer más rápido en 7 días, me llamó la atención al instante que sin titubear más saque los 30 pesos que era el costo de cualquier libro de los ahí apilados sin orden alguno.


    Días posteriores comencé con la lectura del libro, leyéndolo capítulo por capítulo y haciendo los ejercicios como lo indicaba la lectura. El libro consta de 7 capítulos que muestran los porqués una lectura no es eficiente y como lograr mejores resultados. Al principio tuve muchas dudas, pero con la práctica de los ejercicios el primer mes aumenté al doble mi velocidad de lectura, al tercer mes lo tripliqué y ahora voy aumentando cuatro veces mi velocidad de lectura, llegando hasta más de 800 palabras por minuto, que El Quijote lo pude leer en 9 horas diferidas entre 6 sesiones de lectura.


    Algo que comprendí con este libro es que la lectura es como el atletismo de fondo, si nunca entrenas nunca podrás correr más allá de 5Km; de tal forma que si no entrenas, recorrer 5km caminando será tedioso y tardado que tarde o temprano dejarás de intentarlo; en cambio si entrenas, en pocas semanas 5Km diarios o cada tercer día serán una delicia que no te llevará más de 25 minutos en lograrlo y conforme pasen las semanas querrás correr 10Km, 15Km, 20Km y hasta un maratón, queriendo lograr hacer travesías de montaña y épicos ultramaratones.


    Entonces, el entrenamiento de los ojos es similar al entrenamiento de las piernas, en la carrera aprendes a mejorar tus zancadas, mantener el ritmo, la concentración, atacar diversos terrenos con diversos modos de carrera para ascensos y descensos; En la lectura aprendes a leer en frases, aumentar el campo de visión, mejorar la concentración, mayor retención, memoria fotográfica, realizar diversos modos de lectura para diversos textos, etc., entre otras técnicas que este libro indica ejercitar.


    En la escuela nos enseñaron el abecedario y a leer mediante el método onomatopéyico, pero después del primer grado de primaria la enseñanza de la lectura se estanca que no nos enseñan técnicas para mayor velocidad y comprensión de lectura, mejoramiento del campo visual, técnicas de memoria fotográfica, muchos menos ejercicios para concentración, de tal forma que ese abecedario que nos enseñaron a rajatabla ya es un abc-diario que nunca intentamos mejorar.


    Quizá sea una trampa del sistema ante el entendimiento del conformismo y pereza mental del ser humano, el sistema no le oculta ni muestra técnicas avanzadas de lectura solo lo necesario para sus tareas como partícipe de una sociedad de producción y consumo, pues una sociedad del pensamiento contravendría los intereses internacionales corporativistas que subyugan los ideales del ser humano y no lo animen ir más allá de los bordes que conflictuen los engranes del sistema. ¿ Se imaginan a un adolescente o a un joven comprendiendo lecturas avanzadas de filosofía, economía, política, tecnología, física, etc. ? Entonces los gobiernos serían completamente diferentes al mundo actual y la emancipación de los países se consumaría, pero eso no le conviene a grupos de élite internacional que desean se mantenga el status quo, de lo contrario sus grandes intereses se vendrían abajo, por ello a través de organismos internacionales dictan a países los sistemas de educación a implementar en las aulas.


    Tu eliges seguir viviendo en esa burbuja creada para el confort del individuo o pasar al lado de lectores que deambulan entre claroscuros.


    Quizá esto pueda contribuir en algo y aumentar ese 2% de personas que tienen en su casa más de 100 libros que han leído.
  • Usa Google TTS(Text to Speech) para comvertir textos en archivos de audio

    Google translator tiene la característica que puede reproducir el texto con voz del idioma seleccionado. Lo interesante de este TTS es que puede ser usado de diversas formas, por ejemplo para generar un archivo de audio con un texto introducido hablado en el idioma indicado, para esto se podría cargar el siguiente URL:


    http://translate.google.com/translate_tts?tl=es&q="Hola Mundo"


    Donde es puede ser cambiado por la variante de cada país, por ejemplo en=>ingles, de=>alemán, pt=>portugués, ru=>ruso, ja=>japones, etc.


    Otra de las ventajas del TTS de google es que puede usarse desde Asterisk para generar IVR o aplicaciones con respuesta de voz automática, para esto solo basta usar un AGI que conecte a google y listo, pero esto lo pondré en otro post.

    Resolviendo problemas de IOMMU & Tarjetas Sangoma PCI Express en Linux CentOS

    Hace unos días adquirí una tarjeta Sangoma B601DE para instalar un servidor de telefonía para un cliente, esta tarjeta es para 1 troncal digital E1, 4 puertos FXO y un puerto FXS.

    Esta tarjeta la instalamos sobre un Elastix 2.4 para 64 bits. Todo se instaló correctamente como en infinidad de instalaciones que hemos realizado, se configuraron todos los requerimientos del cliente y la tarjeta se dio de alta para la troncal digital E1 y se configuraron los puertos FXO para entrada y salida de llamadas.

    El detalle apareció cuando se quisieron hacer las pruebas de llamadas entrantes y salientes, al intentar sacar una llamada por algún puerto analógico se escuchaba un ruido en la línea donde se intentaba sacar la llamada, no se escuchaba el tono de marcado normal.

    Se revisó la configuración, incluso se instalaron nuevos drivers y el problema era el mismo.

    Las líneas se probaron directamente y todo funcionaba correctamente.


    En un principio se pensó que la tarjeta estaba dañada, pero para descartarlo se probó la tarjeta en un equipo diferente y la tarjeta funcionó sin problema alguno tanto para llamadas entrantes y salientes.


    Al revisar el BIOS del servidor, en las opciones de Dispositivos PCI estaba la opción de IOMMU Activada.

    IOMMU es una característica nueva para servidores que permite optimizar el redireccionamiento de direcciones físicas a direcciones virtuales para dispositivos de entrada y salida. Esto muy común en virtualización de servidores que permite hacer un passthrough de dispositivos PCI a máquinas virtuales. Entre otras características es que protege la memoria y evita malfuncionamiento de dispositivos que escriban o lean en memoria que no ha sido explícitamente mapeada.


    El detalle de IOMMU es que tiene que estar activado tanto a nivel hardware como en software. Por lo que el error se presentaba ya que en esta versión de Elastix no viene activado IOMMU por default en el kernel, por ello el driver detectaba correctamente la tarjeta sangoma pero al momento de la operación ocurrían cosas raras con el funcionamiento de la tarjeta.


    Para este caso pueden haber dos soluciones: Desactivar IOMMU en el BIOS o activar IOMMU en el BIOS y también en el Kernel.


    Para agregarlo al kernel solo basta editar el archivo de grub y agregar al final de los parámetros del kernel algo así:

     
    kernel /boot/vmlinuz-2.6.17-10-generic
    root=UUID=317464f6-8be2-4f54-88e3-694dcc8cd3c4 ro quiet splash iommu=calgary
     
    Para este caso probé las dos opciones activando IOMMU en el kernel y desactivando IOMMU en el BIOS y en el kernel y con esto al hacer las pruebas de llamadas todo volvió a funcionar correctamente tanto para llamadas entrantes como para llamadas salientes.

    Sciprt para registro automáticos de agentes dinámicos en Queues de Asterisk.

    La interfaz gráfica de FreePBX permite configurar rápidamente colas(queues) con opción de agentes dinámicos o estáticos, aunque cuando son agentes dinámicos estos tienen que registrarse en la cola marcando el número de la cola seguido de asterisco, por ejemplo si la extensión de la cola configurada fuera 601, para registrarse marcarían 601* y un prompt les pediría el número de agente a registrar, para desconectarse marcarían 601** y solicitaría el agente a desconectar. Esto aumenta la probabilidad de fallos y errores en la conexión, por lo que es recomendable hacer un script que automáticamente registre al usuario.


    En este caso este script en el dialplan de Asterisk detecta el CID de quien intenta registrarse marcando 01 y lo registra como agente, para desconectar de la cola solo marca 02 y lo desconecta de la cola indicada en el script del dialplan de asterisk.

     
    nano /etc/asterisk/extensions_custom.conf
     
     
    <br>
    [fom-internal-custom]
    ;incluimos los contextos dentro del contexto from-internal
    include=>agente-offline
    include=>agente-online
     
     
    <img src="plugins/Emoticons/images/face-smile-big.png" border="0" alt="face-smile-big.png " width="16" height="16" />ialplan que conecta un agente  a la cola 601, detecta el CID de quien marca la extensión 01 y lo registra en la cola 601
    [agente-online]
    [agente-online]
    exten => 01,1,Wait(1)
    exten => 01,n,Macro(user-callerid,SKIPTTL)
    exten => 01, n(a3),Set(CALLBACKNUM=${CALLERID(number)})
    exten => 01, n,Set(COLA1=601)
    exten => 01,n,Set(THISDEVICE=${DB(DEVICE/${CALLBACKNUM}/dial)})
    exten => 01,n,ExecIf($[${LEN(${THISDEVICE})}!=0 & ${DB_EXISTS(QPENALTY/${COLA1}/agents/${CALLBACKNUM})}=1]?AddQueueMember(${COLA1},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${COLA1}/agents/${CALLBACKNUM})},,${DB(AMPUSER/${CALLBACKNUM}/cidname)},${THISDEVICE}))
    exten => 01,n,ExecIf($[${LEN(${THISDEVICE})}=0 & ${DB_EXISTS(QPENALTY/${COLA1}/agents/${CALLBACKNUM})}=1]?AddQueueMember(${COLA1},Local/${CALLBACKNUM}@from-queue/n,${DB(QPENALTY/${COLA1}/agents/${CALLBACKNUM})}))
    exten => 01,n,UserEvent(Agentlogin,Agent: ${CALLBACKNUM})
    exten => 01,n,Wait(1)
    exten => 01,n,Playback(agent-loginok&with&extension)
    exten => 01,n,SayDigits(${CALLBACKNUM})
    exten => 01,n,Hangup
    exten => 01,n,MacroExit()
    exten => 01,n(invalid),Playback(pbx-invalid)
    exten => 01,n,Hangup  
     
    ; dialplan que desconecta un agente, detecta el CID de quien marca la extensión 02 y lo desconecta de la cola 601
     
    [agente-offline]
    exten => 02, 1,Wait(1)
    exten => 02, n,Macro(user-callerid,SKIPTTL)
    exten => 02, n,Set(COLA1=601)
    exten => 02, n(a3),Set(CALLBACKNUM=${CALLERID(number)})
    exten => 02, n(a5),Set(CALLBACKNUM=${IF($[${LEN(${AMPUSER})}=0]?${CALLERID(number)}:${AMPUSER})})
    exten => 02, n(a7),RemoveQueueMember(${COLA1},Local/${CALLBACKNUM}@from-queue/n)
    exten => 02, n,RemoveQueueMember(${COLA1},Local/${CALLBACKNUM}@from-internal/n)
    exten => 02, n,UserEvent(RefreshQueue)
    exten => 02, n,Wait(1)
    exten => 02, n,Playback(agent-loggedoff)
    exten => 02, n,Hangup
     

     
    #Recargamos el dialplan para que el script pueda ser llamado desde cualquier extensión
    asterisk -rx "dialplan reload"
     


    Con esto evitaremos el engorroso registro y desconexión método default de FreePBX automatizando el registro.


    También se puede crear un AMI que a cierta hora automáticamente conecte y desconecte agentes de la cola.


    Con esto le facilitamos el registro de agentes dinámicos en los call centers de los clientes a quienes les instalamos y configuramos sus plataformas de comunicaciones basadas en Asterisk.

    Configuración de tarjeta de audio como dispositivo de Voceo en Conmutador IP CloudVoox Asterisk

    El voceo es una de las funciones del conmutador Asterisk que permite desde cualquier teléfono IP, softphone, teléfono analógico llamar a una extensión que tenga conectada unas bocinas de alta ganancia y poder anunciar un mensaje en automático sin tener que esperar que alguien tenga que levantar un auricular para poder escuchar el mensaje, pues el voceo activa automáticamente el autoresponder.


    Muchos teléfonos IP tienen la función de voceo, en algunas empresas a veces es requerido el voceo en ciertas áreas para anunciar algo, por ejemplo en algún lugar de mucho ruido para anunciar que alguien es requerido por una persona, por el ruido tener un solo teléfono no es lo ideal pues el timbrado del teléfono no es suficiente para ser escuchado.


    En estos casos es requerido un sistema de voceo, a veces se incorpora de forma externa al conmutador, pero en este caso Asterisk permite utilizar el audio de la computadora como un canal de comunicación, de tal forma que desde cualquier teléfono IP será posible usar el voceo a través de la tarjeta audio de la computadora que tuviera conectada unas bocinas.


    En Asterisk existe chan_alsa y chan_oss que son dos módulos que permiten cargar dispositivos de audio usando alsa u oss de Linux y usarlos como el canal console.


    En este caso usaremos chan_alsa.


    Lo primero será instalar algunas librerías.

     
    yum -y install alsa-utils alsa-base alsa-lib pulseaudio pulseaudio-utils python-alsa
     
    #Listamos los dispositivos de audio que tuviéramos instalados en el servidor
    aplay -l
     
    #Este comenado podría arrojarnos algo como esto:
    card 0: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 1: Generic [HD-Audio Generic], device 0: ALC887-VD Analog [ALC887-VD Analog]
      Subdevices: 0/1
      Subdevice #0: subdevice #0
    card 1: Generic [HD-Audio Generic], device 1: ALC887-VD Digital [ALC887-VD Digital]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
     
    #Para este ejempo tengo un servidor con el audio trasero y el conector para el audio frontal.
    #El audio frontal es card0 y el audio trasero es card1
    #Podemos probar que nuestro dispositivo de audio funcione reproduciendo un archivo wav
     
    aplay -v -D plughw:1,0 /var/lib/asterisk/mohmp3/fpm-sunshine.wav
     
    #si todo salió bien, entonces editamos el siguiente arrchivo para definir el audio por default
     
    nano /etc/asound.conf
    #Ponemos en este archivo
    pcm.!default {
            type            plug
            slave   audio
    }
    pcm_slave.audio {
            pcm "hw:1,0"
            rate 48000
    }
    #donde hw:1,0 es el dispositivo de Audio: Card 1 y 0 es la salida de audio
    #Guardamos
     
    #Verificamos nuevamente que la configuración del dispositivo por defautl haya quedado
    aplay -v -D default /var/lib/asterisk/mohmp3/fpm-sunshine.wav
     
    #Enseguida configuramos el archivo alsa.conf en Asterisk
    nano /etc/asterisk/alsa.conf
     
    #Dejamos los siguientes parámetros
    [general]
    autoanswer=yes
    language=es
    mohinterpret=default
    ;mute=true
    context=from-internal
    extension=s
    <img src="plugins/Emoticons/images/tongue.png" border="0" alt="tongue.png " width="16" height="16" />laybackonly=yes
    overridecontext=yes
    input_device=default
    playbackonly=yes
    #Guardamos
     
    #Configuramos una extensión de pruebas
    nano /etc/asterisk/extensions_cutom.conf
     
    #dialplan para pruebas
     
    [from-internal-custom]
    include=> audiopc-como-vocero
     
    [audiopc-como-vocero]
    exten => *51,1,Answer
    ;exten => *51,n,Dial(console/default,20,A(custom/UnderWater))
    #usamos el dispositivo default como canal de salida para el voceo
    exten => *51,n,Dial(console/default,20,tTwW)
    exten => *51,n,Hangup()
    #Guardamos
     
    #Damos permisos 0777 a los dispositivos de audio del servidor para que puedan ser usados por Asterisk, si no se hace esto no funcionará, si se es más exigente en la seguridad puede evitarse el 0777 y asignarle el mismo usuario de ejecución de asterisk por ejemplo chmod -R asterisk /dev/snd/*.
     
    chmod -R 0777 /dev/snd/*
     
    #entramos a la consola de Asterisk
    asterisk -rvvv
     
    #recargamos los módulos de chan_alsa
    module unload chan_alsa.so
    module load chan_alsa.so
     
    #también recargamos el dialplan
    dialplan reload
     
    #ahora si desde cualquier teléfono IP o softphone  pueden llamar a la extensión asignada al voceo
    #En caso de que el audio de salida sea bajo podemos aumentarlo con alsamixer indicando cual es la tarjeta de sonido a configurar
    alsamixer -c 1
     
    Si por alguna razón el servidor no detectara la tarjeta de audio, cargar los módulos de audio o identificar que dispositivo de audio tiene su servidor e instalar el driver necesario:
     
    modprobe snd_hda_intel.ko
    modprobe snd_hda_intel
    modprobe snd_hda_intel
    modprobe snd_hda_intel
    modprobe snd-pcm-oss
    modprobe snd-mixer-oss
    modprobe snd-seq-oss
    modprobe snd_pcm_open_noupdate
    modprobe snd
    modprobe alsamixer
    modprobe snd_pcm
     
    Con lo anterior solo se instala una bocina de alta ganancia y se tiene un sistema de voceo práctico y de bajo costo para usarlo como una extensión del conmutador desde Asterisk
     

    Prueba de sobrecarga de servidores web con CURL

    Hace unos días me pidieron que ayudara hacer un script para probar el rendimiento de un servidor web, de inicio pensé en varias posibilidades, pero al final decidí hacer un script en curl que mandara peticiones de registro y de descarga de contenido para medir el rendimiento del servidor al generar n peticiones simultáneas.


    Lo primero que hice fue hacer un script en bash como el siguiente:
     
    #!/bin/bash
    USUARIOS=$1
    PROCESOS=$2
    SLEEP=$3
    echo "" > c$USUARIOS-$PROCESOS.log
     
    for i in `seq 1 $USUARIOS`
    do
            /usr/bin/php  ./curl.php $i $PROCESOS $SLEEP >> c$USUARIOS-$PROCESOS.log &
    done
     
    #ps aux | grep curl.php
     
    tcpdump -i $4 port 443 -vv -w e$USUARIOS-$PROCESOS.log
     


    Explicación del script:

    Este script define del número de sesiones a iniciar en USUARIOS y en PROCESOS el número de contenidos a descargar por sesión iniciada en el servidor web.

    SLEEP es una variable que nos da una pausa para ejecutar el script de curl y empezar la sesión

    Se genera un log con la información obtenida nombrando al archivo con el número de usuarios y procesos generados.

    Se hace un ciclo para iniciar la sesión de usuarios enviando al script el número de descarga de contenidos a realizar por sesión, enviando la información al archivo del log.

    Al terminar el ciclo hacemos un tcpdump al puerto 443 que estamos monitoreando en el script de curl, en este caso este puerto puede cambiar al 80 u otro en dado caso.

    El script de bash se ejecutaría así:
     
    sh curl.sh 100 5 5 eth0
     


    El script de curl en php que manda a llamar el script en bash, ejecuta curl, inicia la sesión en el servidor y descarga el contenido. Este script sería el siguiente:

     
    <?php
    sleep($argv[3]);
    $log =  "\nSTART LOGIN: ".udate("Y-m-d H:i:s.u").", USER: ".$argv[1]."\n";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://www.MISERVIDOR.COM/login.php');
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64)');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    $_login  = array("username"=>"USUARIO", "password"=>"PASSWORD");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_login);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/stress.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/stress.txt');
    $HTML = curl_exec($ch);
    if (curl_error($ch)) {
                $log .=  " ERROR LOGIN: ".curl_error($ch)." , USER: ".$argv[1]."\n" ;
    }
    $log .=  "END LOGIN ".udate("Y-m-d H:i:s.u").udate("Y-m-d H:i:s.u").", USER: ".$argv[1]."\n\n";
    //echo $HTML;
     
    foreach(range(1,$argv[2]) as $proceso){
            $log  .="START REQUEST INFO: ".udate("Y-m-d H:i:s.u").", USER: ".$argv[1].", PROCESO: $proceso\n";
            curl_setopt($ch, CURLOPT_URL, 'https://www.MISERVIDOR.com/contenido.php);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_POST, false);
            curl_setopt($ch, CURLOPT_POSTFIELDS, "");
            $HTML = curl_exec($ch);
            if (curl_error($ch)) {
                $log .= " ERROR REQUEST: ".curl_error($ch).udate("Y-m-d H:i:s.u").", USER: ".$argv[1].", PROCESO: $argv[2] \n";
            }
            $log .= "FINISH REQUEST INFO: ".udate("Y-m-d H:i:s.u").", USER: ".$argv[1].", PROCESO: $proceso \n";
           
            //echo $HTML;
    }
            echo $log;
     
     
     
    function udate($format = '
    u', $utimestamp = null) {
            if (is_null($utimestamp))
                $utimestamp = microtime(true);
            $timestamp = floor($utimestamp);
            $milliseconds = round(($utimestamp - $timestamp) * 1000000);
     
            return date(preg_replace('
    `(?<!\\\\)u`', $milliseconds, $format), $timestamp);
        }
    ?>

     


    Explicación del script de curl


    Este script recibe como parámetros el número de usuario en sesión, número de procesos y tiempo de ejecución.


    Configura los parámetros de curl para conectar a un servidor HTTPS indicando la url de inicio de sesión y enviando los parámetros de usuario y password para validar el registro e iniciar la sesión vía POST. Cambiar los valores de servidor y datos de registro por los valores de su servidor web.


    Antes de hacer la sesión se captura la fecha y hora inicial contando los milisegundos, al finalizar el proceso de inicio de sesión se vuelve a capturar la fecha y hora con milisegundos agregando la info a la variable log.


    Se valida que no hubiera un error en el proceso de inicio de sesión


    Se mantiene la sesión para esto en la configuración de los parámetros de curl indicamos el archivo donde guardará la cookie.


    Con la sesión de usuario abierta se inicia un ciclo con el número de procesos indicados para capturar el tiempo de inicio con milisegundos y se ejecuta la descarga del contenido, al final de la descarga de contenido se obtiene el tiempo con milisegundos y continua el ciclo hasta finalizar el número de procesos.


    Al finalizar toda la información recabada se envía al archivo de log indicado en el script de bash.


    Con estos dos scripts se obtiene todo un log con la información generada al ejecutar x cantidad de usuarios con n procesos. Al observar la información puede encontrarse que los tiempos de respuesta de un servidor disminuyen conforme va aumentado el número de peticiones de registros de usuario y descarga de contenidos.


    Al script solo le falta la parte para ordenar la información para obtener estadísticas de tiempo de registro de usuarios, promedio de descarga de contenidos, porcentajes de errores, etc.

    Eliminando de Linux Desktop un espía amigo

    Zeitgeist es un demonio incluido en el escritorio de Gnome que monitorea toda tu actividad, gestiona eventos como que páginas visitas, que música escuchas, tus conversaciones, que comandos ejecutas, que archivos abres, que fotos ves, a donde te conectas, donde te localizas, etc.


    Esto lo hace con el fin de interactuar con otras aplicaciones a través de un API para interactuar de forma inteligente.


    Un tema de seguridad y privacidad es que si al instalar una aplicación de terceros, esta aplicación tuviera acceso a Zeitgeist, prácticamente toda tu información estaría siendo monitoreada por un agente externo.


    Aunado al tema de seguridad, al ser una aplicación en constante ejecución que monitorea toda tu actividad, esta aplicación llega a consumir muchos recursos de RAM y CPU, por lo que es un punto más para no tenerlo en ejecución.


    En ubuntu Linux su proceso de desinstalación es sencillo ya que otros paquetes no depende de el, por lo que para removerlo bastaría solo un:
     
    sudo dpkg --purge zeitgeist*
     
    Después de eso solo matar los demonios que estuvieran corriendo en consola y listo, tenemos un espía amigo anulado si es que fuéramos muy quisquillosos en el tema de privacidad.
    Previous page 1 ... 3 4 5 ... 49 Next page
    487 entries

    Emblems