<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Perl on Karpoke - Just Another Blog</title><link>http://karpoke.ignaciocano.com/tags/perl/</link><description>Recent content in Perl on Karpoke - Just Another Blog</description><generator>Hugo -- 0.159.0</generator><language>es</language><lastBuildDate>Wed, 31 Aug 2011 14:19:00 +0100</lastBuildDate><atom:link href="http://karpoke.ignaciocano.com/tags/perl/index.xml" rel="self" type="application/rss+xml"/><item><title>Denegación de servicio en Apache utilizando la cabecera Range</title><link>http://karpoke.ignaciocano.com/2011/08/31/denegacion-de-servicio-en-apache-utilizando-la-cabecera-range/</link><pubDate>Wed, 31 Aug 2011 14:19:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/08/31/denegacion-de-servicio-en-apache-utilizando-la-cabecera-range/</guid><description>&lt;p&gt;Una &lt;a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=51714"&gt;vulnerabilidad descubierta por &lt;em&gt;kingcope&lt;/em&gt;&lt;/a&gt; permite que los
servidores Apache vulnerables sean susceptibles de sufrir una denegación
de servicio.&lt;/p&gt;
&lt;p&gt;La vulnerabilidad se encuentra en el uso de la cabecera &lt;code&gt;Range&lt;/code&gt;. Esta
cabecera se utiliza para obtener sólo una parte de la página. Si se
solicitan varias partes además de pedir que la respuesta se comprima,
mediante la cabecera &lt;code&gt;Accept-Encoding: gzip&lt;/code&gt;, se dispara el consumo de
procesador y memoria.&lt;/p&gt;
&lt;p&gt;Existe un &lt;a href="http://seclists.org/fulldisclosure/2011/Aug/att-175/killapache_pl.bin"&gt;&lt;em&gt;script&lt;/em&gt;&lt;/a&gt; que permite comprobar si el servidor es
vulnerable y, si es el caso, explotar dicha vulnerabilidad.&lt;/p&gt;</description></item><item><title>Obteniendo la IP pública, la IP privada y la dirección MAC en Bash</title><link>http://karpoke.ignaciocano.com/2011/08/14/obteniendo-la-ip-publica-la-ip-privada-y-la-direccion-mac-en-bash/</link><pubDate>Sun, 14 Aug 2011 19:26:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/08/14/obteniendo-la-ip-publica-la-ip-privada-y-la-direccion-mac-en-bash/</guid><description>&lt;p&gt;En los &lt;em&gt;scripts&lt;/em&gt; que escribimos, a menudo, es necesario conocer la IP pública
de nuestra red, o la IP privada y la dirección MAC de una interfaz de red. Con
el comando &lt;code&gt;ifconfig&lt;/code&gt; podemos conocer la información de las interfaces de red:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ifconfig
eth0 Link encap:Ethernet direcciónHW 00:11:22:33:44:55
Direc. inet:192.168.0.30 Difus.:192.168.0.255 Másc:255.255.255.0
Dirección inet6: fe80::203:dff:fe3c:f419/64 Alcance:Enlace
ACTIVO DIFUSI–N FUNCIONANDO MULTICAST MTU:1500 Métrica:1
Paquetes RX:1627 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:1067 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1000
Bytes RX:560137 (560.1 KB) TX bytes:235094 (235.0 KB)
Interrupción:19 Dirección base: 0xc800
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;eth1 Link encap:Ethernet direcciónHW 00:11:22:33:44:66
DIFUSI–N MULTICAST MTU:1500 Métrica:1
Paquetes RX:0 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:0 errores:0 perdidos:0 overruns:0 carrier:0 colisiones:0 long.colaTX:1000
Bytes RX:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupción:21 Dirección base: 0x8000 Memoria:ffcfe000-ffcfefff
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;lo Link encap:Bucle local
Direc. inet:127.0.0.1 Másc:255.0.0.0
Dirección inet6: ::1/128 Alcance:Anfitrión
ACTIVO BUCLE FUNCIONANDO MTU:16436 Métrica:1
Paquetes RX:3299 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:3299 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:0
Bytes RX:355696 (355.6 KB) TX bytes:355696 (355.6 KB)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sin embargo, si queremos utilizar el dato en concreto—la IP privada o la
dirección MAC—, necesitaremos trabajar un poco la salida que muestra
&lt;code&gt;ifconfig&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Limitando el número de procesos por usuario</title><link>http://karpoke.ignaciocano.com/2011/08/01/limitando-el-numero-de-procesos-por-usuario/</link><pubDate>Mon, 01 Aug 2011 19:23:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/08/01/limitando-el-numero-de-procesos-por-usuario/</guid><description>&lt;p&gt;Mediante el comando &lt;code&gt;ulimit&lt;/code&gt; podemos consultar y controlar el valor de los
recursos disponibles para la consola y los &lt;a href="http://karpoke.ignaciocano.com/2010/12/16/mejora-del-rendimiento-interactivo-agrupando-tareas-por-terminal/"&gt;procesos que puedan ser iniciados
desde ella&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Las diferentes opciones que acepta este comando son:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;-a All current limits are reported
-b The maximum socket buffer size
-c The maximum size of core files created
-d The maximum size of a process’s data segment
-e The maximum scheduling priority (&amp;#34;nice&amp;#34;)
-f The maximum size of files written by the shell and its children
-i The maximum number of pending signals
-l The maximum size that may be locked into memory
-m The maximum resident set size (many systems do not honor this limit)
-n The maximum number of open file descriptors (most systems do not allow this value to be set)
-p The pipe size in 512-byte blocks (this may not be set)
-q The maximum number of bytes in POSIX message queues
-r The maximum real-time scheduling priority
-s The maximum stack size
-t The maximum amount of cpu time in seconds
-u The maximum number of processes available to a single user
-v The maximum amount of virtual memory available to the shell and, on some systems, to its children
-x The maximum number of file locks
-T The maximum number of threads
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Para consultar todos los valores asignados actualmente:&lt;/p&gt;</description></item><item><title>Endianness</title><link>http://karpoke.ignaciocano.com/2011/07/30/endianness/</link><pubDate>Sat, 30 Jul 2011 17:34:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/07/30/endianness/</guid><description>&lt;p&gt;&amp;ldquo;&lt;a href="http://secure.wikimedia.org/wikipedia/es/wiki/Endianness"&gt;Endianicidad&lt;/a&gt;&amp;rdquo; designa el formato en el que se almacenan los datos
de más de un byte en un ordenador. El sistema &lt;em&gt;big-endian&lt;/em&gt; adoptado por
Motorola entre otros, consiste en representar los bytes en el orden
&amp;ldquo;natural&amp;rdquo;, así el valor hexadecimal 0x4A3B2C1D se codificaría en memoria
en la secuencia {4A, 3B, 2C, 1D}. En el sistema &lt;em&gt;little-endian&lt;/em&gt; adoptado
por Intel, entre otros, el mismo valor se codificaría como {1D, 2C, 3B,
4A}, de manera que de este modo se hace más intuitivo el acceso a datos,
porque se efectúa fácilmente de manera incremental de menos relevante a
más relevante (siempre se opera con incrementos de contador en la
memoria).&lt;/p&gt;</description></item><item><title>¿Un keylogger en Ubuntu?</title><link>http://karpoke.ignaciocano.com/2011/07/22/un-keylogger-en-ubuntu/</link><pubDate>Fri, 22 Jul 2011 04:35:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/07/22/un-keylogger-en-ubuntu/</guid><description>&lt;p&gt;El comando &lt;code&gt;xinput&lt;/code&gt; permite configurar y probar dispositivos de entrada
para las XWindow. Podemos obtener un listado de los dispositivos de
entrada:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=15 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Laptop_Integrated_Webcam_2M id=10 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
↳ Dell WMI hotkeys id=13 [slave keyboard (3)]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;También podemos obtener más información de algún dispositivo en
concreto, por ejemplo, del teclado, cuyo identificador, en mi caso, es
el 11:&lt;/p&gt;</description></item><item><title>Instalar módulos de CPAN usando CPAN</title><link>http://karpoke.ignaciocano.com/2011/07/22/instalar-modulos-de-cpan-usando-cpan/</link><pubDate>Fri, 22 Jul 2011 02:45:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/07/22/instalar-modulos-de-cpan-usando-cpan/</guid><description>&lt;p&gt;Una de las razones para querer instalar módulos del repositorio CPAN de
Perl utilizando, a su vez, el módulo &lt;code&gt;cpan&lt;/code&gt;, es que los módulos están
más actualizados que en los paquetes de los repositorios. Para
conseguirlo, podemos seguir los siguientes pasos&lt;/p&gt;
&lt;p&gt;Necesitamos tener instalado el paquete &lt;code&gt;build-essential&lt;/code&gt;. Lanzamos la
consola CPAN, con &lt;a href="http://www.troubleshooters.com/codecorn/littperl/perlcpan.htm"&gt;privilegios de administrador&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ sudo perl -MCPAN -e shell
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;o también podríamos ejecutar:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ sudo cpan
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si no tuviéramos permisos, parece que también es posible &lt;a href="http://perl.jonallen.info/writing/articles/install-perl-modules-without-root"&gt;instalar
módulos de Perl sin tener privilegios de administrador&lt;/a&gt;, mediante el
módulo &lt;code&gt;local::lib&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>urlencode y urldecode</title><link>http://karpoke.ignaciocano.com/2011/03/06/urlencode-y-urldecode/</link><pubDate>Sun, 06 Mar 2011 17:45:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/03/06/urlencode-y-urldecode/</guid><description>&lt;p&gt;Los siguientes caracteres &lt;a href="http://tools.ietf.org/html/rfc3986#section-2.3"&gt;son los únicos que se pueden utilizar&lt;/a&gt; en
una URL:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[a-zA-Z0-9-._~]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;El resto, se deben codificar usando el prefijo &lt;code&gt;%&lt;/code&gt; seguido del valor
ASCII hexadecimal del carácter. Por ejemplo:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;( = %28
) = %29
/ = %2F
+ = %2B
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Para &lt;a href="http://stackoverflow.com/questions/296536/urlencode-from-a-bash-script/298258#298258"&gt;codificar la URL&lt;/a&gt; podemos utilizar la función &lt;code&gt;uri_escape&lt;/code&gt; del
módulo &lt;code&gt;URI&lt;/code&gt; de Perl.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;alias urlenc=&amp;#39;furlenc() { perl -MURI::Escape -e &amp;#34;print uri_escape(\&amp;#34;$1\&amp;#34;).\&amp;#34;\n\&amp;#34;;&amp;#34;; }; furlenc&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;$ urlenc http://www.google.com
http%3A%2F%2Fwww.google.com
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Para la &lt;a href="http://www.commandlinefu.com/commands/view/2285/urldecoding"&gt;decodificación de la URL&lt;/a&gt;, podemos hacer uso de &lt;code&gt;sed&lt;/code&gt;:&lt;/p&gt;</description></item></channel></rss>