<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">

<channel>
	<title>Lo hice y lo entendí</title>
	
	<link>http://www.vicente-navarro.com/blog</link>
	<description>El blog de Vicente Navarro</description>
	<lastBuildDate>Wed, 29 Apr 2015 20:30:28 +0000</lastBuildDate>
	<language>es-ES</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.19</generator>
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feed.vicente-navarro.com/LoHiceYLoEntendi" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="lohiceyloentendi" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Recuperar los ficheros de un dispositivo Android encriptado cuando la pantalla no funciona</title>
		<link>http://www.vicente-navarro.com/blog/2015/04/29/recuperar-los-ficheros-de-un-dispositivo-android-encriptado-cuando-la-pantalla-no-funciona/</link>
		<comments>http://www.vicente-navarro.com/blog/2015/04/29/recuperar-los-ficheros-de-un-dispositivo-android-encriptado-cuando-la-pantalla-no-funciona/#comments</comments>
		<pubDate>Wed, 29 Apr 2015 20:30:28 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[adb]]></category>
		<category><![CDATA[encriptación]]></category>
		<category><![CDATA[particiones]]></category>
		<category><![CDATA[recovery]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1298</guid>
		<description><![CDATA[Bueno, pues conseguí encriptar el móvil con CyanogenMod 11 (Problemas para encriptar el móvil/tablet Android con una Custom ROM), y así lo usé razonablemente contento durante bastantes semanas. Hasta que anteyaer, fatídico día, se me cayó el móvil al suelo y la pantalla se rompió. Lo encendía y vibraba, los LEDs se iluminaban, etc. pero [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Bueno, pues conseguí encriptar el móvil con CyanogenMod 11 (<a href="/blog/2015/04/29/problemas-para-encriptar-el-movil-tablet-android-con-una-custom-rom">Problemas para encriptar el móvil/tablet Android con una Custom ROM</a>), y así lo usé razonablemente contento durante bastantes semanas. Hasta que anteyaer, fatídico día, se me cayó el móvil al suelo y la pantalla se rompió. Lo encendía y vibraba, los LEDs se iluminaban, etc. pero la pantalla estaba siempre completamente negra. Es evidente que el móvil funcionaba pero la pantalla no.</p>
<p>Tras lamentar la pérdida, tocaba contención de daños: en el móvil había fotos y otros documentos en la memoria interna que era importante recuperar. Y encima&#8230; ¡la partición de datos estaba encriptada!</p>
<p>Para conseguir encriptar el móvil en su día, la clave fue usar el adb conectado al recovery, una puerta de entrada excelente y sencilla al móvil en su estado actual. Así que tras múltiples intentos, y totalmente a ciegas (para empezar, sin saber nunca seguro si el móvil estaba apagado o encendido) conseguí entrar en el recovery (en el Samsung Galaxy S III, pulsando a la vez <em>home</em>, volumen arriba y el botón de encendido). Y supe que estaba en el recovery cuando el <code>adb shell</code> me funcionó (¡qué alegría me llevé!):</p>
<blockquote><pre>C:\adb>adb shell
~ #</pre>
</blockquote>
<p>Una vez dentro, sólo tuve que montar el sistema de ficheros (encriptado) /data con estos comandos (<a href="http://niki.hammler.net/wiki/Android_Device_Encryption">Android Device Encryption</a>):</p>
<blockquote><pre>~ # setprop ro.crypto.state encrypted
setprop ro.crypto.state encrypted
~ # vdc cryptfs checkpw 'CLAVE_DE_ENCRIPTACION_DE_VICENTE'
vdc cryptfs checkpw 'CLAVE_DE_ENCRIPTACION_DE_VICENTE'
200 0 0
~ # mount -o ro /dev/block/dm-0 /data
mount -o ro /dev/block/dm-0 /data</pre>
</blockquote>
<p>y, no me lo podía creer&#8230; ¡ya podía ver mis ficheros!</p>
<p>Así que cuando finalmente pude copiarlos al disco duro local:</p>
<blockquote><pre>C:\adb>adb pull /data/media/0
pull: building file list...
...
pull: /data/media/0/DCIM/Camera/IMG_20150420_200931.jpg -> ./DCIM/Camera/IMG_20150420_200931.jpg
pull: /data/media/0/DCIM/Camera/IMG_20150415_201132.jpg -> ./DCIM/Camera/IMG_20150415_201132.jpg
pull: /data/media/0/DCIM/Camera/IMG_20150412_172014.jpg -> ./DCIM/Camera/IMG_20150412_172014.jpg
pull: /data/media/0/DCIM/Camera/VID_20150411_233428.mp4 -> ./DCIM/Camera/VID_20150411_233428.mp4
...</pre>
</blockquote>
<p>¡el éxtasis fue absoluto!</p>
<p>¡Cómo echo de menos jugar con estas cosas (y poder contarlas en el blog) más a menudo!</p>
<p>:wq!</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2015 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2015/04/29/recuperar-los-ficheros-de-un-dispositivo-android-encriptado-cuando-la-pantalla-no-funciona/#comments">4 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/adb/" rel="tag">adb</a>, <a href="http://www.vicente-navarro.com/blog/tag/android/" rel="tag">Android</a>, <a href="http://www.vicente-navarro.com/blog/tag/encriptacion/" rel="tag">encriptación</a>, <a href="http://www.vicente-navarro.com/blog/tag/particiones/" rel="tag">particiones</a>, <a href="http://www.vicente-navarro.com/blog/tag/recovery/" rel="tag">recovery</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2015/04/29/problemas-para-encriptar-el-movil-tablet-android-con-una-custom-rom/" title="Problemas para encriptar el móvil/tablet Android con una Custom ROM (29 abril 2015)">Problemas para encriptar el móvil/tablet Android con una Custom ROM</a> (5)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/07/25/recuperacion-de-particiones-perdidas-con-gpart/" title="Recuperación de particiones perdidas con gpart (25 julio 2008)">Recuperación de particiones perdidas con gpart</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/09/29/probar-en-virtualbox-una-memoria-usb-de-arranque/" title="Probar en VirtualBox una memoria USB de arranque (29 septiembre 2008)">Probar en VirtualBox una memoria USB de arranque</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2011/11/25/pequenos-trucos-para-windows/" title="Pequeños trucos para Windows (25 noviembre 2011)">Pequeños trucos para Windows</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/02/20/montar-una-imagen-raw-de-qemu-los-primeros-32-kbytes-de-un-disco/" title="Montar una imagen raw de Qemu. Los primeros 32 Kbytes de un disco. (20 febrero 2007)">Montar una imagen raw de Qemu. Los primeros 32 Kbytes de un disco.</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/07/27/montar-imagenes-de-disco-vdi-de-virtualbox/" title="Montar imágenes de disco vdi de VirtualBox (27 julio 2008)">Montar imágenes de disco vdi de VirtualBox</a> (1)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/ZFyFXwF1BdE" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2015/04/29/recuperar-los-ficheros-de-un-dispositivo-android-encriptado-cuando-la-pantalla-no-funciona/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Problemas para encriptar el móvil/tablet Android con una Custom ROM</title>
		<link>http://www.vicente-navarro.com/blog/2015/04/29/problemas-para-encriptar-el-movil-tablet-android-con-una-custom-rom/</link>
		<comments>http://www.vicente-navarro.com/blog/2015/04/29/problemas-para-encriptar-el-movil-tablet-android-con-una-custom-rom/#comments</comments>
		<pubDate>Wed, 29 Apr 2015 20:29:48 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[adb]]></category>
		<category><![CDATA[custom ROM]]></category>
		<category><![CDATA[CyanogenMod]]></category>
		<category><![CDATA[encriptación]]></category>
		<category><![CDATA[particiones]]></category>
		<category><![CDATA[recovery]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1262</guid>
		<description><![CDATA[A pesar de que mi vida gravita desde hace años alrededor de otros polos, si hay algo que me atrae enormemente, y que me encantaría poder tener tiempo para explorar, es el desarrollo en dispositivos Android; área que ya tuvo un pequeño hueco en este mismo blog en Desempaquetando el firmware de móviles y tablets [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>A pesar de que mi vida gravita desde hace años alrededor de otros polos, si hay algo que me atrae enormemente, y que me encantaría poder tener tiempo para explorar, es el desarrollo en dispositivos Android; área que ya tuvo un pequeño hueco en este mismo blog en <a href="/blog/2013/02/01/desempaquetando-el-firmware-de-moviles-y-tablets-android-de-samsung/">Desempaquetando el firmware de móviles y tablets Android de Samsung</a>.</p>
<p>Sin embargo, en las últimas semanas me he visto &#8220;forzado&#8221; (¡ya!¡como si no me gustara!) a ponerme un poco las pilas con todo esto cuando mi empresa decidió exigir la encriptación del dispositivo para poder conectar al servidor de correo Exchange. Esto no le sentó nada bien a mi <a href="http://en.wikipedia.org/wiki/Samsung_Galaxy_S_III">Samsung Galaxy SIII</a>, que nunca antes me había dado ningún problema serio, pero que tan pronto como lo encripté pasó a tener un rendimiento realmente lamentable (p.e. <em>lags</em> de varios segundos en el <em>launcher</em> o al intentar abrir cualquier aplicación&#8230; ¡incluso la de teléfono!). Reiniciar el móvil al estado de fábrica y comenzar de nuevo (siempre con encriptación, claro) tampoco ayudaba.</p>
<p>Así que me decidí a probar alguna &#8220;<a href="http://en.wikipedia.org/wiki/List_of_custom_Android_firmwares">Custom ROM</a>&#8220;, ya que algunas tenían fama de tener muy buen rendimiento. Para ello, comencé instalando el &#8220;<a href="http://wiki.cyanogenmod.org/w/All_About_Recovery_Images">Custom Recovery</a>&#8221; <a href="http://forum.xda-developers.com/galaxy-s3/development/i93xx-philz-touch-t2002953">PhilZ Touch</a> con <a href="http://forum.xda-developers.com/galaxy-s3/themes-apps/27-08-2013-odin-3-09-odin-1-85-versions-t2189539">Odin</a> (<a href="http://www.htcmania.com/showthread.php?t=538240">Cómo instalar una custom ROM en el Samsung i9300</a>) y empecé a probar varias ROMs, algunas basadas en la original de Samsung (<em>stock</em>) (como <a href="http://forum.xda-developers.com/galaxy-s3/development/rom-revolutionary-s5-v3-buy-s5-t2602543">Revolutionary S5</a>), y otras basadas en <a href="http://en.wikipedia.org/wiki/Android_%28operating_system%29#AOSP">AOSP</a> (como <a href="http://forum.xda-developers.com/galaxy-s3/development/rom-smartdroid-aosp-v45-0-b82-t2624535">SmartDroid AOSP</a> o <a href="http://forum.xda-developers.com/galaxy-s3/development/rom-archidroid-v1-7-16-power-hands-t2228171">ArchiDroid</a>). Pero al final la que más me convenció fue simplemente la <a href="http://forum.xda-developers.com/galaxy-s3/orig-development/rom-cyanogenmod-11-nightlies-t2529775">CyanogenMod 11</a>, más que nada por su minimalismo y sencillez.</p>
<p>Todas ellas tenían sus pros y sus contras. Sin embargo, con todas ellas tuve el mismo problema: No podía conectarme a Exchange porque en cuanto comenzaba el proceso de encriptación de los datos, el móvil se quedaba colgado en la pantalla del comienzo de la encriptación, donde sale el robot de Android, y no hacía nada más:</p>
<p><img src="http://www.vicente-navarro.com/blog/wp/img/2015/04/encroid_waiting_black.png" alt="Android Encrypting" width="228" height="264" class="aligncenter size-full wp-image-1266" /></p>
<p><small><strong>Nota:</strong> <a href="https://github.com/android/platform_packages_apps_settings/blob/master/res/drawable-xhdpi/encroid_resignin.png">Esta imagen, encroid_waiting.png, está en el Settings.apk</a></small></p>
<p>Incluso era posible pulsar el botón de <em>home</em> y volver al <em>launcher</em> y seguir trabajando con normalidad.</p>
<p>Tras instalar el <a href="http://developer.samsung.com/technical-doc/view.do?v=T000000117">Driver de Samsung para ADB</a> y el <a href="http://developer.android.com/tools/help/adb.html">ADB</a> (con el &#8220;<a href="http://forum.xda-developers.com/showthread.php?p=48915118#post48915118">15 seconds ADB Installer</a>&#8220;), me conecté a la shell del móvil para ver qué pasaba durante la encriptación y con el comando <a href="http://developer.android.com/tools/help/logcat.html"><code>logcat</code></a> descubrí la clave del problema:</p>
<blockquote><p><code>E/Cryptfs ( 1899): Orig filesystem overlaps crypto footer region.  Cannot encrypt in place.</code></p></blockquote>
<p>Dicho error me llevó a &#8220;<a href="http://forum.cyanogenmod.org/topic/82292-cm102-encryption-does-not-start-stuck-at-splash-screen/">Cm10.2 &#8211; Encryption Does Not Start, Stuck At Splash Screen</a>&#8221; y a &#8220;<a href="http://forum.xda-developers.com/showthread.php?t=1792101">[Q] ClockworkMod wipe blocking encryption?</a>&#8220;, donde descubrí que el problema es que:</p>
<blockquote><p>What I&#8217;ve discovered is that the dmcrypt layer requires 16kb of space at the end of the /data partition to store its volume keys.</p></blockquote>
<p>Es decir, <strong>hay que dejar 16 KiB libres al final de la partición para poder encriptar el volumen</strong> y es obvio que el recovery que yo estaba usando no lo estaba haciendo al recrear /data (tal vez haya algún otro recovery que sí que lo haga). Así que, siguiendo las instrucciones, arranqué el móvil en modo <em>recovery</em> y me conecté a su shell con adb:</p>
<blockquote><pre>C:\adb>adb shell
~ # mount
mount
rootfs on / type rootfs (rw)
tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,mode=755)
devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,seclabel,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
tmpfs on /storage type tmpfs (rw,seclabel,relatime,mode=050,gid=1028)
tmpfs on /mnt/secure type tmpfs (rw,seclabel,relatime,mode=700)
tmpfs on /mnt/fuse type tmpfs (rw,seclabel,relatime,mode=775,gid=1000)
/dev/block/mmcblk0p8 on /cache type ext4 (rw,seclabel,relatime,errors=panic,user_xattr,barrier=1,journal_async_commit,data=ordered)
/dev/block/mmcblk0p12 on /data type ext4 (rw,seclabel,relatime,errors=panic,user_xattr,barrier=1,journal_async_commit,data=writeback,noauto_da_alloc,discard)</pre>
</blockquote>
<p>y pude ver que /data era el volumen <code>/dev/block/mmcblk0p12</code>. Luego vi el tamaño de dicho volumen, 12091392 bloques (~11.5GB):</p>
<blockquote><pre>~ # cat /proc/partitions
cat /proc/partitions
major minor  #blocks  name

 179        0   15388672 mmcblk0
 179        1       4096 mmcblk0p1
 179        2       4096 mmcblk0p2
 179        3      20480 mmcblk0p3
 179        4       8192 mmcblk0p4
 179        5       8192 mmcblk0p5
 179        6       8192 mmcblk0p6
 179        7      32768 mmcblk0p7
 179        8    1048576 mmcblk0p8
 179        9    1572864 mmcblk0p9
 179       10     573440 mmcblk0p10
 179       11       8192 mmcblk0p11
 179       12   12091392 mmcblk0p12
 179       16   30931968 mmcblk1
 179       17   30927872 mmcblk1p1</pre>
</blockquote>
<p>y tras desmontar el sistema de ficheros:</p>
<blockquote><pre>~ # umount /data
umount /data</pre>
</blockquote>
<p>volví a crear el sistema de ficheros dejando algo de espacio al final, especificando que usara 12091300 bloques, unos pocos menos que los 12091392 disponbles:</p>
<blockquote><pre>~ # mke2fs -T ext4 -L data /dev/block/mmcblk0p12 12091300
mke2fs -T ext4 -L data /dev/block/mmcblk0p12 12091300
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=data
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
755904 inodes, 3022825 blocks
151141 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3095396352
93 block groups
32768 blocks per group, 32768 fragments per group
8128 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.</pre>
</blockquote>
<p>tras lo cual reinicié:</p>
<blockquote><pre>~ # reboot
reboot</pre>
</blockquote>
<p>y ya dentro del sistema (tuve que configurarlo todo de nuevo, claro), ¡pude finalmente encriptar /data sin problemas!</p>
<p>Por cierto, con CyanogenMod el rendimiento es mejor, ahora ya aceptable, pero tampoco super fluído, me temo&#8230;</p>
<p>:wq!</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2015 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2015/04/29/problemas-para-encriptar-el-movil-tablet-android-con-una-custom-rom/#comments">4 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/adb/" rel="tag">adb</a>, <a href="http://www.vicente-navarro.com/blog/tag/android/" rel="tag">Android</a>, <a href="http://www.vicente-navarro.com/blog/tag/custom-rom/" rel="tag">custom ROM</a>, <a href="http://www.vicente-navarro.com/blog/tag/cyanogenmod/" rel="tag">CyanogenMod</a>, <a href="http://www.vicente-navarro.com/blog/tag/encriptacion/" rel="tag">encriptación</a>, <a href="http://www.vicente-navarro.com/blog/tag/particiones/" rel="tag">particiones</a>, <a href="http://www.vicente-navarro.com/blog/tag/recovery/" rel="tag">recovery</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2015/04/29/recuperar-los-ficheros-de-un-dispositivo-android-encriptado-cuando-la-pantalla-no-funciona/" title="Recuperar los ficheros de un dispositivo Android encriptado cuando la pantalla no funciona (29 abril 2015)">Recuperar los ficheros de un dispositivo Android encriptado cuando la pantalla no funciona</a> (5)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/07/25/recuperacion-de-particiones-perdidas-con-gpart/" title="Recuperación de particiones perdidas con gpart (25 julio 2008)">Recuperación de particiones perdidas con gpart</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/09/29/probar-en-virtualbox-una-memoria-usb-de-arranque/" title="Probar en VirtualBox una memoria USB de arranque (29 septiembre 2008)">Probar en VirtualBox una memoria USB de arranque</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2011/11/25/pequenos-trucos-para-windows/" title="Pequeños trucos para Windows (25 noviembre 2011)">Pequeños trucos para Windows</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/02/20/montar-una-imagen-raw-de-qemu-los-primeros-32-kbytes-de-un-disco/" title="Montar una imagen raw de Qemu. Los primeros 32 Kbytes de un disco. (20 febrero 2007)">Montar una imagen raw de Qemu. Los primeros 32 Kbytes de un disco.</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/07/27/montar-imagenes-de-disco-vdi-de-virtualbox/" title="Montar imágenes de disco vdi de VirtualBox (27 julio 2008)">Montar imágenes de disco vdi de VirtualBox</a> (1)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/sgF3mEp1NF4" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2015/04/29/problemas-para-encriptar-el-movil-tablet-android-con-una-custom-rom/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Configurando routers domésticos desde la línea de comandos con wget</title>
		<link>http://www.vicente-navarro.com/blog/2013/02/28/configurando-routers-domesticos-desde-la-linea-de-comandos-con-wget/</link>
		<comments>http://www.vicente-navarro.com/blog/2013/02/28/configurando-routers-domesticos-desde-la-linea-de-comandos-con-wget/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 19:33:42 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Cisco EPC3825]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Home Station]]></category>
		<category><![CDATA[wget]]></category>
		<category><![CDATA[WiFi]]></category>
		<category><![CDATA[Zyxel 660HW]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1187</guid>
		<description><![CDATA[En ocasiones puede ser útil cambiar alguna configuración de nuestros routers domésticos (ADSL, cable, etc.) desde línea de comandos, de forma que podamos hacer cambios de forma automatizada con scripts. Por ejemplo, podríamos querer abrir el puerto SSH en el router al detectar un Port Knocking. O podríamos querer abrir un puerto sólo a ciertas [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>En ocasiones puede ser útil cambiar alguna configuración de nuestros routers domésticos (ADSL, cable, etc.) desde línea de comandos, de forma que podamos hacer cambios de forma automatizada con scripts.</p>
<p>Por ejemplo, podríamos querer abrir el puerto SSH en el router al detectar un <a href="/blog/2011/10/20/port-knocking/">Port Knocking</a>. O podríamos querer abrir un puerto sólo a ciertas horas; o sólo como parte de otra tarea.</p>
<p>También puede ser útil para configurar el WiFi (desactivarlo, activarlo, cambiarle la clave, etc.). En esta entrada vamos a ver, a modo de ejemplo, cómo desactivar o activar el WiFi de varios routers domésticos interaccionando con su interfaz web usando únicamente <code>wget</code>. Un <a href="http://wiki.bandaancha.st/Zyxel_P660HW-D1">Zyxel P660HW-D1</a>, un <a href="http://www.movistar.es/particulares/ayuda/internet/adsl/equipamiento-adsl/routers/home-station-amper-asl26555">Home Station Amper ASL 26555</a> y un <a href="http://wiki.bandaancha.st/Cisco_EPC3825">Cisco EPC3825</a> serán nuestros conejillos de indias.</p>
<p>Los servidores web de los routers domésticos a menudo usan <a href="http://en.wikipedia.org/wiki/Basic_access_authentication">autentificación básica</a> (caso del Zyxel y del Home Station). En otros casos usan <a href="http://en.wikipedia.org/wiki/HTTP_cookie">cookies</a> para mantener la sesión (caso del Cisco). En ocasiones, la sesión se identifica únicamente con la IP del cliente, de forma que no se permiten accesos concurrentes desde otras IPs (caso del Zyxel). Dichas peticiones pueden hacerse con <a href="http://en.wikipedia.org/wiki/POST_%28HTTP%29">POST</a>s (Cisco, Zyxel) o simplemente con parámetros en la URL (Home Station).</p>
<p>La extensión &#8220;<a href="https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/">Live HTTP Headers</a>&#8221; para Firefox nos hará muy sencillo ver qué ocurre mientras usamos la web de configuración del router. El <code>wget</code> nos permitirá replicar las mismas operaciones desde línea de comandos.</p>
<p>(...)<br/><br/>Leer el resto de <a href="http://www.vicente-navarro.com/blog/2013/02/28/configurando-routers-domesticos-desde-la-linea-de-comandos-con-wget/">Configurando routers domésticos desde la línea de comandos con wget</a> (615 palabras)</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2013 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2013/02/28/configurando-routers-domesticos-desde-la-linea-de-comandos-con-wget/#comments">5 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/cisco-epc3825/" rel="tag">Cisco EPC3825</a>, <a href="http://www.vicente-navarro.com/blog/tag/cookies/" rel="tag">cookies</a>, <a href="http://www.vicente-navarro.com/blog/tag/firefox/" rel="tag">Firefox</a>, <a href="http://www.vicente-navarro.com/blog/tag/home-station/" rel="tag">Home Station</a>, <a href="http://www.vicente-navarro.com/blog/tag/wget/" rel="tag">wget</a>, <a href="http://www.vicente-navarro.com/blog/tag/wifi/" rel="tag">WiFi</a>, <a href="http://www.vicente-navarro.com/blog/tag/zyxel-660hw/" rel="tag">Zyxel 660HW</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/13/midiendo-el-ancho-de-banda-de-red-con-iperf-y-con-scp-netcat-wget/" title="Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget) (13 diciembre 2008)">Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget)</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/03/09/hosting-casero-howto/" title="Hosting casero HOWTO (9 marzo 2008)">Hosting casero HOWTO</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2009/02/22/crear-los-certificados-ssl-para-nuestro-servidor-web-https-con-apache-openssl-y-debian-lenny/" title="Crear los certificados SSL para nuestro servidor web HTTPS con Apache, OpenSSL y Debian Lenny (22 febrero 2009)">Crear los certificados SSL para nuestro servidor web HTTPS con Apache, OpenSSL y Debian Lenny</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/11/18/ya-tenemos-un-plugin-de-flash-nativo-para-linux-de-64-bits/" title="Ya tenemos un plugin de Flash nativo para Linux de 64 bits (18 noviembre 2008)">Ya tenemos un plugin de Flash nativo para Linux de 64 bits</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/04/05/web-fonts-fuentes-descargables-para-la-web/" title="Web Fonts, fuentes descargables para la web (5 abril 2008)">Web Fonts, fuentes descargables para la web</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/06/03/wake-on-lan/" title="Wake on LAN (3 junio 2007)">Wake on LAN</a> (1)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/pxOjYrEhqP8" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2013/02/28/configurando-routers-domesticos-desde-la-linea-de-comandos-con-wget/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>rdiffdir: Sincronizando directorios entre sistemas distintos sin usar la red</title>
		<link>http://www.vicente-navarro.com/blog/2013/02/08/rdiffdir-sincronizando-directorios-entre-sistemas-distintos-sin-usar-la-red/</link>
		<comments>http://www.vicente-navarro.com/blog/2013/02/08/rdiffdir-sincronizando-directorios-entre-sistemas-distintos-sin-usar-la-red/#comments</comments>
		<pubDate>Fri, 08 Feb 2013 18:11:18 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[La Nube]]></category>
		<category><![CDATA[rdiffdir]]></category>
		<category><![CDATA[rsync]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1166</guid>
		<description><![CDATA[Imaginemos que tenemos dos directorios muy grandes (de decenas o cientos de GB) que queremos mantener idénticos en dos sistemas diferentes. Por ejemplo, podríamos pensar en un directorio con documentos profesionales que queremos sincronizar entre el PC de casa y el del trabajo o en un directorio con fotos familiares que queremos sincronizar entre el [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Imaginemos que tenemos dos directorios muy grandes (de decenas o cientos de <a href="http://en.wikipedia.org/wiki/Gigabyte">GB</a>) que queremos mantener idénticos en dos sistemas diferentes. Por ejemplo, podríamos pensar en un directorio con documentos profesionales que queremos sincronizar entre el PC de casa y el del trabajo o en un directorio con fotos familiares que queremos sincronizar entre el PC de tu casa y el de tu madre.</p>
<p>La idea sería que tras modificar los ficheros en uno de los PCs, pudiéramos copiar sólo los cambios al otro PC (que en principio sería poco volumen de datos) sin tener que copiar todos los ficheros cada vez (recordemos que hablamos de muchos GB de datos).</p>
<p>Si ambos sistemas están conectados por red (local, Internet), aunque puede haber otras soluciones diferentes, mi solución preferida sería usar <a href="http://en.wikipedia.org/wiki/Rsync">rsync</a> (<a href="/blog/2008/01/13/backups-con-rsync/">Backups con rsync</a>), disponible en Linux, Mac OS X y Windows/<a href="/blog/tag/cygwin/">Cygwin</a>.</p>
<p>También podríamos optar por almacenar los datos en &#8220;<a href="http://en.wikipedia.org/wiki/Cloud_storage">La Nube</a>&#8220;, con Dropbox, Google Drive, Skydrive, iCloud, etc. Así, si modificamos algunos ficheros en un sistema, los ficheros modificados se actualizan en la nube y, posteriormente, en los otros sistemas. Pero ojo, imaginemos que manejamos 100GB de datos. Además de que necesitamos tener al menos dicho espacio contratado en nuestro proveedor de almacenamiento en la nube, resulta que para subir inicialmente 100GB a la nube con una conexión a Internet de 1Mbps de subida necesitaríamos varios días:</p>
<blockquote><p>100.000.000.000 bytes / ( 1.000.000 bit/s / 8 bytes/bit ) = 800.000 s = 9,26 días</p></blockquote>
<p>Si no tenemos <code>rsync</code>, ni almacenamiento en la nube, y tal vez ni acceso por red, habría quien copiaría todos los ficheros a un disco duro externo (cientos de GB) o tal vez quien llevara cuenta de qué ficheros han cambiado para copiar sólo esos a una memoria USB. Y posteriormente aún habría que volver a copiar los ficheros en el sistema destino&#8230;</p>
<p>Bueno, pues resulta que <code>rdiffdir</code> es una solución excelente a este problema. <code>rdiffdir</code> está escrito en Python, es parte de la aplicación <a href="http://duplicity.nongnu.org/">duplicity</a> (para hacer backups de directorios), se basa en <code>rdiff</code> y usa la librería <code><a href="http://librsync.sourceforge.net/">librsync</a></code>. Con <code>rdiffdir</code> podemos crearnos muy fácilmente un fichero que contenga sólo los cambios con <a href="http://rsync.samba.org/tech_report/">el algoritmo de rsync</a> y aplicar dichos cambios en el sistema que esté desfasado.</p>
<p>Usemos por ejemplo el caso del directorio con documentos profesionales que queremos sincronizar entre el PC de casa y el del trabajo para entender cómo lo haríamos con <code>rdiffdir</code>:</p>
<p>Partimos de un escenario en el que los directorios están perfectamente sincronizados en ambos sistemas. Acabamos de llegar al trabajo, y el directorio que queremos sincronizar contiene lo siguiente:</p>
<blockquote><pre>trabajo ~ $ find directorio/
directorio/
directorio/subdirectorio1
directorio/subdirectorio1/ficheroA.txt
directorio/subdirectorio2
directorio/subdirectorio2/ficheroB.txt

trabajo ~ $ cat directorio/subdirectorio1/ficheroA.txt
Prueba A

trabajo ~ $ cat directorio/subdirectorio2/ficheroB.txt
Prueba B</pre>
</blockquote>
<p>Antes de comenzar a trabajar, generamos un fichero con los <a href="http://en.wikipedia.org/wiki/Checksum">checksums</a> de los bloques de los ficheros y con la información de los directorios con <code>rdiffdir</code>:</p>
<blockquote><pre>trabajo ~ $ rdiffdir signature directorio signature_$(date +%y%m%d).rdiffdir</pre>
</blockquote>
<p>Y comenzamos a trabajar: editamos ficheros, añadimos ficheros y directorios, borramos ficheros&#8230;</p>
<blockquote><pre>trabajo ~ $ echo "Nueva linea" &gt;&gt; directorio/subdirectorio1/ficheroA.txt

trabajo ~ $ rm -rf directorio/subdirectorio2/

trabajo ~ $ mkdir directorio/subdirectorio3

trabajo ~ $ echo "Prueba C" &gt; directorio/subdirectorio3/ficheroC.txt</pre>
</blockquote>
<p>y al final de la jornada, copiamos el fichero de firmas y generamos un fichero con los cambios:</p>
<blockquote><pre>trabajo ~ $ rdiffdir delta signature_130208.rdiff directorio cambios_$(date +%y%m%d).rdiffdir</pre>
</blockquote>
<p>Nos vamos a casa, copiamos el fichero de cambios, y lo aplicamos sobre el directorio:</p>
<blockquote><pre>casa ~ $ rdiffdir patch directorio cambios_130208.rdiffdir</pre>
</blockquote>
<p>y verificamos que, efectivamente, tenemos los cambios del día:</p>
<blockquote><pre>casa ~ $ find directorio
directorio
directorio/subdirectorio1
directorio/subdirectorio1/ficheroA.txt
directorio/subdirectorio3
directorio/subdirectorio3/ficheroC.txt

casa ~ $ cat directorio/subdirectorio1/ficheroA.txt
Prueba A
Nueva linea

casa ~ $ cat directorio/subdirectorio3/ficheroC.txt
Prueba C</pre>
</blockquote>
<p>Si pensamos hacer cambios en casa, habría que repetir el proceso: generar un fichero de firmas antes de empezar, y uno de cambios al finalizar.</p>
<p>Pero, ¡a ver si va a costar más el collar que el perro! ¿Qué ocupa un fichero de firmas de un directorio enorme? ¿Qué tarda en generarlo? Pues acabo de probar con un directorio con 22000 ficheros, 1400 directorios y 10GB y ha tardado sobre 6 minutos y ocupa unos 130MB: Un tamaño adecuado para poder transportarlo en una memoria USB.</p>
<p><a href="http://duplicity.nongnu.org/">duplicity</a> está disponible en algunas distribuciones Linux (Fedora, Ubuntu, Debian). En otras, podemos compilarlo. También podemos usarlo en Windows bajo Cygwin. Hay que instalar previamente los paquetes <code>python</code>, <code>librsync1</code> y <code>librsync-devel</code> y luego, sólo hay que bajar el fichero con las fuentes, descomprimirlo, entrar en él desde la shell de Cygwin y ejecutar:</p>
<blockquote><pre>python setup.py install</pre>
</blockquote>
<p>:wq!</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2013 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2013/02/08/rdiffdir-sincronizando-directorios-entre-sistemas-distintos-sin-usar-la-red/#comments">5 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/cygwin/" rel="tag">Cygwin</a>, <a href="http://www.vicente-navarro.com/blog/tag/gnulinux/" rel="tag">GNU/Linux</a>, <a href="http://www.vicente-navarro.com/blog/tag/internet/" rel="tag">Internet</a>, <a href="http://www.vicente-navarro.com/blog/tag/la-nube/" rel="tag">La Nube</a>, <a href="http://www.vicente-navarro.com/blog/tag/rdiffdir/" rel="tag">rdiffdir</a>, <a href="http://www.vicente-navarro.com/blog/tag/rsync/" rel="tag">rsync</a>, <a href="http://www.vicente-navarro.com/blog/tag/windows/" rel="tag">Windows</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2008/01/13/backups-con-rsync/" title="Backups con rsync (13 enero 2008)">Backups con rsync</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2009/05/16/rsync-siempre-sincroniza-ciertos-ficheros-ver-los-segundos-de-la-fecha-de-un-fichero/" title="rsync siempre sincroniza ciertos ficheros. Ver los segundos de la fecha de un fichero. (16 mayo 2009)">rsync siempre sincroniza ciertos ficheros. Ver los segundos de la fecha de un fichero.</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/03/09/hosting-casero-howto/" title="Hosting casero HOWTO (9 marzo 2008)">Hosting casero HOWTO</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/06/06/el-paso-a-utf-8-en-ubuntu-hardy-heron-rsync-entre-sistemas-con-distinto-juego-de-caracteres/" title="El paso a UTF-8 con Ubuntu Hardy Heron: rsync entre sistemas con distinto juego de caracteres (6 junio 2008)">El paso a UTF-8 con Ubuntu Hardy Heron: rsync entre sistemas con distinto juego de caracteres</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/12/26/piensas-en-si-un-dia-te-roban-el-portatil/" title="¿Piensas en si un día te roban el portátil? (26 diciembre 2007)">¿Piensas en si un día te roban el portátil?</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/06/03/wake-on-lan/" title="Wake on LAN (3 junio 2007)">Wake on LAN</a> (2)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/aDT_dqabDWo" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2013/02/08/rdiffdir-sincronizando-directorios-entre-sistemas-distintos-sin-usar-la-red/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Desempaquetando el firmware de móviles y tablets Android de Samsung</title>
		<link>http://www.vicente-navarro.com/blog/2013/02/01/desempaquetando-el-firmware-de-moviles-y-tablets-android-de-samsung/</link>
		<comments>http://www.vicente-navarro.com/blog/2013/02/01/desempaquetando-el-firmware-de-moviles-y-tablets-android-de-samsung/#comments</comments>
		<pubDate>Fri, 01 Feb 2013 18:04:30 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[cpio]]></category>
		<category><![CDATA[initrd]]></category>
		<category><![CDATA[tar]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1106</guid>
		<description><![CDATA[Acabo de aterrizar en el mundo Android con un móvil y una tablet de Samsung. Es increíble la cantidad de movimiento que hay con las roms personalizadas&#8230; ¡Quién tuviera más un poco más de tiempo! De momento, aún no me he decidido a probar nada &#8220;no oficial&#8221; hasta que entienda un poco mejor cómo funciona [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Acabo de aterrizar en el mundo Android con un móvil y una tablet de Samsung. Es increíble la cantidad de movimiento que hay con las roms personalizadas&#8230; ¡Quién tuviera más un poco más de tiempo!</p>
<p>De momento, aún no me he decidido a probar nada &#8220;no oficial&#8221; hasta que entienda un poco mejor cómo funciona todo, pero sí que me he atrevido a probar a actualizar con el firmware oficial de otro país (<a href="http://www.htcmania.com/showthread.php?t=504048">Instalar Jelly Bean [4.1.1][OFICIAL][P5110XXCLK7]</a>). Cuando he visto que el fichero del firmware era un fichero <code>.tar.md5</code>, no he podido resistirme a desempaquetarlo e intentar entender qué hay dentro.</p>
<p>Lo primero que uno se pregunta es que qué es eso de <code>.tar.md5</code>. Pues es simplemente un fichero <a href="http://en.wikipedia.org/wiki/Tar_(file_format)">tar</a> con formato &#8220;ustar&#8221; (POSIX.1-1988) al que le añadirmos al final un <code>md5sum</code> de sí mismo (<a href="http://forum.xda-developers.com/showthread.php?t=1484304">How to make an Odin flashable .tar from .img</a>):</p>
<blockquote><pre>$ tar -H ustar -c image_1 [image_2 ...] > your_odin_package.tar
$ md5sum -t your_odin_package.tar >> your_odin_package.tar
$ mv your_odin_package.tar your_odin_package.tar.md5</pre>
</blockquote>
<p>La siguiente pregunta sería: ¿cómo podemos verificar la integridad de un fichero <code>.tar.md5</code>?</p>
<p>Podemos ver que el resultado del <code>md5sum</code> está claramente visible al final del fichero:</p>
<blockquote><pre>$ tail -c 100 P5110XXCLK7_P5110OXACLK7_HOME.tar.md5 | hexdump -C -v
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  65 63 39 66 61 34 62 31  38 66 64 31 36 35 38 63  |ec9fa4b18fd1658c|
00000030  62 30 61 36 65 39 62 31  63 62 39 66 66 32 62 63  |b0a6e9b1cb9ff2bc|
00000040  20 20 50 35 31 31 30 58  58 43 4c 4b 37 5f 50 35  |  P5110XXCLK7_P5|
00000050  31 31 30 4f 58 41 43 4c  4b 37 5f 48 4f 4d 45 2e  |110OXACLK7_HOME.|
00000060  74 61 72 0a                                       |tar.|
00000064</pre>
</blockquote>
<p>Sabiendo que la longitud de un hash <a href="http://en.wikipedia.org/wiki/MD5">MD5</a> es 128-bits (32 dígitos hexadecimales), el tamaño del nombre del fichero y que el <code>md5sum</code> deja dos espacios entre el hash MD5 y el nombre y añade un fin de línea (0x0a), podemos extraer el fichero .md5 leyendo sólo los últimos &#8220;32(MD5)+2(espacios)+1(0x0a)-4(.md5)+nombre del fichero&#8221; caracteres:</p>
<blockquote><pre>$ FICHERO_FIRMWARE=P5110XXCLK7_P5110OXACLK7_HOME.tar.md5
$ tail -c $(( $( echo -n $FICHERO_FIRMWARE | wc -c )+32+2+1-4 )) $FICHERO_FIRMWARE
ec9fa4b18fd1658cb0a6e9b1cb9ff2bc  P5110XXCLK7_P5110OXACLK7_HOME.tar</pre>
</blockquote>
<p>y verificar la integridad del fichero leyendo todo el fichero menos la parte del <code>md5sum</code>:</p>
<blockquote><pre>$ head -c -$(( $( echo -n $FICHERO_FIRMWARE | wc -c )+32+2+1-4 )) $FICHERO_FIRMWARE | md5sum
ec9fa4b18fd1658cb0a6e9b1cb9ff2bc  -</pre>
</blockquote>
<p>Una vez verificada la integridad del fichero, se desempaqueta como cualquier otro fichero tar:</p>
<blockquote><pre>$ tar xvf P5110XXCLK7_P5110OXACLK7_HOME.tar.md5
Sbl.bin
boot.img
cache.img
hidden.img
recovery.img
system.img</pre>
</blockquote>
<p>El fichero <strong><code>Sbl.bin</code></strong> es el <em>Secondary Bootloader</em>, del que se suele hablar a menudo en los foros de <a href="http://forum.xda-developers.com/">XDA Developers</a> (por ejemplo: <a href="http://forum.xda-developers.com/showthread.php?p=10153982">[LISTING] Firmware with Fixed (OS X Compatible) Secondary Bootloader (Sbl.bin)</a>). El artículo &#8220;<a href="http://xdinandroid.com/2009/06/the-android-boot-process-from-power-on.html">The Android boot process from power on</a>&#8221; es una buena referencia para entender cómo es el proceso de arranque de Android.</p>
<p>El resto de ficheros <code>.img</code> son imágenes de las particiones de Android (<a href="http://www.addictivetips.com/mobile/what-is-clockworkmod-recovery-and-how-to-use-it-on-android-complete-guide/">Android Partitions Explained: boot, system, recovery, data, cache &#038; misc</a>).</p>
<p>Los ficheros <strong><code>boot.img</code></strong> y <strong><code>recovery.img</code></strong> contienen el kernel Linux y un <a href="/blog/tag/initrd/"><code>initrd</code></a> para arrancar el sistema. <code>boot.img</code> es el principal y <code>recovery.img</code> se usa para arrancar en modo <em>recovery</em> (en las tablets Samsung, suele ser arrancar con el botón de <em>Power</em> y el de &#8220;volumen abajo&#8221; apretados y en los móviles Samsung, suele ser arrancar con el botón de <em>Power</em>, <em>Home</em> y el de &#8220;volumen arriba&#8221; apretados).</p>
<p>Ambos ficheros están en formato <em>Android Boot Images</em>. Podemos desempaquetar dicho formato con <a href="http://ac100.grandou.net/abootimg"><code>abootimg</code></a> o con el script del artículo <a href="http://www.freeyourandroid.com/guide/extract-edit-repack-boot-img-windows">Extracting, Editing and Re-Packing boot.img in Windows</a>. Si nos decidimos por esta última opción, obtenemos los mencionados ficheros y las opciones de arranque que se le han de pasar al kernel:</p>
<blockquote><pre>$ ./split_bootimg.pl boot.img
Page size: 2048 (0x00000800)
Kernel size: 4385112 (0x0042e958)
Ramdisk size: 485026 (0x000766a2)
Second size: 0 (0x00000000)
Board name:
Command line: console=ttyO2,115200n8 mem=1024M androidboot.console=ttyO2 vram=20M omapfb.vram=0:16M androidboot.carrier=wifi
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... complete.

$ ./split_bootimg.pl recovery.img
Page size: 2048 (0x00000800)
Kernel size: 4385112 (0x0042e958)
Ramdisk size: 1195680 (0x00123ea0)
Second size: 0 (0x00000000)
Board name:
Command line: console=ttyO2,115200n8 mem=1024M androidboot.console=ttyO2 vram=20M omapfb.vram=0:16M androidboot.carrier=wifi
Writing recovery.img-kernel ... complete.
Writing recovery.img-ramdisk.gz ... complete.</pre>
</blockquote>
<p>Los kernels de ambos ficheros son idénticos:</p>
<blockquote><pre># md5sum boot.img-kernel recovery.img-kernel
89d3f9249d218e10e08f9b947188a76a  boot.img-kernel
89d3f9249d218e10e08f9b947188a76a  recovery.img-kernel</pre>
</blockquote>
<p>pero los <code>initrd</code>, no. Como es habitual en los <code>initrd</code> de los sistemas Linux de escritorio, es posible desempaquetarlos con &#8220;<code>cpio -i -v</code>&#8221; (o &#8220;<code>cpio -t -v</code>&#8221; si sólo queremos ver los ficheros que llevan):</p>
<blockquote><pre>gzip -d -c boot.img-ramdisk.gz | cpio -i -v
gzip -d -c recovery.img-ramdisk.gz | cpio -i -v</pre>
</blockquote>
<p>y veremos que más o menos llevan los mismos ficheros; con la particularidad de que el <code>recovery.img-ramdisk.gz</code> lleva además <a href="https://code.google.com/p/android-source-browsing/source/browse/res/images/?repo=platform--bootable--recovery">las típicas imágenes que componen la animación de cuando Android se está actualizando</a>:</p>
<p><img src="http://www.vicente-navarro.com/blog/wp/img/2013/02/android_icon_installing.png" alt="Android actualizándose" width="127" height="192" class="aligncenter size-full wp-image-1115" /></p>
<p>Finalmente, los ficheros <strong><code>cache.img</code></strong>, <strong><code>hidden.img</code></strong> y <strong><code>system.img</code></strong> son imágenes <em>sparse</em> de sistemas de ficheros <a href="http://en.wikipedia.org/wiki/Ext4">ext4</a>. Podemos convertirlas a imágenes normales con la utilidad <code>simg2img </code> (ver <a href="http://forum.xda-developers.com/showthread.php?t=1081239">[REF] Unpacking and repacking stock rom .img files</a>):</p>
<blockquote><pre>$ /tmp/ext4_utils/simg2img system.img system_normal.img</pre>
</blockquote>
<p>y ya montarla en modo <em>loopback</em>:</p>
<blockquote><pre># mount -t ext4 -o loop system2.img /mnt/loop/

# ll /mnt/loop/
total 72
drwxr-xr-x  2 root root  8192 Nov 22 14:27 app
drwxr-xr-x  2 root 2000  4096 Nov 22 14:27 bin
-rw-r--r--  1 root root  2781 Nov 22 14:27 build.prop
drwxr-xr-x  2 root root  4096 Nov 22 14:27 cameradata
drwxr-xr-x 11 root root  4096 Nov 22 14:36 etc
drwxr-xr-x  2 root root  4096 Nov 22 14:27 fonts
drwxr-xr-x  2 root root  4096 Nov 22 14:27 framework
drwxr-xr-x  2 root root  4096 Nov 22 14:27 hdic
drwxr-xr-x  9 root root 12288 Nov 22 14:36 lib
drwxr-xr-x  4 root root  4096 Nov 22 14:27 media
drwxr-xr-x  4 root root  4096 Nov 22 14:27 tts
drwxr-xr-x  8 root root  4096 Nov 22 14:27 usr
drwxr-xr-x  8 root 2000  4096 Nov 22 14:36 vendor
drwxr-xr-x  4 root root  4096 Nov 22 14:27 vsc
drwxr-xr-x  2 root 2000  4096 Nov 22 14:27 xbin</pre>
</blockquote>
<p>Y en este punto, hemos conseguido acceso a todos los ficheros del firmware. <a href="http://forum.xda-developers.com/">Qué hacer ahora con ellos es otra, muy larga, historia&#8230;</a></p>
<p><strong>Actualización 28/2/2013:</strong> He descubierto un interesante documento muy similar a esta entrada: <a href="http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images">HOWTO: Unpack, Edit, and Re-Pack Boot Images</a></p>
<p>:wq!</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2013 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2013/02/01/desempaquetando-el-firmware-de-moviles-y-tablets-android-de-samsung/#comments">2 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/android/" rel="tag">Android</a>, <a href="http://www.vicente-navarro.com/blog/tag/cpio/" rel="tag">cpio</a>, <a href="http://www.vicente-navarro.com/blog/tag/gnulinux/" rel="tag">GNU/Linux</a>, <a href="http://www.vicente-navarro.com/blog/tag/initrd/" rel="tag">initrd</a>, <a href="http://www.vicente-navarro.com/blog/tag/tar/" rel="tag">tar</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2007/11/01/hibernacion-en-linux-con-tuxonice-notas-sobre-los-initrd-y-sobre-cpio/" title="Hibernación en Linux con TuxOnIce. Notas sobre los initrd y sobre cpio. (1 noviembre 2007)">Hibernación en Linux con TuxOnIce. Notas sobre los initrd y sobre cpio.</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/11/19/solucionando-el-error-attempt-to-access-beyond-end-of-device-con-reglas-de-udev-hal-yo-un-parche-del-kernel/" title="Solucionando el error &#8220;attempt to access beyond end of device&#8221; con reglas de udev, hal y/o un parche del kernel (19 noviembre 2007)">Solucionando el error &#8220;attempt to access beyond end of device&#8221; con reglas de udev, hal y/o un parche del kernel</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/05/01/instalar-ubuntu-hardy-heron-sobre-un-fakeraid/" title="Instalar Ubuntu 8.04 Hardy Heron sobre un fakeRAID (1 mayo 2008)">Instalar Ubuntu 8.04 Hardy Heron sobre un fakeRAID</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/12/09/compilar-el-kernel-de-linux/" title="Compilar el kernel de Linux (9 diciembre 2007)">Compilar el kernel de Linux</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/11/18/ya-tenemos-un-plugin-de-flash-nativo-para-linux-de-64-bits/" title="Ya tenemos un plugin de Flash nativo para Linux de 64 bits (18 noviembre 2008)">Ya tenemos un plugin de Flash nativo para Linux de 64 bits</a> (1)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/06/03/wake-on-lan/" title="Wake on LAN (3 junio 2007)">Wake on LAN</a> (1)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/-d_9K5ywTeA" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2013/02/01/desempaquetando-el-firmware-de-moviles-y-tablets-android-de-samsung/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Midiendo la calidad de la TDT en alta definición en España</title>
		<link>http://www.vicente-navarro.com/blog/2012/06/12/midiendo-la-calidad-de-la-tdt-en-alta-definicion-en-espana/</link>
		<comments>http://www.vicente-navarro.com/blog/2012/06/12/midiendo-la-calidad-de-la-tdt-en-alta-definicion-en-espana/#comments</comments>
		<pubDate>Tue, 12 Jun 2012 16:47:51 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[DVB-T]]></category>
		<category><![CDATA[dvdsnoop]]></category>
		<category><![CDATA[Full HD]]></category>
		<category><![CDATA[H.264]]></category>
		<category><![CDATA[Hauppauge WinTV-HVR-1100]]></category>
		<category><![CDATA[HD]]></category>
		<category><![CDATA[MPEG2]]></category>
		<category><![CDATA[pv]]></category>
		<category><![CDATA[TDT]]></category>
		<category><![CDATA[Televisión]]></category>
		<category><![CDATA[tzap]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1025</guid>
		<description><![CDATA[Han pasado ya más de cuatro años desde que escribí &#8220;La TDT en alta definición en España: Llegará pero, ¿la podremos ver?&#8220;. La TDT en HD finalmente llegó; y aquellos que se compraron televisores nuevos que la soportaran, la pueden ver. Yo sigo con mi viejo televisor mastodóntico de tubo, que se sigue viendo fenomenal [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Han pasado ya más de cuatro años desde que escribí &#8220;<a href="/blog/2008/04/18/la-tdt-en-alta-definicion-en-espana-llegara-pero-la-podremos-ver/">La TDT en alta definición en España: Llegará pero, ¿la podremos ver?</a>&#8220;. La TDT en HD finalmente llegó; y aquellos que se compraron televisores nuevos que la soportaran, la pueden ver. Yo sigo con mi viejo televisor mastodóntico de tubo, que se sigue viendo fenomenal para contenidos de definición estándar. Pero recientemente, un familiar cercano se compró un buen televisor de los modernos, con muchas pulgadas y capaz de sintonizar TDT HD. Y con él, he tenido ocasión de comprobar detenidamente que la calidad de los contenidos en alta definición es notablemente mejor que los contenidos de definición estándar, pero que aún así, hay un abismo con la calidad de una fuente real de HD (como podría ser un <a href="http://en.wikipedia.org/wiki/Blu-ray#Bit_rate">Blu-Ray</a>).</p>
<p>Es frecuente leer (<a href="http://www.meneame.net/story/hd-sin-hache/">HD sin hache</a>, <a href="http://www.meneame.net/story/alta-definicion-tdt-roza-ilegalidad-cuanto-calidad/">La Alta Definición en la TDT roza la ilegalidad en cuanto a calidad</a>) que el problema de las emisiones de TDT en HD en España es que el <a href="http://en.wikipedia.org/wiki/Bit_rate">bitrate</a> es muy bajo (cuando no es que los contenidos son simplemente contenidos de definición estándar reescalados). He querido demostrar que realmente es así y me he puesto manos a la obra con <a href="/blog/2007/05/21/sobre-las-via-epia-ii-mi-ordenador-basado-en-una-sp8000e/">mi viejo PC con la VIA EPIA SP8000E</a> y sintonizadora <a href="/blog/2007/08/25/configuracion-de-una-hauppauge-wintv-hvr-1100-en-linux/">Hauppauge WinTV-HVR-1100</a>. Es fácil analizar en Debian las emisiones DVB-T gracias a los paquetes <a href="http://wirbel.htpc-forum.de/w_scan/index_en.html">w-scan</a>, <a href="http://dvbsnoop.sourceforge.net/">dvbsnoop</a> y <a href="http://dvbtools.sourceforge.net/">dvb-tools</a>.</p>
<p>Antes de empezar, conviene aclarar algunos conceptos del estándar <a href="http://en.wikipedia.org/wiki/DVB-T">DVB-T</a>: En cada canal de radiofrecuencia de 8 MHz de los que tradicionalmente se usaban para la televisión analógica, el estándar DVB-T transmite un flujo de datos digitales (<a href="http://en.wikipedia.org/wiki/MPEG-TS">MPEG-TS</a>) de entre unos 5 y 30 Mbps (en España típicamente 20 Mbps), en función de la modulación, codificación y otros parámetros (<a href="http://en.wikipedia.org/wiki/DVB-T#Technical_description_of_a_DVB-T_transmitter">DVB-T: Available bitrates (Mbit/s) for a DVB-T system in 8 MHz channels</a>). En ese flujo de datos, típicamente llamado <em>múltiplex</em>, se multiplexan en el tiempo varios flujos de datos de vídeo y de audio, permitiendo así que en cada múltiplex viajen varios programas de TV y de radio a la vez. Cada uno de los flujos de vídeo y audio tiene un PID (Program Identification) que lo identifica.</p>
<p>Pasemos ahora a medir el bitrate de los flujos de vídeo de las emisiones de TDT en España. Para usar los siguientes comandos se supone que tenemos una sintonizadora de DVB-T correctamente configurada en un sistema Linux.</p>
<p>(...)<br/><br/>Leer el resto de <a href="http://www.vicente-navarro.com/blog/2012/06/12/midiendo-la-calidad-de-la-tdt-en-alta-definicion-en-espana/">Midiendo la calidad de la TDT en alta definición en España</a> (1,430 palabras)</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2012 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2012/06/12/midiendo-la-calidad-de-la-tdt-en-alta-definicion-en-espana/#comments">53 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/dvb-t/" rel="tag">DVB-T</a>, <a href="http://www.vicente-navarro.com/blog/tag/dvdsnoop/" rel="tag">dvdsnoop</a>, <a href="http://www.vicente-navarro.com/blog/tag/full-hd/" rel="tag">Full HD</a>, <a href="http://www.vicente-navarro.com/blog/tag/gnulinux/" rel="tag">GNU/Linux</a>, <a href="http://www.vicente-navarro.com/blog/tag/h264/" rel="tag">H.264</a>, <a href="http://www.vicente-navarro.com/blog/tag/hauppauge-wintv-hvr-1100/" rel="tag">Hauppauge WinTV-HVR-1100</a>, <a href="http://www.vicente-navarro.com/blog/tag/hd/" rel="tag">HD</a>, <a href="http://www.vicente-navarro.com/blog/tag/mpeg2/" rel="tag">MPEG2</a>, <a href="http://www.vicente-navarro.com/blog/tag/pv/" rel="tag">pv</a>, <a href="http://www.vicente-navarro.com/blog/tag/tdt/" rel="tag">TDT</a>, <a href="http://www.vicente-navarro.com/blog/tag/television/" rel="tag">Televisión</a>, <a href="http://www.vicente-navarro.com/blog/tag/tzap/" rel="tag">tzap</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2008/04/18/la-tdt-en-alta-definicion-en-espana-llegara-pero-la-podremos-ver/" title="La TDT en alta definición en España: Llegará pero, ¿la podremos ver? (18 abril 2008)">La TDT en alta definición en España: Llegará pero, ¿la podremos ver?</a> (5)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/10/10/sobre-las-via-epia-vi-graficos-y-video-acelerado-por-hw-en-linux-con-la-ex10000eg/" title="Sobre las VIA EPIA (VI): Gráficos y vídeo acelerado por HW en Linux con la EX10000EG (10 octubre 2007)">Sobre las VIA EPIA (VI): Gráficos y vídeo acelerado por HW en Linux con la EX10000EG</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/10/15/la-resolucion-1366x768/" title="La resolución 1366&#215;768 (15 octubre 2007)">La resolución 1366&#215;768</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/08/25/configuracion-de-una-hauppauge-wintv-hvr-1100-en-linux/" title="Configuración de una Hauppauge WinTV-HVR-1100 en Linux (25 agosto 2007)">Configuración de una Hauppauge WinTV-HVR-1100 en Linux</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/07/usando-ntfsclone-y-dd-para-clonado-por-red-con-netcat/" title="Usando ntfsclone y dd para clonado por red con netcat (7 diciembre 2008)">Usando ntfsclone y dd para clonado por red con netcat</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/13/midiendo-el-ancho-de-banda-de-red-con-iperf-y-con-scp-netcat-wget/" title="Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget) (13 diciembre 2008)">Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget)</a> (2)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/y0mLCkgGrWY" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2012/06/12/midiendo-la-calidad-de-la-tdt-en-alta-definicion-en-espana/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>Pequeños trucos para Windows</title>
		<link>http://www.vicente-navarro.com/blog/2011/11/25/pequenos-trucos-para-windows/</link>
		<comments>http://www.vicente-navarro.com/blog/2011/11/25/pequenos-trucos-para-windows/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 17:56:43 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[NTFS]]></category>
		<category><![CDATA[particiones]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1015</guid>
		<description><![CDATA[Tengo por aquí apuntados unos cuantos pequeños trucos para Windows que he ido descubriendo últimamente y que me han venido muy bien. Me gustaría compartirlos en esta entrada. Esconder un usuario de la pantalla inicial de selección de usuario Cuando usamos Windows XP, Vista, 7, etc. con la configuración doméstica de por defecto (en la [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Tengo por aquí apuntados unos cuantos pequeños trucos para Windows que he ido descubriendo últimamente y que me han venido muy bien. Me gustaría compartirlos en esta entrada.</p>
<h4>Esconder un usuario de la pantalla inicial de selección de usuario</h4>
<p>Cuando usamos Windows XP, Vista, 7, etc. con la configuración doméstica de por defecto (en la que sale una imagen para cada usuario y no en la que hay que escribir a mano el nombre del usuario), podemos querer ocultar alguno de los usuarios de dicha pantalla. Eso me pasó a mí recientemente tras instalar el servicio <code>sshd</code> de Cygwin en un Windows 7 (<a href="/blog/2007/07/20/servicios-en-cygwin-syslogd-sshd-telnetd-ftpd-nfsd-etc/">Servicios en Cygwin (syslogd, sshd, telnetd, ftpd, nfsd, etc.)</a>): pasé de tener en la pantalla de inicio sólo el usuario habitual de Windows a tener también el usuario <code>cyg_server</code> (que aparece como <code>Privileged User</code>). Pude esconderlo con facilidad abriendo el <code>regedit</code>, yendo a:</p>
<blockquote><pre>HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon</pre>
</blockquote>
<p>y añadiendo una clave &#8220;SpecialAccounts&#8221; y dentro de ella otra llamada &#8220;UserList&#8221;. A continuación, dentro de:</p>
<blockquote><pre>HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\SpecialAccounts\UserList</pre>
</blockquote>
<p>creamos una entrada de tipo <code>DWORD</code> cuyo nombre sea el nombre del usuario que queremos esconder (en mi caso <code>cyg_server</code>) y con valor cero (0). Tras un reinicio, el usuario que no queremos ver deja de estar disponible.</p>
<ul>
<li><a href="http://social.technet.microsoft.com/Forums/ar/w7itproui/thread/16378967-8a39-4aef-85e4-d859a71648d3">Hide User Accounts on Windows 7 Logon</a></li>
<li><a href="http://www.windows7home.net/hide-user-account-from-welcome-screen-in-windows-7/">Hide user account from welcome screen in windows 7</a></li>
</ul>
<h4>Utilidad para configuración avanzada de usuarios</h4>
<p>En Windows XP y Windows Vista, la utilidad estándar para configurar usuarios que encontramos en el Panel del Control es muy &#8220;doméstica&#8221; y le faltan muchas opciones. La utilidad típica de configurar usuarios que venía con Windows 2000 seguía estando en sus sucesores XP y Vista pero había que lanzarla a mano con el comando:</p>
<blockquote><pre>control userpasswords2</pre>
</blockquote>
<p>En Windows 7, la utilidad de gestión de usuarios estándar sigue siendo &#8220;doméstica&#8221; y la utilidad &#8220;alternativa&#8221; sigue estando disponible, aunque ahora hay que lanzarla con el comando:</p>
<blockquote><pre>netplwiz</pre>
</blockquote>
<p>Un dato importante es que desde esta utilidad no podremos lanzar la utilidad de gestión avanzada de usuarios y grupos locales en las versiones <em>Home</em> de Windows 7, sólo en las <em>Professional</em>, <em>Ultimate</em> y <em>Enterpise</em>.</p>
<ul>
<li><a href="http://support.microsoft.com/kb/321305">How to turn on automatic logon in Windows XP</a></li>
<li><a href="http://technet.microsoft.com/en-us/magazine/ee872306.aspx">Configure a User Account to Log On Automatically on Windows 7</a></li>
<li><a href="http://www.sevenforums.com/tutorials/7539-local-users-groups-manager-open.html">How to Open &#8220;Local Users and Groups&#8221; in Windows 7</a></li>
</ul>
<h4>Extraer los ficheros de un .msi</h4>
<p>¿Te ha pasado alguna vez tener un fichero .msi de <a href="http://en.wikipedia.org/wiki/Windows_Installer">Windows Installer</a> y necesitar extraer algún fichero de dentro pero sin querer instalar la aplicación? Sólo tienes que ejecutar este comando:</p>
<blockquote><pre>msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo</pre>
</blockquote>
<p>Por ejemplo:</p>
<blockquote><pre>msiexec /a 7z920-x64.msi /qb TARGETDIR=c:\Temp\7z</pre>
</blockquote>
<p>El directorio destino se creará si no existe.</p>
<ul>
<li><a href="http://thebackroomtech.com/2007/08/23/howto-extract-files-from-a-msi-file-using-the-windows-command-line/">Howto: extract files from a .msi file using the Windows command line</a></li>
</ul>
<h4>Obtener el BSSID y otros detalles adicionales de las redes WiFi al alcance</h4>
<p>¿Necesitas saber más detalles sobre las redes WiFi que tienes a tu alcance y no tienes ninguna herramienta adicional, sólo las que trae Windows por defecto? En Windows Vista, 2008 y 7, ¡<a href="http://en.wikipedia.org/wiki/Netsh">netsh</a> te puede ayudar! (netsh está disponible en versiones anteriores, pero sólo en éstas lleva funciones de WiFi).</p>
<blockquote><pre>C:\Users\Usuario\Desktop>netsh
netsh>wlan
netsh wlan>show networks mode=Bssid

Interface name : Wireless Network Connection
There are 2 networks currently visible.

SSID 1 : Jazztel_A6
    Network type            : Infrastructure
    Authentication          : WPA-Personal
    Encryption              : CCMP
    BSSID 1                 : c4:75:0f:2b:b6:25
         Signal             : 52%
         Radio type         : 802.11g
         Channel            : 1
         Basic rates (Mbps) : 1 2 5.5 6 9 11 12 18 24 36 48 54

SSID 2 : WLAN_99
    Network type            : Infrastructure
    Authentication          : Open
    Encryption              : WEP
    BSSID 1                 : 01:21:c8:fe:6f:df
         Signal             : 63%
         Radio type         : 802.11g
         Channel            : 9
         Basic rates (Mbps) : 1 2 5.5 11
         Other rates (Mbps) : 6 9 12 18 24 36 48 54</pre>
</blockquote>
<ul>
<li><a href="http://technet.microsoft.com/en-us/library/cc754516%28WS.10%29.aspx">Netsh Command Reference</a></li>
</ul>
<h4>Barra de inicio rápido (<em>Quick Launch</em>) en Windows 7</h4>
<p>Aquellos de vosotros que, como yo, seáis unos reaccionarios de las nuevas interfaces de usuario (Windows 7, KDE 4, Gnome 3, Unity) seguro que renegaréis de la nueva barra de tareas de Windows 7 y tal vez tratéis de configurarla de la forma más parecida posible a lo que solía ser en versiones anteriores. En tal caso, seguro que os vendrá bien saber cómo volver a añadir la barra de inicio rápido.</p>
<p>Sólo hay que hacer clic con el botón derecho sobre la barra de tareas, ir a &#8220;Barras de herramientas&#8221;, elegir &#8220;Nueva barra de herramientas&#8221; y cuando nos pida la localización de ésta, escribir:</p>
<blockquote><pre>%userprofile%\appdata\roaming\microsoft\internet Explorer\Quick Launch</pre>
</blockquote>
<p>A continuación, haremos clic con el botón derecho sobre la nueva barra y quitaremos las opciones &#8220;Mostrar texto&#8221; y &#8220;Mostrar título&#8221; para tener una barra de inicio rápido como siempre.</p>
<ul>
<li><a href="http://support.microsoft.com/kb/974023/es">Cómo usar el inicio rápido en Windows 7</a></li>
</ul>
<h4>Extender o reducir una partición NTFS de Windows</h4>
<p>Imaginemos la siguiente situación bastante típica: Tienes un PC con Windows instalado en una única partición que ocupa todo el disco en el que queremos instalar, por ejemplo, alguna distribución de Linux. ¿Qué haríamos? Pues podríamos arrancar con cualquier LiveCD de alguna distribución de Linux que contenga el <a href="http://gparted.sourceforge.net/">GParted</a> (<a href="http://gparted.sourceforge.net/livecd.php">también tiene su propio LiveCD</a>) y usarlo para hacer la partición de Windows más pequeña. Pero ahora, con Windows 7, también podemos usar el propio gestor de discos de Windows para hacerlo muy fácilmente. Lo lanzamos ejecutando:</p>
<blockquote><pre>diskmgmt.msc</pre>
</blockquote>
<p>Y aquí, haciendo clic con el botón derecho sobre cualquier partición, encontraremos opciones para reducir y ensanchar el tamaño de las particiones (siempre que estas operaciones sean posibles).</p>
<ul>
<li><a href="http://technet.microsoft.com/en-us/library/cc771473.aspx">Extend a Basic Volume</a></li>
<li><a href="http://technet.microsoft.com/es-es/library/cc731894.aspx">Shrink a Basic Volume</a></li>
</ul>
<p>:wq!</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2011 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2011/11/25/pequenos-trucos-para-windows/#comments">2 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/cygwin/" rel="tag">Cygwin</a>, <a href="http://www.vicente-navarro.com/blog/tag/ntfs/" rel="tag">NTFS</a>, <a href="http://www.vicente-navarro.com/blog/tag/particiones/" rel="tag">particiones</a>, <a href="http://www.vicente-navarro.com/blog/tag/windows/" rel="tag">Windows</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/07/usando-ntfsclone-y-dd-para-clonado-por-red-con-netcat/" title="Usando ntfsclone y dd para clonado por red con netcat (7 diciembre 2008)">Usando ntfsclone y dd para clonado por red con netcat</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/07/18/trabajando-con-cygwin/" title="Trabajando con Cygwin (18 julio 2007)">Trabajando con Cygwin</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/07/20/servicios-en-cygwin-syslogd-sshd-telnetd-ftpd-nfsd-etc/" title="Servicios en Cygwin (syslogd, sshd, telnetd, ftpd, nfsd, etc.) (20 julio 2007)">Servicios en Cygwin (syslogd, sshd, telnetd, ftpd, nfsd, etc.)</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/07/25/recuperacion-de-particiones-perdidas-con-gpart/" title="Recuperación de particiones perdidas con gpart (25 julio 2008)">Recuperación de particiones perdidas con gpart</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2013/02/08/rdiffdir-sincronizando-directorios-entre-sistemas-distintos-sin-usar-la-red/" title="rdiffdir: Sincronizando directorios entre sistemas distintos sin usar la red (8 febrero 2013)">rdiffdir: Sincronizando directorios entre sistemas distintos sin usar la red</a> (2)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2007/07/06/instalar-un-cygwin-portable-en-una-memoria-usb/" title="Instalar un Cygwin portable en una memoria USB (6 julio 2007)">Instalar un Cygwin portable en una memoria USB</a> (2)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/gMHoqj9zP6g" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2011/11/25/pequenos-trucos-para-windows/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mantener el reenvío de ventanas X de SSH tras hacer un su</title>
		<link>http://www.vicente-navarro.com/blog/2011/11/04/mantener-el-reenvio-de-ventanas-x-de-ssh-tras-hacer-un-su/</link>
		<comments>http://www.vicente-navarro.com/blog/2011/11/04/mantener-el-reenvio-de-ventanas-x-de-ssh-tras-hacer-un-su/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 00:08:59 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[HP-UX]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[X Window System]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1012</guid>
		<description><![CDATA[Es muy común que sistemas UNIX/Linux a los que se accede por SSH no permitan acceso directo con root. Hay que autentificarse como un usuario normal y luego, si se necesita acceso de root, se usa su para obtener una shell de root. En sistemas con OpenSSH, en el fichero /etc/sshd/sshd_config encontraremos el parámetro PermitRootLogin, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Es muy común que sistemas UNIX/Linux a los que se accede por SSH no permitan acceso directo con <code>root</code>. Hay que autentificarse como un usuario normal y luego, si se necesita acceso de <code>root</code>, se usa <code>su</code> para obtener una shell de <code>root</code>. En sistemas con OpenSSH, en el fichero <code>/etc/sshd/sshd_config</code> encontraremos el parámetro <code>PermitRootLogin</code>, que está a &#8220;no&#8221; en muchos sistemas. Entre las ventajas de no permitir acceso directo de <code>root</code> está que el usuario -en teoría- no se pasará a <code>root</code> a menos que lo necesite y que queda registrado qué usuarios están/han estado en el sistema.</p>
<p>Pero esta configuración genera problemas con el reenvio de ventanas X11 a través de SSH. Por ejemplo, con sistemas HP-UX y Solaris (luego veremos qué pasa con Linux), cuando accedes por SSH con un usuario reenviando las ventanas X11 y luego haces un <code>su</code>, perdemos el túnel de X11:</p>
<blockquote><pre>
$ ssh -X usuarioprueba@solx86
Password:
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
$
$ echo $DISPLAY
localhost:10.0
$
$ /usr/openwin/bin/xclock
$
$ su -
Password:
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
#
# echo $DISPLAY
#
# /usr/openwin/bin/xclock
Error: Can't open display:
</pre>
</blockquote>
<p>Si ponemos a mano la variable <code>$DISPLAY</code>, el error pasará de ser que no puede acceder al <em>display</em> a que no tiene autorización para usar el <em>display</em>:</p>
<blockquote><pre>
# DISPLAY=localhost:10.0
# export DISPLAY
# 
#  /usr/openwin/bin/xclock
X11 connection rejected because of wrong authentication.
X connection to localhost:10.0 broken (explicit kill or server shutdown).
</pre>
</blockquote>
<p>Una solución, aprovechando que <code>root</code> puede acceder a los ficheros de todos los usuarios, es modificar la variable <code>$XAUTHORITY</code> para usar el fichero <code>.Xauthority</code> del usuario con el que entramos y no el de <code>root</code>:</p>
<blockquote><pre>
# XAUTHORITY=/export/home/usuarioprueba/.Xauthority
# export XAUTHORITY
#
# /usr/openwin/bin/xclock
</pre>
</blockquote>
<p>Al entrar a un sistema por SSH con la opción de reenvío de X11 activada, el servidor SSH añade una <a href="http://en.wikipedia.org/wiki/X_Window_authorization">MIT-MAGIC-COOKIE-1</a> al fichero <code>$HOME/.Xauthority</code> para que sólo ese usuario (y no otros que estén conectados a la máquina e intenten usar el mismo $DISPLAY) pueda usar su túnel SSH para reenviar ventanas X11. Si el usuario <code>root</code> usa la misma <em>magic cookie</em>, pues podrá entrar sin problemas.</p>
<p>Otra opción para no reemplazar por completo el <code>.Xauthority</code> de <code>root</code> pasa por listar las <em>magic cookies</em> disponibles en el <code>.Xauthority</code> del usuario:</p>
<blockquote><pre>
$ /usr/openwin/bin/xauth list
clientessh:0  MIT-MAGIC-COOKIE-1  e712f99f148d5bf00e5df9f345635434
sistemavncserver:1  MIT-MAGIC-COOKIE-1  d30c3ab6ca017837260ff6221fd80da7
solx86/unix:10  MIT-MAGIC-COOKIE-1  1d9076a2068a5e79d1259bea382cec2d
</pre>
</blockquote>
<p>extraemos en formato binario sólo la entrada que nos interesa:</p>
<blockquote><pre>
$  /usr/openwin/bin/xauth extract .Xauthority_solx86 solx86/unix:10
</pre>
</blockquote>
<p>y ya como <code>root</code>, unimos la entrada a las existentes y ya podremos acceder al servidor X:</p>
<blockquote><pre>
$ su -
Password:
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
# DISPLAY=localhost:10.0
# export DISPLAY
#
# /usr/openwin/bin/xauth merge /export/home/prueba/.Xauthority_solx86
#
# /usr/openwin/bin/xauth list
solx86/unix:10  MIT-MAGIC-COOKIE-1  1d9076a2068a5e79d1259bea382cec2d
#
# /usr/openwin/bin/xclock
</pre>
</blockquote>
<p>Y otra opción más sería, tras listar las entradas existentes, simplemente añadir la <em>magic cookie</em> a mano en el <code>.Xauthority</code> de <code>root</code>:</p>
<blockquote><pre>
# /usr/openwin/bin/xauth add solx86/unix:10  MIT-MAGIC-COOKIE-1  1d9076a2068a5e79d1259bea382cec2d
#
# /usr/openwin/bin/xclock
</pre>
</blockquote>
<p>Decíamos que en Linux no tenemos este problema. Al pasarnos a <code>root</code>, la variable <code>$DISPLAY</code> se conserva y no necesitamos añadir la <em>magic cookie</em> para que el reenvío de ventanas X11, simplemente, siga funcionando:</p>
<blockquote><pre>
# ssh -X usuariopruebap@rh5x64
usuariopruebap@rh5x64's password:
$
$ xclock
$
$ echo $DISPLAY
localhost:10.0
$
$ su -
Password:
[root@rh5x64 ~]# echo $DISPLAY
localhost:10.0
</pre>
</blockquote>
<p>Esta magia de los sistemas Linux la proporciona el módulo <a href="http://en.wikipedia.org/wiki/Pluggable_Authentication_Modules">PAM</a> <code><a href="http://linux.die.net/man/8/pam_xauth">pam_xauth</a></code>:</p>
<blockquote><p>
The pam_xauth PAM module is designed to forward xauth keys (sometimes referred to as &#8220;cookies&#8221;) between users.</p>
<p>Without pam_xauth, when xauth is enabled and a user uses the <b><a href="http://linux.die.net/man/1/su">su</a></b>(1) command to assume another user&#8217;s privileges, that user is no longer able to access the original user&#8217;s X display because the new user does not have the key needed to access the display. pam_xauth solves the problem by forwarding the key from the user running su (the source user) to the user whose identity the source user is assuming (the target user) when the session is created, and destroying the key when the session is torn down.</p></blockquote>
<p>Así, en el fichero <code>/etc/pam.d/su</code>, típicamente encontraremos una línea como ésta:</p>
<blockquote><pre>
session         optional        pam_xauth.so
</pre>
</blockquote>
<p>El módulo guarda las <em>magic cookies</em> necesarias en diferentes ficheros <code>$HOME/.xauth??????</code>:</p>
<blockquote><pre>
# xauth -f .xauthrBGj8r list
rh5x64/unix:10  MIT-MAGIC-COOKIE-1  aaceeca9bf499b5c85aba64a3ae42bd0
</pre>
</blockquote>
<p>que, aunque normalmente se eliminan solos al salir, en ocasiones se quedan ahí abandonados. Por ello, en Google podemos encontrar bastantes casos de <a href="http://www.google.es/search?&amp;q=.xauthXXXXXX">gente preguntando qué son dichos ficheros .xauthXXXXX</a> y por qué tienen muchos.</p>
<p>Y para finalizar, una mención al <a href="http://zweije.home.xs4all.nl/xauth.html">Remote X Apps mini-HOWTO</a>, en el que podremos repasar los conceptos básicos sobre cómo ejecutar aplicaciones X11 de un sistema en el servidor X de otro sistema UNIX/Linux.</p>
<p>:wq</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2011 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2011/11/04/mantener-el-reenvio-de-ventanas-x-de-ssh-tras-hacer-un-su/#comments">8 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/gnulinux/" rel="tag">GNU/Linux</a>, <a href="http://www.vicente-navarro.com/blog/tag/hp-ux/" rel="tag">HP-UX</a>, <a href="http://www.vicente-navarro.com/blog/tag/openssh/" rel="tag">OpenSSH</a>, <a href="http://www.vicente-navarro.com/blog/tag/solaris/" rel="tag">Solaris</a>, <a href="http://www.vicente-navarro.com/blog/tag/ssh/" rel="tag">SSH</a>, <a href="http://www.vicente-navarro.com/blog/tag/unix/" rel="tag">UNIX</a>, <a href="http://www.vicente-navarro.com/blog/tag/x-window-system/" rel="tag">X Window System</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2010/11/05/vpn-con-openssh/" title="VPN con OpenSSH (5 noviembre 2010)">VPN con OpenSSH</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2009/06/13/reenvio-dinamico-de-puertos-montar-un-servidor-socks-con-ssh/" title="Reenvío dinámico de puertos / montar un servidor SOCKS con SSH (13 junio 2009)">Reenvío dinámico de puertos / montar un servidor SOCKS con SSH</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/11/08/memoria-swap-en-un-fichero-%c2%bfcuanta-memoria-swap-necesitamos/" title="Memoria swap en un fichero. ¿Cuánta memoria swap necesitamos? (8 noviembre 2008)">Memoria swap en un fichero. ¿Cuánta memoria swap necesitamos?</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2010/06/29/evitando-problemas-con-la-host-key-en-sesiones-no-interactivas-de-openssh/" title="Evitando problemas con la &#8220;host key&#8221; en sesiones no interactivas de OpenSSH (29 junio 2010)">Evitando problemas con la &#8220;host key&#8221; en sesiones no interactivas de OpenSSH</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2009/05/24/creando-tuneles-tcpip-port-forwarding-con-ssh-los-8-escenarios-posibles-usando-openssh/" title="Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH (24 mayo 2009)">Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/01/13/autentificacion-trasparente-por-clave-publicaprivada-con-openssh/" title="Autentificación trasparente por clave pública/privada con OpenSSH (13 enero 2008)">Autentificación trasparente por clave pública/privada con OpenSSH</a> (3)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/qqI-jONr4NY" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2011/11/04/mantener-el-reenvio-de-ventanas-x-de-ssh-tras-hacer-un-su/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Port Knocking</title>
		<link>http://www.vicente-navarro.com/blog/2011/10/20/port-knocking/</link>
		<comments>http://www.vicente-navarro.com/blog/2011/10/20/port-knocking/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 18:39:16 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=1007</guid>
		<description><![CDATA[Hace unas semanas leí por primera vez sobre el port knocking en &#8220;Security by Default: Una autenticación fuerte para Openvpn&#8220;. No conocía la idea y me ha parecido muy interesante y útil. Consiste en enviar una secuencia de paquetes a un sistema que active un servicio que anteriormente estaba cerrado. Por ejemplo, cualquiera que tenga [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Hace unas semanas leí por primera vez sobre el <em><a href="http://en.wikipedia.org/wiki/Port_knocking">port knocking</a></em> en &#8220;<a href="http://www.securitybydefault.com/2011/09/una-autenticacion-fuerte-para-openvpn.html">Security by Default: Una autenticación fuerte para Openvpn</a>&#8220;. No conocía la idea y me ha parecido muy interesante y útil. Consiste en enviar una secuencia de paquetes a un sistema que active un servicio que anteriormente estaba cerrado.</p>
<p>Por ejemplo, cualquiera que tenga un sistema con un servidor SSH expuesto a Internet sabrá que no es nada infrecuente encontrar registrados diferentes intentos de intrusión en el sistema (en el <code>/var/log/auth.log</code> en un sistema Debian):</p>
<blockquote><pre>Oct 19 09:31:49 darkstar sshd[13481]: Invalid user fluffy from 202.102.XX.XX
Oct 19 09:32:02 darkstar sshd[13493]: Invalid user oracle from 202.102.XX.XX
Oct 19 09:32:08 darkstar sshd[13500]: Invalid user www from 202.102.XX.XX
Oct 19 09:32:17 darkstar sshd[13508]: Invalid user postmaster from 202.102.XX.XX
Oct 19 09:32:31 darkstar sshd[13520]: Invalid user file from 202.102.XX.XX</pre>
</blockquote>
<p>Si el servidor de SSH sólo permite autentificación por clave privada/pública (<a href="/blog/2008/01/13/autentificacion-trasparente-por-clave-publicaprivada-con-openssh/">Autentificación trasparente por clave pública/privada con OpenSSH</a>) podemos estar razonablemente tranquilos de que el intento de intrusión no tendrá éxito. Pero como nunca se puede estar seguro del todo, puede ser buena idea añadir, adicionalmente, un sistema de <em>port knocking</em> para abrir el puerto SSH sólo cuando realmente lo vayamos a usar.</p>
<p>En un sistema basado en Debian, esto se puede hacer muy fácilmente con el demonio <code><a href="http://www.zeroflux.org/projects/knock">knockd</a></code>, uno de los paquetes oficiales de la distribución. Tras instalar el paquete, tenemos que editar el fichero <code>/etc/default/knockd</code> para permitir que el demonio arranque:</p>
<blockquote><pre># PLEASE EDIT /etc/knockd.conf BEFORE ENABLING
START_KNOCKD=1</pre>
</blockquote>
<p>y especificarle cualquier opción que queramos usar, especialmente en qué interfaz tiene que escuchar si no es el <code>"eth0"</code>:</p>
<blockquote><pre># command line options
# KNOCKD_OPTS="-i eth1"</pre>
</blockquote>
<p>Hay que tener en cuenta que el <code>knockd</code> siempre ve los paquetes llegar, incluso si los puertos están cerrados y si alguna regla de <code>iptables</code> rechaza el paquete. Podríamos decir que se comporta como el <code><a href="http://www.tcpdump.org/tcpdump_man.html">tcpdump</a></code>, en el sentido de que el interfaz se pone en modo promiscuo y ve todo lo que llega a él. Pero adicionalmente, según qué paquetes vea, ejecuta una acción. Por cierto, parece que no funciona poner dos interfaces con <code>"-i eth0 -i eth1"</code>.</p>
<p>A continuación, tenemos que personalizar el fichero <code>/etc/knockd.conf</code> para especificar qué secuencia de puertos queremos y qué hacer cuando ésta llegue. En el &#8220;<code><a href="http://linux.die.net/man/1/knockd">man knockd</a></code>&#8221; encontramos interesantes ejemplos de uso, pero podemos centrarnos en el más típico que es el que instala Debian por defecto:</p>
<blockquote><pre>[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        command     = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn

[closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 5
        command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
        tcpflags    = syn</pre>
</blockquote>
<p>Vemos que cuando llega una secuencia de paquetes TCP con el flag de <a href="http://en.wikipedia.org/wiki/SYN_%28TCP%29#Connection_establishment">SYN</a> a los puertos 7000, 8000 y 9000 en menos de 5 segundos, el demonio <code>knockd</code> añade una regla de <code>iptables</code> para permitir el acceso al servicio SSH a la IP que ha hecho el <em>port knocking</em>. Y con otra secuencia, podemos cerrar el puerto posteriormente.</p>
<p>Tras configurar el <code>/etc/knockd.conf</code> a nuestro gusto, arrancamos el <code>knockd</code> con &#8220;<code>/etc/init.d/knockd start</code>&#8220;.</p>
<p>Para mandar la secuencia que active la acción podemos usar, desde otro sistema, el comando <code><a href="http://linux.die.net/man/1/knock">knock</a></code>, que se instala también al instalar el paquete <code>knockd</code>:</p>
<blockquote><pre>[root@clientessh ~]# knock 192.168.100.2 7000 8000 9000</pre>
</blockquote>
<p>y en el sistema en el que hemos arrancado el <code>knockd</code> vemos cómo los paquetes llegan y se ejecuta la acción planificada para dicha secuencia:</p>
<blockquote><pre>Oct 19 21:55:17 darkstar knockd: 192.168.100.1: openSSH: Stage 1
Oct 19 21:55:17 darkstar knockd: 192.168.100.1: openSSH: Stage 2
Oct 19 21:55:17 darkstar knockd: 192.168.100.1: openSSH: Stage 3
Oct 19 21:55:17 darkstar knockd: 192.168.100.1: openSSH: OPEN SESAME
Oct 19 21:55:17 darkstar knockd: openSSH: running command: /sbin/iptables -A INPUT -s 192.168.100.1    -p tcp --dport 22 -j ACCEPT</pre>
</blockquote>
<p>El hecho de que podamos ejecutar cualquier comando nos da total flexibilidad. Por ejemplo, se me ocurre que en vez de, o adicionalmente a añadir o quitar reglas de <code>iptables</code>, también podríamos incluso arrancar o parar el demonio <code>sshd</code>:</p>
<blockquote><pre>[openSSH]
        sequence    = 7000,8000,9000
        seq_timeout = 5
        command     = /etc/init.d/ssh start
        tcpflags    = syn

[closeSSH]
        sequence    = 9000,8000,7000
        seq_timeout = 5
        command     = /etc/init.d/ssh stop
        tcpflags    = syn</pre>
</blockquote>
<p>Lo que nos quedaría por ver es qué alternativas tenemos para mandar la secuencia de puertos. Hemos visto que el propio paquete <code>knockd</code> de Debian lleva el comando <code>knock</code>. Pero, ¿hay alternativas? ¿y si queremos hacer <em>port knocking</em> desde Windows? ¿y si queremos hacerlo desde un sistema que no tenga ningún software especial?</p>
<p>La propia página de <code>man</code> de <code>knockd</code> nos sugiere algunas alternativas:</p>
<blockquote><p>knock is the accompanying port-knock client, though telnet or <a href="http://netcat.sourceforge.net/">netcat</a> could be used for simple TCP knocks instead. For more advanced knocks, see <a href="http://www.hping.org/">hping</a>, <a href="http://www.earth.li/projectpurple/progs/sendip.html">sendip</a> or packit.</p></blockquote>
<p>Una posibilidad para Windows también es el <a href="http://sourceforge.net/projects/knockknock/">KnockKnock</a>, descubierto gracias a &#8220;<a href="http://www.marksanborn.net/linux/add-port-knocking-to-ssh-for-extra-security/">Add Port Knocking to SSH for Extra Security</a>&#8220;:</p>
<p><img src="http://www.vicente-navarro.com/blog/wp/img/2011/10/knockknock.png" alt="" title="KnockKnock" width="328" height="371" class="aligncenter size-full wp-image-1009" /></p>
<p>pero un inconveniente del KnockKnock es que lanza la secuencia más de una vez:</p>
<blockquote><pre>Oct 19 22:38:32 darkstar knockd: 192.168.100.1: Prueba: Stage 1
Oct 19 22:38:32 darkstar knockd: 192.168.100.1: Prueba: Stage 2
Oct 19 22:38:32 darkstar knockd: 192.168.100.1: Prueba: Stage 3
Oct 19 22:38:32 darkstar knockd: 192.168.100.1: Prueba: Stage 4
Oct 19 22:38:32 darkstar knockd: 192.168.100.1: Prueba: OPEN SESAME
Oct 19 22:38:32 darkstar knockd: Prueba: running command: /sbin/iptables -A INPUT -s 192.168.100.1    -p tcp --dport 22 -j ACCEPT
Oct 19 22:38:33 darkstar knockd: 192.168.100.1: Prueba: Stage 1
Oct 19 22:38:33 darkstar knockd: 192.168.100.1: Prueba: Stage 2
Oct 19 22:38:33 darkstar knockd: 192.168.100.1: Prueba: Stage 3
Oct 19 22:38:33 darkstar knockd: 192.168.100.1: Prueba: Stage 4
Oct 19 22:38:33 darkstar knockd: 192.168.100.1: Prueba: OPEN SESAME
Oct 19 22:38:33 darkstar knockd: Prueba: running command: /sbin/iptables -A INPUT -s 192.168.100.1    -p tcp --dport 22 -j ACCEPT
Oct 19 22:38:33 darkstar knockd: 192.168.100.1: Prueba: Stage 1
Oct 19 22:38:34 darkstar knockd: 192.168.100.1: Prueba: Stage 2
Oct 19 22:38:34 darkstar knockd: 192.168.100.1: Prueba: Stage 3
Oct 19 22:38:34 darkstar knockd: 192.168.100.1: Prueba: Stage 4
Oct 19 22:38:34 darkstar knockd: 192.168.100.1: Prueba: OPEN SESAME
Oct 19 22:38:34 darkstar knockd: Prueba: running command: /sbin/iptables -A INPUT -s 192.168.100.1    -p tcp --dport 22 -j ACCEPT</pre>
</blockquote>
<p>Si el comando a ejecutar se puede ejecutar más de una vez sin otros efectos, como es el caso del <code>iptables</code>, nos da igual, pero en otros casos, puede ser un problema.</p>
<p>Otra solución es usar el cliente de <code>telnet</code> de Windows contra los diferentes puertos para activar la secuencia. Para ello, en Windows se puede usar un <code>.bat</code> con este aspecto:</p>
<blockquote><pre>start telnet 192.168.100.2 7000
start telnet 192.168.100.2 8000
start telnet 192.168.100.2 9000</pre>
</blockquote>
<p>El resultado no siempre es el deseado. El <code>telnet</code> de Windows envía varios paquetes SYN cuando falla el primero y parece que el <code>knockd</code> no siempre acepta la secuencia. Pero bueno, normalmente antes de 4 o 5 intentos, ya ha funcionado la secuencia.</p>
<p>Por supuesto, el <code>knockd</code> es un punto de fallo adicional en el acceso al sistema. Si le pasa algo a este demonio, nos quedaremos sin poder acceder.</p>
<p><strong>Actualización 21/10/11: </strong> Como comentan Dany y <a href="http://odiolasllaves.com.ar/">SebaMinguez</a> en los comentarios, también podemos configurar <em>port knocking</em> sólo con reglas <code>iptables</code>: <a href="http://www.debian-administration.org/articles/268">Multiple-port knocking Netfilter/IPtables only implementation</a>.</p>
<p>:wq</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2011 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2011/10/20/port-knocking/#comments">12 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/debian/" rel="tag">Debian</a>, <a href="http://www.vicente-navarro.com/blog/tag/gnulinux/" rel="tag">GNU/Linux</a>, <a href="http://www.vicente-navarro.com/blog/tag/openssh/" rel="tag">OpenSSH</a>, <a href="http://www.vicente-navarro.com/blog/tag/redes/" rel="tag">Redes</a>, <a href="http://www.vicente-navarro.com/blog/tag/windows/" rel="tag">Windows</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/13/midiendo-el-ancho-de-banda-de-red-con-iperf-y-con-scp-netcat-wget/" title="Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget) (13 diciembre 2008)">Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget)</a> (5)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2010/11/05/vpn-con-openssh/" title="VPN con OpenSSH (5 noviembre 2010)">VPN con OpenSSH</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2009/06/13/reenvio-dinamico-de-puertos-montar-un-servidor-socks-con-ssh/" title="Reenvío dinámico de puertos / montar un servidor SOCKS con SSH (13 junio 2009)">Reenvío dinámico de puertos / montar un servidor SOCKS con SSH</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2011/10/07/accediendo-a-una-red-mediante-nat-en-linux/" title="Accediendo a una red mediante NAT en Linux (7 octubre 2011)">Accediendo a una red mediante NAT en Linux</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/07/usando-ntfsclone-y-dd-para-clonado-por-red-con-netcat/" title="Usando ntfsclone y dd para clonado por red con netcat (7 diciembre 2008)">Usando ntfsclone y dd para clonado por red con netcat</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/03/09/hosting-casero-howto/" title="Hosting casero HOWTO (9 marzo 2008)">Hosting casero HOWTO</a> (3)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/ALIu7I95jXQ" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2011/10/20/port-knocking/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Accediendo a una red mediante NAT en Linux</title>
		<link>http://www.vicente-navarro.com/blog/2011/10/07/accediendo-a-una-red-mediante-nat-en-linux/</link>
		<comments>http://www.vicente-navarro.com/blog/2011/10/07/accediendo-a-una-red-mediante-nat-en-linux/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 16:22:20 +0000</pubDate>
		<dc:creator><![CDATA[Vicente Navarro]]></dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[NAT]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.vicente-navarro.com/blog/?p=999</guid>
		<description><![CDATA[En las últimas entradas he tratado bastante de cómo acceder a nodos de una red remota por &#8220;métodos no estándar&#8221;: Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH Reenvío dinámico de puertos / montar un servidor SOCKS con SSH VPN con OpenSSH Cuando digo &#8220;métodos no estándar&#8221;, me refiero a [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>En las últimas entradas he tratado bastante de cómo acceder a nodos de una red remota por &#8220;métodos no estándar&#8221;:</p>
<ul>
<li><a href="/blog/2009/05/24/creando-tuneles-tcpip-port-forwarding-con-ssh-los-8-escenarios-posibles-usando-openssh/">Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH</a></li>
<li><a href="/blog/2009/06/13/reenvio-dinamico-de-puertos-montar-un-servidor-socks-con-ssh/">Reenvío dinámico de puertos / montar un servidor SOCKS con SSH</a></li>
<li><a href="/blog/2010/11/05/vpn-con-openssh/">VPN con OpenSSH</a></li>
</ul>
<p>Cuando digo &#8220;métodos no estándar&#8221;, me refiero a que normalmente la conectividad entre redes en una intranet o en Internet se consigue con las rutas definidas en los routers de la red. Los routers saben (o deberían saber) cómo llegar de un nodo en la red A a otro nodo en la red B.</p>
<p>Ahora supongamos que estamos en una gran intranet corporativa con muchas subredes. Supongamos también que tenemos un sistema con Linux con dos interfaces Ethernet. Uno de ellos conectado a la red &#8220;oficial&#8221; y el otro conectado a un switch al que conectamos varios servidores (Linux, Windows, etc.). Necesitamos que dichos servidores puedan llegar a nodos de la intranet &#8220;oficial&#8221; y necesitamos acceder a ciertos servicios de los servidores desde la intranet. De momento, esos servidores estarán en una &#8220;red oculta&#8221; o &#8220;inalcanzable&#8221; para el resto de nodos de la intranet.</p>
<p>El &#8220;método estándar&#8221; sería que el administrador de la intranet definiera en los routers de la intranet una ruta para que todos los nodos de la red supieran llegar. Pero si eso no es posible o conveniente (lo contrario implicaría mucha burocracia, va a ser una situación temporal, así proporcionamos más seguridad a la red oculta), es cuando tenemos que usar &#8220;metodos no estándar&#8221;.</p>
<p>Las soluciones usando OpenSSH descritas en entradas anteriores nos resolvían esta situación perfectamente. Pero, ¡ay! Resulta que OpenSSH introduce una sobrecarga importante: Los nodos que mantienen la conexión SSH estarán permanentemente cifrando toda la comunicación, usarán más CPU y la conexión será menos ligera y fluida.</p>
<p>La alternativa, en la que usamos únicamente técnicas estándar del protocolo IP, sería usar <a href="http://en.wikipedia.org/wiki/Network_address_translation">NAT</a>. La idea sería que el sistema Linux se comportara como un router ADSL o de cable como los que solemos tener en casa, que hacen NAT y que nos permiten abrir sólo unos pocos puertos para acceder a ciertos servicios de la red interna.</p>
<p>Así, consideremos el siguiente diagrama en el que vemos que el Linux tiene la IP 10.25.25.2 (<code>eth0</code>) en la intranet &#8220;oficial&#8221; y la IP 172.16.20.2 (<code>eth1</code>) en la red interna &#8220;oculta&#8221;:</p>
<p><img src="http://www.vicente-navarro.com/blog/wp/img/2011/10/nat.png" alt="" title="Esquema NAT" width="550" height="153" class="aligncenter size-full wp-image-1003" /></p>
<p>(...)<br/><br/>Leer el resto de <a href="http://www.vicente-navarro.com/blog/2011/10/07/accediendo-a-una-red-mediante-nat-en-linux/">Accediendo a una red mediante NAT en Linux</a> (976 palabras)</p>
<hr />
<p><small><a href="http://www.vicente-navarro.com/blog">Lo hice y lo entendí</a> © Vicente Navarro 2011 con una licencia <a href="http://www.vicente-navarro.com/blog/licencia-de-uso/">CC BY-SA</a> |
<a href="http://www.vicente-navarro.com/blog/2011/10/07/accediendo-a-una-red-mediante-nat-en-linux/#comments">2 comentarios</a>
<br/>
Etiquetas: <a href="http://www.vicente-navarro.com/blog/tag/gnulinux/" rel="tag">GNU/Linux</a>, <a href="http://www.vicente-navarro.com/blog/tag/iptables/" rel="tag">iptables</a>, <a href="http://www.vicente-navarro.com/blog/tag/nat/" rel="tag">NAT</a>, <a href="http://www.vicente-navarro.com/blog/tag/openssh/" rel="tag">OpenSSH</a>, <a href="http://www.vicente-navarro.com/blog/tag/redes/" rel="tag">Redes</a>, <a href="http://www.vicente-navarro.com/blog/tag/windows/" rel="tag">Windows</a><br/>
</small></p>
	<h4>Entradas relacionadas</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.vicente-navarro.com/blog/2010/11/05/vpn-con-openssh/" title="VPN con OpenSSH (5 noviembre 2010)">VPN con OpenSSH</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2009/06/13/reenvio-dinamico-de-puertos-montar-un-servidor-socks-con-ssh/" title="Reenvío dinámico de puertos / montar un servidor SOCKS con SSH (13 junio 2009)">Reenvío dinámico de puertos / montar un servidor SOCKS con SSH</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2011/10/20/port-knocking/" title="Port Knocking (20 octubre 2011)">Port Knocking</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/13/midiendo-el-ancho-de-banda-de-red-con-iperf-y-con-scp-netcat-wget/" title="Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget) (13 diciembre 2008)">Midiendo el ancho de banda de red con IPerf (y con scp, netcat, wget)</a> (4)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2008/12/07/usando-ntfsclone-y-dd-para-clonado-por-red-con-netcat/" title="Usando ntfsclone y dd para clonado por red con netcat (7 diciembre 2008)">Usando ntfsclone y dd para clonado por red con netcat</a> (3)</li>
	<li><a href="http://www.vicente-navarro.com/blog/2009/05/24/creando-tuneles-tcpip-port-forwarding-con-ssh-los-8-escenarios-posibles-usando-openssh/" title="Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH (24 mayo 2009)">Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH</a> (3)</li>
</ul>


<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
<img src="http://feeds.feedburner.com/~r/LoHiceYLoEntendi/~4/3RBIDncNGEU" height="1" width="1" alt=""/>]]></content:encoded>
			<wfw:commentRss>http://www.vicente-navarro.com/blog/2011/10/07/accediendo-a-una-red-mediante-nat-en-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
