Recent Posts

Traccar vs OpenGTS: Las opciones Open Source para rastreo vehicular satelital.

Hace unos días un familiar me contactó para solicitarme alguna solución que pudiera rastrear vehículos, inicialmente le recomendé a SGPSS, un cliente a quien le desarrollamos una interfaz de telefonía para su software de rastreo satelital. Pero, este familiar me pidió que la solución fuera Open Source para que el mismo la hospedará, para esto aproveché un tiempo libre y busqué información al respecto, revisé varias soluciones open source de rastreo satelital y las dos que me convencieron fueron Traccar y OpenGTS.


Traccar[http://www.traccar.org
] es un software desarrollado en Java que funciona en modo cliente/servidor. Se instala en un servidor Windows/Linux/MacOSX y los clientes pueden ser smartphones o dispositivos GPS[
https://www.traccar.org/devices/
] para vehículos, incluso hay versiones desarrolladas con Arduino para vehículos compatibles con Traccar. Su funcionamiento es muy sencillo, solo basta identificar el IMEI del dispositivo, configurar la IP o dominio del servidor y el puerto de conexión. Con esto en el servidor ya puede monitorear en tiempo real la actividad del vehículo o el objeto GPS monitoreado esto usando mapas de OpenStreetMaps o BingMaps.


OpenGTS [
http://www.opengts.org/]es otra solución Open Source para rastreo satelital, esta me gustó más, pues tiene más funciones de administración y control. Está desarrollada en la plataforma de Java, de igual manera cliente/servidor y el almacenamiento del tracking se hace en una base de datos MySQL. Su instalación puede realizarse en Winbugs/LINUX/MacOS X/*BSD. Lo interesante de OpenGTS es que en las nuevas versiones se puede hacer una integración con Google Maps, incluso se podrían hacer geocercas, georutas y otras georeferencias.


Ambos soportan dispositivos de diversas marcas, lo que la hace soluciones empresariales para integrarse con múltiples empresas.

Script en PHP que permite contabilizar los minutos y llamadas de cada troncal a las diversas rutas del conmutador

Este script permite mostrar resumida la información del CDR de Asterisk PBX alojado en la base de datos AsteriskCDRDB, esto para saber el total de llamadas y minutos consumidos por cada troncal del conmutador y tener una consulta rápida del mes en curso.


Este script es el reporte que se usa en el AGI Script que enruta las llamadas con base a los minutos y llamadas disponibles de cada troncal.


Solo basta configurar los datos de la base de datos, el prefijo de marcación en caso de que se use, modificar el valor de las troncales y las rutas en caso de que se use en un país diferente a México.

 
<form method=GET name=minutos action=tarificador.php>
<select name=ruta >
    <option value=locales>Locales</option>
    <option value=nacionales>Nacionales</option>
    <option value=internacionales>Internacionales</option>
    <option value=celulares044>Celulares 044</option>
    <option value=celulares045>Celulares 045</option>
    <option value=01800>01800</option>
</select>
<input type=submit value=Listar name=listar>
</form>
<?php
    $conexion = conectaDB("SERVIDORMYSQL", "USUARIO", "PASSWORD", "asteriskcdrdb");
    //Si sus troncales de salida usan un prefijo, hacer los ajustes en el código para la consulta en la base de datos.
    $prefijo = "";
   
    //Arreglo que identifica las troncales disponibles en el servidor Asterisk PBX, la llave es la identificación de la troncal y el valor corresponde al canal o canales empleado por la troncal
    $_troncales = array(
        "Troncal Digital E1"=>"DAHDI/[0-9]-|DAHDI/1[0-9]-|DAHDI/2[0-2]-",
        "Linea Analogica 1"=>"DAHDI/32",
        "Linea 5587654321"=>"DAHDI/33",
        "Linea Celular TelCel"=>"DAHDI/34",  
        "5598765431"=>"DAHDI/35");
 
   $resultado = "<tr><td>troncal/minutos</td> <td>Llamadas</td> <td>Minutos</td>   </tr> ";
   
   switch($_GET[ruta]){
        case "locales":  
                //Numeros locales fijos en México, D.F. son de 8 dígitos
                $condicion_troncal = " char_length(dst)=(8+char_length(prefijo)) ";
                break;
        case "nacionales":
                //Numeros nacionales fijos en México son de 12 dígitos empezando con 01 o de 10 dígitos sin el 01
                $condicion_troncal = " (char_length(dst)=( 12+char_length(prefijo) ) or char_length(dst)=(10+char_length(prefijo) ) ) ";
                break;
        case "internacionales":
                //Numeros internacionales comienzan con 00
                $condicion_troncal = " dst like \"".$prefijo."00%\" ";
                break;
        case "celulares044":
                //Numeros celulares locales comienzan con 044
                $condicion_troncal = " dst like \"".$prefijo."044%\" ";
                break;
        case "celulares045":
                //Numeros celulares nacionales comienzan con 045
                $condicion_troncal = " dst like \"".$prefijo."045%\" ";
                break;
        case "01800":
                //Numeros gratuitos 01800
                $condicion_troncal= " dst like \"".$prefijo."01800%\" ";
                break;
   }
   
   $count = 0;
   foreach(  array_keys($_troncales) as $troncal){
        $query = " select sum(ceil(billsec/60)), count(*) from cdr where calldate like \"".date("Y-m")."%\" and $condicion_troncal and ".
                " disposition=\"ANSWERED\" and dstchannel REGEXP \"".$_troncales["$troncal"]."\";   "; 
        $count++;
        $_info = mysql_query($query);
        $_result = mysql_fetch_array($_info);
        $resultado .= "<tr><td>$troncal</td> <td>$_result[1]</td> <td>$_result[0]</td>  </tr> ";
   }
   
   echo " <b>Ruta : $_GET[ruta] </b><br>
                <table>
                $resultado
        </table>"
;
   
    function conectaDB($server, $user, $passwd, $dbname){
        $cursor = mysql_connect($server, $user, $passwd);
        return mysql_select_db($dbname, $cursor);
    }
?>
 
 

Ruteo avanzado de llamadas en Asterisk con base a minutos y llamadas por troncal.

Hace cuatro años implementamos un servidor IP en una comercializadora, el director de la empresa es muy meticuloso con cada proceso de la empresa y más aún en términos económicos, para esto nos solicitó que configuráramos su conmutador de telefonía Asterisk PBX CloudVoox PyMES para que le generara un ahorro lo más que se pudiera en cuanto a las llamadas.


En aquella ocasión el cliente contaba con una troncal digital que disponía de 1000 llamadas a números locales, 1000 minutos a celulares 044 y 600 minutos a larga distancia nacional; también contaba con líneas analógicas, 6 de ellas contaban con 100 minutos a celulares, llamadas locales ilimitadas y 200 minutos a lada Nacional. La idea era que el conmutador no se pasara de ese límite de llamadas y minutos que disponía en cada troncal.


El conmutador se instaló con la Interfaz de FreePBX, el cuál permite dar de altas las troncales y las rutas de salidas, en rutas salientes permite priorizar las líneas de salida pero no tiene la facilidad de medir el ruteo por minutos o por llamadas realizadas. Para esto se tomó el script de FreePBX de las rutas salientes que genera en extensions_custom.conf y se adecuó para hacer una condición antes de lanzar una llamada por cada troncal dónde se enviaba a un AGI(tiempo-medido.php) los parámetros de la troncal a validar, los minutos máximos o llamadas límites de la troncal y el prefijo o longitud del número marcado, con esto el script verificaba si esa troncal tenía aún minutos o llamadas disponibles por realizar con base al número marcado.


Las rutas a locales, celulares 044 y llamadas a números nacionales se eliminaron de la interfaz gráfica de FreePBX en Outbound Routes y se agregó manualmente el código en extensions_custom.conf.


Por ejemplo suponiendo que tuviéramos:
  • Una troncal con 1 lineas analógica con llamadas ilimitadas a celulares(DAHDI/32)
  • Otra línea analógica con 100 minutos(DAHDI/34)
  • Una troncal digital con 300 llamadas disponibles a celulares DAHDI/1 - DAHDI/19
  • El plan de marcación para una celulares 044 por ejemplo quedaría así :
  •  
     
    [from-internal]
    ..
    ..
    ..
    include => tiempo-medido
     
     
    [tiempo-medido]
    exten => _044ZXXXXXXXXX,1,Macro(user-callerid,SKIPTTL,)
    exten => _044ZXXXXXXXXX,n,Macro(pinsets,1,1)
    exten => _044ZXXXXXXXXX,n,Noop(Calling Out Route: Celulares)
    exten => _044ZXXXXXXXXX,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
    exten => _044ZXXXXXXXXX,n,Set(_NODEST=)
    exten => _044ZXXXXXXXXX,n,Macro(record-enable,${AMPUSER},OUT,)
    exten => _044ZXXXXXXXXX,n,Verbose(Iniciales ${MINUTOS})
    exten => _044ZXXXXXXXXX,n,AGI(tiempo-medido.php,DAHDI/32,0,044)
    exten => _044ZXXXXXXXXX,n,Verbose(MINUTOS : ${MINUTOS})
    exten => _044ZXXXXXXXXX,n,GotoIf($[${MINUTOS} = 1 ]?marcatrunk1:trunk2)
    exten => _044ZXXXXXXXXX,n(marcatrunk1),Verbose(MINUTOS : ${MINUTOS})
    exten => _044ZXXXXXXXXX,n,Macro(dialout-trunk,1,${EXTEN},)
    exten => _044ZXXXXXXXXX,n(trunk2),AGI(tiempo-medido.php,DAHDI/34,100,044)
    exten => _044ZXXXXXXXXX,n,GotoIf($[${MINUTOS} = 1  ]?marcatrunk2:trunk3)
    exten => _044ZXXXXXXXXX,n(marcatrunk2),Verbose(MINUTOS : ${MINUTOS})
    exten => _044ZXXXXXXXXX,n,Macro(dialout-trunk,3,${EXTEN},)
    exten => _044ZXXXXXXXXX,n(trunk3),AGI(tiempo-medido.php,"
    DAHDI/[0-9]-|DAHDI/1[0-9]-",C300,044)
    exten => _044ZXXXXXXXXX,n,GotoIf($[${MINUTOS}  = 1 ]?marcatrunk3 : outisbusy)
    exten => _044ZXXXXXXXXX,n(marcatrunk3),Verbose(MINUTOS : ${MINUTOS})
    exten => _044ZXXXXXXXXX,n,Macro(dialout-trunk,6,${EXTEN},)
    exten => _044ZXXXXXXXXX,n(outisbusy),Verbose(MINUTOS : ${MINUTOS})


    Aquí lo que hace el plan de marcación manual para llamadas a 044 es lo siguiente.


    exten => _044ZXXXXXXXXX,n,AGI(tiempo-medido.php,DAHDI/32,0,044): Con esto le pasamos al script AGI tiempo-medido.php que verifique que la troncal DAHDI/32 esté disponible, le pasamos un parámetro 0 en minutos disponibles lo que indica que tiene llamadas ilimitadas y como prefijo 044 para que busque en la base de datos todas las llamadas con status ANSWERED del mes en turno para saber el número de llamadas realizadas o minutos hablados. Si la línea está disponible y hay minutos disponibles, entonces el script tiempo-medido.php asigna a la variable MINUTOS el valor de 1, con lo cuál ejecuta la llamada.


    exten => _044ZXXXXXXXXX,n(trunk2),AGI(tiempo-medido.php,DAHDI/34,100,044): En caso de que la troncal anterior estuviera ocupada, se va a esta condición, donde válida que la troncal DAHDI/34 no tenga más de 100 minutos hablados a números con prefijo 044. Si es así ejecuta la llamada.

    exten => _044ZXXXXXXXXX,n(trunk3),AGI(tiempo-medido.php,"DAHDI/[0-9]-|DAHDI/1[0-9]-",C300,044): En caso que la troncal no tenga minutos disponibles o la línea esté ocupada, entonces valida que la troncal digital a números 044 no tenga más de 300 llamadas. Aquí pongo como busqueda de troncal "DAHDI/[0-9]-|DAHDI/1[0-9]-" ya que la troncal puede salir del canal DAHDI/1 hasta el canal DAHDI/19.


    El script AGI en PHP que realiza la validación es el siguiente:

     
    #!/usr/bin/php -q
    #Sript para enrutar llamadas con base a prioridad de ruta, minutos disponibles o límite de llamadas .
    #Powered by OaxRom Mobile Computing[www.oaxrom.com]. Developed by @Phylevn
    <?php
        require("/var/lib/asterisk/agi-bin/phpagi/phpagi.php");
        error_reporting(E_ALL);
        $agi = new AGI();
        $cid = trim($agi->request['agi_callerid']);
        $conexion = conectaDB("SERVIDORMYSQL", "USUARIO", "PASSWORD", "asteriskcdrdb");
        $query = "";
       
        $destino = preg_replace("/[^0-9]/","", $argv[3]);
        $limiteDestino = preg_replace("/[^0-9]/","", $argv[2]);
        $llamadas = "";
       
        if( stripos($argv[2], "C")==0 ){//Busca por numero de llamadas
                    $llamadas = preg_replace("/[^0-9]/","", $argv[2]);
                    $query = " select count(*)  from cdr where calldate like \"".date("Y-m")."%\" and disposition=\"ANSWERED\" and dstchannel REGEXP \"$argv[1]\" ";
        }else{//Busca por cantidad de minutos
                    $query = " select sum(ceil(billsec/60))  from cdr where calldate like \"".date("Y-m")."%\" and disposition=\"ANSWERED\" and dstchannel REGEXP \"$argv[1]\" ";
        }
       
        if(stripos($argv[3], "L")==0 ){//Busca por longitud
                    $query .=" and length(dst) = $destino  ";
        }else{//busca por prefijo
                    $query .=" and dst like \"$destino%\" ";
        }
     
       $agi->verbose($query);
       $minutos = 0;
       $_result = mysql_query($query);
       
       if($_re = mysql_fetch_array($_result)){
            if($llamadas!=""){
                    $agi->verbose( "LLamadas: ".$_re[0]." Limite Llamadas: ".($llamadas) );
            }else {
                    $agi->verbose( "Minutos: ".$_re[0]." Limite Minutos: ".($argv[2]) );
            }
            if( is_numeric($_re[0]) ){
                    if($_re[0]<($limiteDestino) || ($limiteDestino==0)){
                            $minutos = 1;
                            $agi->verbose(" Disponibles: ". ( $limiteDestino - $_re[0] )  );
                    }else{
                            $minutos= 0;
                            $agi->verbose(" Limite de Minutos/llamadas ND");
                    }
            }else{
                    $minutos = 1;
                    $agi->verbose(" Minutos o llamadas disponibles: $limiteDestino" ) ;
            }
       }
       
       $agi->verbose(" Minutos: $minutos");
       $agi->set_variable("MINUTOS", "$minutos");
       
        function conectaDB($server, $user, $passwd, $dbname){
            $cursor = mysql_connect($server, $user, $passwd);
            return mysql_select_db($dbname, $cursor);
        }
    ?>
     


    En caso de que tengan un contexto diferente a from-internal solo agregar el contexto del plan de marcación al contexto que estén usando, por ejemplo en FreePBX si tuvieran dado de alta un contexto llamado CallCenter en extensions_custom.conf solo necesitarían agregar algo así:


     
    [CallCenter-custom]
    include =>  tiempo-medido
     


    Cualquier sugerencia al script son bienvenidas. Esperando este script les ayude a hacer ruteos avanzados y ahorrar algo de dinero en sus cuentas telefónicas.




  • Script para detectar Pings de extensiones conectadas a servidor IP

    Hace unos días un Call Center me contactó para revisar la configuración de red, ya que presentaban problemas en su red como desconexión de llamadas y entre corte de llamadas.


    Para descartar problemas, primero se cambió el tipo de tarjeta del servidor de una ethernet con Realtek a una ethernet con Intel Gigabitl.


    Pero el problema seguía, se descartaba fuera un problema en el servidor, pues haciendo pruebas de ping desde los equipos de cómputo que se conectaban como softphones, veía caídas de ping hacia el gatewa de red y hacia el servidor de telefonía, por lo que descartaba un problema en el funcionamiento del servidor Asterisk.


    Mientras veía el SIP debug en Asterisk, noté que había pérdidas de paquetes hacia las IPs de las extensiones, algo anormal, pues esto llega a suceder con troncales IP pero no con extensiones a menos que un switch o haya un fallo en la red.


    Por lo que hice un script para que detectara las IPs conectadas y les hiciera un ping que tardara máximo un segundo en obtener respuesta. Con esto pude detectar que muchas extensiones no regresaban el ping, algo poco común y síntoma de que algo estaba fallando; se revisaron puertos de red cableado, etc., y todo bien; pero al revisar las computadoras nos dimos cuenta que las computadoras tenían activado un firewall que llegaba a tirar las conexiones, por lo que se creo una regla en el firewall de cada computadora que permitiera cualquier conexión TCP/UDP del servidor de telefonía.


    Con esto se arregló el problema y se eliminaron los problemas de caídas de llamadas y entrecortes.


    Aquí el script que permite detectar las IPs conectadas al Asterisk y hacerles un ping para detectar fallos.

     
    #!/bin/bash
    touch pings.txt
    asterisk -rx "sip show peers" |   gawk '{print $1}' FS="D" | grep 192  > pings.txt
     
    for i in `asterisk -rx "sip show peers" |   gawk '{print $2}' FS=" " | grep 192` ; do
            ping  $i -c 1 -W 1 >> pings.txt
    done
     

    De esos momentos en los que la eternidad dura cinco minutos

    De esos momentos en los que la eternidad dura cinco minutos.


    De esos momentos especiales que se aparecen repentinamente en tu vida, de los que quizá siempre busques o tal vez nunca imaginaste, pero que segundos antes de tenerlos frente a ti no tienes la mínima idea que al alzar la vista por fin lo podrás ver.





    De esos momentos en que descubres el majestuoso planeta donde vives, la gran madre tierra que a través de sus bellezas nos da pruebas de su amor a nosotros sus hijos rebeldes, a quien no paramos de dañarla día a día, sin embargo como toda madre nunca deja de mostrarnos lo más bello de su esencia a través de sus caricias que nos manifiesta de mil maneras.


    De esos momentos que descubres que no eres tan rudo como pensabas, cuando una lágrima de felicidad recorre tu rostro que queda perplejo, atónito, se siente bendecido y descubre la majestuosidad del planeta en el que vives.


    De esos momentos donde el espíritu encuentra la dicha, el alma su gloria, el pensamiento la libertad, el corazón la bondad, la amistad su porqué, el destino su quizá y el hombre su Shangri La.


    De esos momentos que siempre permanecerán en tus últimos recuerdos, los primeros que asaltarán cuando te nombren la montaña, los que compararás con otros atardeceres, los que serán tu excusa para regresar a la montaña, los que siempre buscarás en tu regreso a ella, de los que platicarás para convencer a tus amigos para escalarla, de esos momentos que siempre hablarás y muchos imaginarán, de los que pocos te creeran y otros dirán que bajaste la foto de internet.


    De esos momentos en que la teoría capitalista de la felicidad no aplica, donde nada tiene que ver la oferta ni la demanda, solo las circunstancias, donde tiempo y destino convergen en función de la pasión.


    De esos momentos en que tu corazón se detiene pero tu sangre no para de fluir, en que tu pensamiento para pero no deja de imaginar, en que tus pasos descansan pero tu alma no deja de sentir, en que tus ojos siguen abiertos pero no dejan de soñar, en que tu boca calla pero te dice mil palabras de lo que ve, en el que el cuerpo queda inerte pero el espíritu no para de sentir, en ese momento en que los pies no caminan pero el alma vuela.


    De esos momentos que descubres que vivir no es respirar si no que el vivir a veces te deja sin respirar, de esos momentos que descubres que el caminar no es avanzar si no avanzar es detenerse a contemplar, de esos momentos que un atardecer no es preámbulo de obscuridad si no un anuncio de iluminación eterna.


    De esos momentos que descubres que la montaña debería ser el octavo arte, la octava maravilla, el octavo pecado capital, la octava nota musical, el octavo día para descubrirla, la octava vida, el octavo color del arcoiris, de esos momentos que descubres que la montaña es un ciclo infinito como la representación del 8.


    De esos momentos que te das cuenta que el bautizo no es con agua si no con el aire de la montaña.


    De esos momentos donde la mejor obra de arte documentada nunca igualará al pincel que la naturaleza improvisa ante sus selectos espectadores.


    De esos momentos en que la eternidad dura apenas cinco minutos.


    Autor: @Phylevn

    Evita ser una víctima del phishing y no te roben tu cuenta bancaria.

    ¿Cómo funciona el phishing para cometer fraudes bancarios?


    Es muy común recibir correos que aparentemente envía algún Banco indicándonos que entremos a nuestra cuenta para actualizar datos o para confirmar un depósito recibido(sic).


    Actualmente en internet hay mucha información con nuestro nombre y correo electrónico, ya sea por haberla dado de alta en una red social, en el registro de un evento, etc. Esta información la usan los "hackers" para enviar SPAM simulando ser el banco.


    Para esto generan un correo personalizado con nuestro nombre y correo electrónico, aunque hay datos que no concuerdan en el correo pero lo pasamos desapercibido, por ejemplo en el número de tarjeta nunca ponen los últimos 4 dígitos, para confundir ponen los 4 primeros dígitos de la tarjeta, que siempre son los mismos dígitos en las tarjetas de cada banco, por ejemplo para Bancomer todas empiezan con 4152, aunque quizá no pase mucho para que los hackers conozcan los últimos 4 dígitos y hasta el NIP, pues he visto servicios de internet que hacen cobros bancarios y no encriptan su información, no tardará que algún hacker se les cuele y pondría en jaque a todos sus clientes, como ya ha sucedido con cientos de miles de tarjetas de crédito de clientes de Sony o Home Depot por ejemplo.


    El truco del phishing está en que al solicitar la validación del usuario, ellos aparentemente ponen la liga del banco, pero la URL real es un servidor hackeado que ha sido infectado, esto para cualquier informático es fácil de detectar, pero un usuario común lo pasa por alto y sin meditar le da click a la liga, sin saber que está siendo redireccionado a un servidor apócrifo, el cuál presenta toda la interfaz del banco, pero la información ahí introducida como número de tarjeta, clave, dígitos del token, NIP, dígitos de validación, etc. en realidad están siendo enviados al hacker quien inmediatamente prueba esa información para ver que puede obtener de esa falsificación.


    En la foto se alcanza a observar la IP del servidor hackeado y el script al cuál manda la URL supuestamente de Bancomer


    OJO el banco no envía correos para validación: El banco nunca les enviará un correo para validación de su cuenta o para verificación de sus datos, esta información se hace en el centro de atención telefónica o en la sucursal del banco.


    Introducir manualmente las direcciones web en el navegador: Lo que siempre hay que hacer es entrar a la página del banco introduciendo manualmente la dirección URL en la barra de direcciones del navegador.


    Siempre usar HTTPS: También siempre usar https, por ejemplo https://www.bancomer.com ya que es un protocolo seguro y encriptado, el cuál usa un certificado de seguridad avalado por una entidad internacional, en caso de que haya un ataque por DNS Spoofing de algún hacker que intente simular el servidor https://www.bancomer.com entonces el mismo navegador alertará que ese certificado es inválido y está siendo suplantado.


    No usar cybercafés: Algo altamente riesgoso es usar un cybercafé para revisar correos, cuentas de banco, etc. En dado de usarlos caso por alguna urgencia nunca usar el teclado físico, buscar el teclado virtual y utilizarlo para digitar numeros de cuenta y passwords.


    Esta forma de phising es la más fácil y económica de realizar por los hackers y pueden pescar algunos incautos. Existen otras más elaboradas que requieren mayor conocimiento de hacking, mezclando fallos de diversos protocolos, pero tienen un objetivo en específico y logran burlar incluso a usuarios medios incluso "expertos".


    Existen muchos tipos para evitar ser infectados por software espía, la primera es no ser tan curioso y no darle click a cualquier liga que muestre información "curiosa", el morbo siempre atrae pero también infecta.


    Huellas electrónicas en el aire

    Hace unos años salió un estudio que indicaba que es posible rastrear a una persona a partir de su ADN, el ADN de un individuo va cambiando conforme a los diversos lugares donde haya estado, de tal forma que se genera una combinación única por cada parte donde haya estado.


    Ahora, ha salido una aplicación que puede rastrear las huellas electrónicas que hayas dejado en el aire. La nueva tecnología Bluetooth Smart hace uso del protocolo Bluetooth Low Energy para mantener sincronización con diversos dispositivos, esta tecnología liga el ID del dispositivo la cuál es única en el mundo y va dejando ondas en los 2.4 Ghz en el aire, por lo que en algún momento estás ondas podrían captarse a través de un App como RaMBLE y buscar la info en una base de datos para encontrar a quien pertenece esa información. De tal forma que es posible rastrear a una persona con las "huellas electrónicas" que deje en el aire.


    Esto es muy peligroso, pues se calcula que en el 2018 el 90% de los dispositivos en el mundo usarán la tecnología BLE. Es peligroso pues si eres famoso, un poderoso empresario, un político, etc., los hackers podrán buscar algún rastro tuyo y en el menor de los casos quizá tomarte algunas fotos.


    https://play.google.com/store/apps/details?id=com.contextis.android.BLEScanner

    Consideraciones para contratar una troncal SIP de telefonía IP.

    Publico este post, ya que recurrentemente nuestros clientes nos solicitan información antes de contratar troncales IP SIP o migrar sus líneas telefónicas a troncales IP.


    Tipos de telefonía comerciales comunes :

  • Troncal de línea analógica: Es una línea tradicional que entrega un proveedor de telefonía en un cable con un par de hilos de cobre, cada línea ofrece una llamada simultánea. Este tipo de líneas es muy tradicional en uso residencial. Los conmutadores IP requieren de tarjetas con puertos FXO para líneas analógicas para conectar estas líneas, se requiere de un puerto FXO por cada línea analógica, por lo que el costo de las tarjetas aumenta considerablemente dependiendo del número de líneas a contratar. Cada línea analógica tiene su propio número, por lo que al sacar llamadas por cada una de las líneas, el que recibe la llamada podría ver un número diferente. Estas líneas pueden ser agrupadas a través de un número principal para tener un mismo número de llamada entrante, conservando también su número de línea.
  • Troncal digital E1: Es una conexión dedicada que ofrecen diversos proveedores de telefonía. Su instalación depende de la cobertura del proveedor. El tiempo de instalación puede llevarse desde quince días hasta más de un mes. Los conmutadores requieren de una tarjeta especial para esta conexión, cuando la troncal digital la entrega el proveedor en coaxial se requiere de un convertidor(balún) que convierta de coaxial a RJ45, aunque hay algunos conmutadores que permiten la conexión coaxial. La troncal digital E1 es muy fiable y de alta disponibilidad. Los costos varían por cada proveedor y no son muy económicos, son recomendables para empresas que requieren alto volumen de llamadas y alta disponibilidad. Cada troncal digital E1 puede proveer hasta 30 canales de voz.
  • Troncal IP(SIP/IAX/H323/MGCP/SCCP): Es un servicio de telefonía que empiezan a ofrecer diversos proveedores de telefonía en México y en el mundo. Se conectan a través de internet o a través de una conexión de red del mismo proveedor. Una troncal IP puede ofrecer N número de llamadas dependiendo de la conexión de internet disponible. El conmutador no requiere de una tarjeta especial para su conexión pues se conecta a través de una tarjeta de red ethernet, es recomendable que sea una tarjeta ethernet gigabit para servidores. Su costo es más económico que una troncal digital E1 y relativamente más elevado que una línea analógica. El tiempo de implementación en el servidor IP del cliene es instantánea, depende de la activación y habilitación del proveedor de telefonía.


    Consideraciones de una troncal IP SIP


    Una troncal IP SIP, es un servicio que ofrecen los proveedores de telefonía para proveer telefonía a través de internet. Este servicio hace uso del internet que disponga el usuario final, o el proveedor de telefonía puede instalar su propia infraestructura de internet para mejor calidad de la voz.


    SIP Es un protocolo estándar que usan diversos proveedores de telefonía en México y en el mundo, se puede decir que es el protocolo estándar y es enteramente compatible entre diversas marcas de equipos y proveedores.


    Una troncal IP de un proveedor de telefonía se conecta a través de internet, esta conexión puede ser a través de un proveedor de internet de un tercero. Por ejemplo contratar una troncal IP SIP de Axtel y usar una conexión de internet de Telmex. También hay proveedores que instalan su propia conexión de internet, por ejemplo Iusacell O Maxcom que instalan su propia infraestructura en el sitio del cliente y tener una conexión de red que no dependa de un tercero.


    El proveedor de telefonía IP al requerir una conexión de internet de un proveedor tercero, generalmente requiere IP Pública Fija para validación de la troncal de telefonía IP y al menos requiere 1 mbit de velocidad de subida. Es importante tomar en cuenta que la IP Pública Fija tienen un costo adicional en los servicios de internet contratados. Algunos proveedores de telefonía IP no requieren IP Pública fija, pero si podrían requerir IP Pública dinámica, por ejemplo Alestra.


    Una IP Pública fija, es una dirección de internet única en el mundo, esta IP no cambia nunca en su servicio de internet por el periodo contratado de la IP.

    Una IP Pública dinámica es una dirección que puede cambiar cada 24 horas en el router de internet.


    La conexión de internet se mide en velocidad de subida y bajada, generalmente la velocidad de bajada es mayor que la subida, por ejemplo telmex puede ofrecer 10mbits de bajada con 1 Mbit de subida. Esta conexión se puede medir usando la página speedtest.net


    Un proveedor IP que ofrece troncales SIP, generalmente vende su servicio por canales de voz, pueden ser 5,10,15,20,25,30,etc., canales de voz, todo depende de la conexión de internet y del número de llamadas simultáneas de entrada y salida que se requieran. Un canal de voz regularmente ocupa 100kbps de ancho de banda, por lo que si se tiene solo 1 Mbit de subida y el internet es dedicado a voz, entonces se pueden tener 10 llamadas simultáneas.
    Si el mismo internet se usa para correo electrónico, mensajería, web, multimedia, etc., entonces el rendimiento del internet disminuye y por ende el número de canales de voz a tener es variable y no se garantiza.


    Una troncal IP puede ofrecer N canales de llamadas salientes o entrantes, o ambas, dependiendo el plan contratado. Al tener una troncal IP por ejemplo de 10 canales de voz para llamadas salientes y entrantes, se podrán hacer 10 llamadas simultáneas a la calle y todas saldrían con el mismo Caller ID, es decir las 10 personas que reciben las llamadas verán el mismo número telefónico de la troncal. Este número o DID se llama cabeza de grupo o número principal, esto permitirá recibir N canales de voz de llamadas entrantes a través del mismo número. Ese DID puede recibir llamadas simultáneas como el número de canales de voz contratados.


    Adicionalmente los proveedores de telefonía aparte del número(DID) principal de la troncal IP, ofrecen también DID adicionales, estos DID pueden ser número directos que se configuren para ir a una extensión o para algún servicio adicional.


    Los planes de telefonía varían por cada proveedor IP, es recomendable consultar a cada proveedor y comentarle del volumen de llamadas planeadas a realizar, para que con base a ello, los proveedores ofrezcan algún plan que se ajuste a sus necesidades.


    El conmutador IP Asterisk PBX CloudVoox permite configurar múltiples proveedores de telefonía en el mismo servidor. Lo que facilita hacer el ruteo de llamadas saientes con base a la tarifa más baja.


    En México existen diversos proveedores de telefonía IP como Axtel, Maxcom, Iusacell, Telmex, Alestra, Logitel, Gtel, Izzy, Ajtel, etc., también existen proveedores en USA como Callcentric, Net2phone, voipjet, inphonex, etc. Al ser proveedores de telefonía IP vía internet se puede conectar a cualquiera de ellos, siempre y cuando no requieran conexión de internet propia del proveedor. La diferencia está en la facturación, los proveedores mexicanos facturan pero los extranjeros no.


    El tiempo de conexión de una troncal IP SIP en el servidor IP Asterisk PBX CloudVoox puede ser instantánea, el detalle está en el proveedor en lo que activa y habilita la troncal en si central, esto puede tardar desde un día hasta varias semanas.


    Para más información de conmutadores IP y consultoría para implementación de telefonía IP puede consultarnos en http://www.oaxrom.com
  • Curso de configuración de firewalls en Oaxaca 12 Junio de 2015

    Curso de implementación de Firewall en Linux.

  • Fecha: 12 de Junio de 2015
  • Lugar: Oaxaca de Juárez.
  • Sesiones: 1
  • Horario: 9:00-14:00 16:00-20:00
  • Costo: Aportación voluntaria que será donada a la ciudad de los niños de la Ciudad de Oaxaca.


    Material entregable: Appliance de seguridad instalable.
    Objetivo: Adentrar a los estudiantes de sistemas en el uso de linux e implementación de appliances de seguridad en el mundo empresarial.


    CUPO LIMITADO.



    El curso tiene como fin adentrar a los estudiantes de computación en el mundo de la seguridad informática basada en Linux y FreeBSD.


    El objetivo del curso será ejemplificar a través de prácticas de redes la configuración de diversas situaciones que se exigen en el mundo real.


    Prácticas a realizar:

  • Configuración de Firewalls.
  • Filtrado por direcciones Mac/IP/Subnet.
  • Balanceador de conexiones de internet.
  • Detector de Intrusos(IDS).
  • Prevención de Intrusos(IPS).
  • Redes Privadas Virtuales(VPNs)
  • Filtrado de contenido web(Web Proxy)
  • Ruteo estático y dinámico.
  • VLANs
  • Seguridad inalámbrica y hacking.
  • Site Surveys
  • Servidores DHCP
  • Monitoreo de tráfico.
  • Monitoreo de red.
  • Nmap
  • Network Address Translation(NAT)
  • Portal Cautivo
  • Comandos linux para monitoreo, configuraciÅ„ y administración de redes.
  • Revisión de logs.

    Importante: El asistente deberá contar con su propio equipo de cómputo para hacer la instalación de las diversas plataformas de seguridad a revisar.
  • Script para convertir archivos mp4, Avi o 3gp a formato MP3 con ffmpeg

    Hace unos días dañé mis audífonos onkyo al recorrer una gruta de 12 Km en Guerrero, la mayor parte del recorrido era sumergirse en un río, por lo que al no poder vivir sin música para leer, escribir, dibujar, programar, configurar, caminar, hacer ejercicio, etc., adquirí unos nuevos audífonos, pero fui engañado vilmente por la mercadotecnia de Sony, ya que vi unos audífonos que decían "Wireless Headphones 3 in 1" con 20 horas de uso continuo -dije, ¡caray! eso es lo que necesito para esas caminatas extremas-, en la vitrina había otros audífonos bluetooth de diferentes marcas como Nakazaky, Coby, Q y RCA, y al parecer estos eran la onda así que apliqué la de "take my money and shut up".


    El detalle fue al llegar a mi casa, emocionado después de recargar la batería e intentar probarlos, veo que en realidad no eran bluetooth, si no que tienen una paupérrima memoria de 4Gb, por lo que solo son unos vulgares audífonos con reproductor mp3 :S


    3 in 1, porque son Mp3 Player, tienen un cable para conectar a cualquier dispositivo ¡Odio los cables! y también tienen unos audífonos secundarios como bocinas externas que solo funcionan con el reproductor mutimedia y no con reproductores externos.


    El detalle que por la emoción ya había destrozado el empaque y ni como solicitar el cambio :S


    Así que traté de tranquilizarme, respiré profundamente, y quise probar el reproductor multimedia, pero oh sorpresa, no reproduce archivos 3gp que es como descargo los playlist desde youtube, por lo que al tener miles de archivos y convertir uno por uno a mp3 no era opción, así que rápidamente me puse a programar un script que me convirtiera todos mis archivos 3gp, avi o mp4 a mp3.



    Y después de varios minutos todos los archivos quedaron convertidos a MP3 con este script, el detalle que con esos 4Gb no pude pasar mi colección completa de música, pero al menos la necesaria, aunque no hay libre albedrío para escuchar la música que quieres, todo depende del shuffle del reproductor.


    Este script lee un directorio origen donde se encuentren todos los archivos de música, busca directorio por directorio los formatos indicados y después en un segundo directorio indicado va creando las carpetas encontradas y ahí convierte los archivos a mp3 usando ffmpeg quien es el que hace el trabajo sucio face-smile.png

     
    <?php
            $directorio = "/home/oaxrom/musica";
            $directorio_mp3 = "/home/oaxrom/musica/mp3";
            $extensiones = "3gp|mp4|avi";
           
            if(is_dir($directorio_mp3)==false){
                    mkdir("$directorio_mp3", 0755, true);
            }      
            $_dirs = obtiene_directorios($directorio);
            convierte_musica($directorio_mp3, $_dirs, $extensiones, "mp3", $directorio);
     
            function obtiene_directorios($directorio_musica){
                    $_directorios = scandir($directorio_musica);
                    $_dirs= array();
                    foreach($_directorios as $directorio){
                            if(is_dir($directorio) && in_array($directorio, array(".", ".."))==false ){
                                    array_push( $_dirs, $directorio);
                            }
                    }
                    array_multisort($_dirs, SORT_DESC, SORT_NUMERIC);
                    return $_dirs;
            }
           
           
            function convierte_musica($dir_mp3, $_dirs, $extensiones, $formato, $dir_musica){
                    $count=0;
                    foreach($_dirs as $dir){
                            if(is_dir("$dir_mp3/$dir")==false){
                                    mkdir("$dir_mp3/$dir", 0755, true);
                                    convierte_mp3("$dir_mp3/$dir", $dir, $extensiones, $formato, "$dir_musica/$dir");
                            }
                    }
            }
           
            function convierte_mp3($dir_mp3, $dir, $extensiones, $formato, $dir_musica){
                    echo "::::::::::::$dir\n:::::::::::";
                    $_archivos = scandir("$dir_musica");
                    foreach($_archivos as $archivo){
                            if(is_dir($archivo)==false && in_array($archivo, array(".", ".."))==false && preg_match("/($extensiones)$/",$archivo) ){
                                    $archivo_mp3 = preg_replace("/[^A-Za-z0-9_-\s]/", "", $archivo);
                                    $archivo_mp3 = preg_replace("/[\s]/", "_", $archivo_mp3);
                                    $archivo_mp3 = preg_replace("/($extensiones)$/", ".mp3", $archivo_mp3);
                                    echo "ffmpeg -i \"$dir_musica/$archivo\" -c:a libmp3lame \"$dir_mp3/$archivo_mp3\" \n";
                                    exec("ffmpeg -i \"$dir_musica/$archivo\" -c:a libmp3lame \"$dir_mp3/$archivo_mp3\" ");
                            }
                    }
            }
    ?>
     


    P.D. Se venden "fantásticos" audífonos Walkman Sony "Wireless 3 in 1"

    Previous page 1 2 3 4 ... 49 Next page
    487 entries

    Emblems