miércoles, febrero 28, 2007

Nuevas capturas de MacOS X Leopard

En thinksecret acaba de publicar unas cuantas capturas nuavas de la versión 9A434. La galería completa de imágenes. Quizás lo que más me ha llamado la atención es esta captura:

Donde por fin vemos el Terminal con soporte para tabs (pestañas) - algo que lleva desde hace mucho tiempo por ejemplo el konsole de KDE -.Aparte varias capturas del panel de configuración de red.

Technorati Tags: ,

martes, febrero 27, 2007

Manejo de memoria en código de red: Linux y BSD

Hace no mucho, encontré una referencia a skbuff.net, una página web donde se describe como es la gestión de memoria en el código de red en el caso de Linux, implementado a través de una estructura denominada sk_buff - socket buffet -. Recordando el TCP/IP Illustrated Volumen II, he estado buscando la referencia a la implementación en los BSD (FreeBSD, NetBSD o OpenBSD), que en este caso la estructura recibe el nombre de mbuf.

Recuerdo hace bastantes años, que en el IRC se comentaba que el uso de sk_buff era más rápida que el caso de los mbuf de BSD. Pero no encuentro actualmente ninguna referencia a estudios llevados a cabo respecto al uso de una pila TCP/IP u otra.

La documentación para el caso de Linux es escasita (al menos no tienes una página de manual como puedes tener en un BSD o una página como suele pasar con la información de los proyectos BSD). Puede verse un poco de como se manejan esta información en este artículo de Alan Cox.

Technorati Tags: , ,

lunes, febrero 26, 2007

Configuración avanzada de TCP/IP en Linux (VI): Tablas de rutas

La parte más interesante de la configuración de Linux es la tabla de rutas. Normalmente, la tabla de rutas se ha manipulado en los Unix tradicionales a través del comando route, y para obtener información de la misma se usaba netstat -rn.

Realmente, lo primero que cabe decir es que estas dos utilidades actúan sobre la tabla de rutas denominada main. Linux puede tener hasta 32762 tablas de rutas, cada una de ellas identificada por un número o por un nombre asociada al mismo (que se resuelve a través del fichero /etc/iproute2/rt_tables). Existen tres tablas de rutas predefinidas:

  • local. Tiene asignado el número de tabla 0.Esta tabla es mantenida por el kernel y no debe de tocarse por el usuario. Esta tabla se encarga de manejar las rutas hacía direcciones locales del sistema y las de broadcasting
  • main. Tiene asignado el número de tabla 32766. Esta es la tabla principal de rutado. Se maneja con la utilidad route o con ip route sino se especifica la tabla sobre la cual se trabaja.
  • default Tiene asignado el número de tabla 32767. Esta tabla se encarga de procesar todas aquellas rutas que no hayan sido tratadas anteriormente.
Como vemos, cada tabla tiene asignada un número que indica su prioridad. A la hora de decidir qué debe de hacerse con un paquete, estas estructuras se recorren de menor prioridad a mayor hasta dar con una entrada que sea capaz de mandar el paquete.

Una entrada en la tabla de rutas viene definida por una serie de parámetros. Los más básicos son un prefijo que define el destino (normalmente dado en forma de una red y máscara) y un parámetro que indica cual es el siguiente salto que debe de tener la ruta (el siguiente salto viene definido por el dispositivo, dirección ip y un parámetro de peso de la ruta, útil en caso que queramos usar un balanceo de carga). Aparte podemos establacer un campo ToS - type of service - para poder elegir una ruta determinada (por ejemplo, se pueden marcar los paquetes para posteriormente usar una ruta u otra en función de este valor), puede usarse una metríca para la ruta o una preferencia.

Aparte, una entrada puede modificar ciertos aspectos de una comunicación en caso de que un paquete use una entrada de la tabla de rutas determinada.

Las entradas de cada una de las tablas describen como debe de encaminarse los paquetes hacía un destino determinado. En Linux soporta las siguientes tipos de rutas:

  • Rutas unicast: Es una entrada normal de ruta. Indica hacía donde tiene que ir un paquete determinado
  • Rutas blackhole: Se se selecciona una entrada de este tipo para rutar el paquete, se descarta sin más
  • Rutas prohibit: En este caso se descarta el paquete y se manda a la dirección origen del mismo un paquete ICMP indicando que la ruta está prohibida
  • .
  • Rutas local: Rutas locales. Cualquier paquete que selecciones una ruta de este tipo, lo mandará de vuelta al host local y se entregará de manera local.
  • Rutas broadcast: En este caso el destino es una ruta de difusión. El paquete se enviará encapsulado en una trama de difusión en el nivel de enlace.
  • Rutas throw: Se utiliza para parar la búsqueda de entradas en la tabla de rutas. En caso de llegar a una entrada de este tipo, el paquete se descarta.
  • Rutas nat: Han sido eliminadas en el kernel 2.6.x, con lo cual no voy a hablar de ellas.
  • Rutas anycast: No están implementadas. Se debería comporta como rutas locales.
  • Rutas multicast: Se usa para rutar paquetes multicast.

Por otra parte en la tabla de rutas cada una de las mismas puede haber sido instalada por un protocolo determinado. Los protocolos están identificados por un valor numérico, y por otra parte existe una serie de valores definidos:

  • redirect: La ruta ha sido instalado por un ICMP redirect.
  • kernel: La ruta ha sido instalada por el núcleo durante el proceso de autoconfiguración.
  • boot: la ruta la ha instalado los scripts de inicio del sistema. En caso de que se arranque un daemon de rutado, las debe de borrar.
  • static: La ruta ha sido instalada por un administrador de sistemas. Estas rutas deben de ser respetada por los daemons de rutado. En función de la configuración de los mismos, podrá anunciarlo a otras máquinas que participen en el algoritmo de rutado.
  • ra: La ruta ha sido instalada por el algoritmo de descubrimiento de routers
Esta información se encuentra en el fichero /etc/iproute2/rt_protos

Technorati Tags: ,

miércoles, febrero 21, 2007

Windows Vista y protocolos curiosos de red

Mientras analizaba información de una sonda de ossim el plugin de spade me han estado cantando alarmas de ordenadores mandando información a 224.0.0.252 y al puerto 5355.Buscando un poco por internet he dado con esta entrada de uno de los blogs d Microsoft, que hace referencia a un protocolo, Link-Local Multicast Name Resolution, que permite la resolución de nombres en una red local sin necesidad de un servidor de DNS (exactamente igual que bounjuor en MacOS X). No es un protocolo estándar aunque el borrador para el IETF es público. Este protocolo de resolución de nombres funciona tanto sobre IPv4 como sobre IPv6,y sólo tiene alcance en la subred en que está conectada la máquina ( link-local scope ). El formato de los paquetes puede encontrarse en la entrada de Cable Guy. Es una cabecera de 12 bytes seguidos de varios registros de longitud variable con preguntas, respuestas, registros autorizados y otros registros. La resolución de Windows Vista es primero DNS, luego LLMNR y si está activado resolución tradicional NetBIOS.

Otra de las trazas que he estado observando son las de Teredo, lo cual no es más que una tecnología para encapsular IPv6 sobre IPv4 cuando el host IPv6 se encuentra situado detrás de una máquina IPv4 que hace NAT. Otra tecnología que existe para este cometido es 6to4. En principio, con la extensión del espacio de direcciones que permite IPv6, no sería necesario emplear técnicas de NAT para las máquinas. Pero realmente, la Internet a día de hoy es en su mayoría IPv4, con lo cual se acaban añadiendo este tipo de mecanismos de traducción de direcciones.

Teredo está disponible en Windows XP con el SP2 o Windows 2003 con SP1 aunque viene deshabilitado por defecto, frente a Vista o Longhorn lo traen por defecto, aunque en este último caso no está activo por defecto.

Technorati Tags:

martes, febrero 20, 2007

Autoconf, aclocal, macros m4 y otras hierbas: Configurando software Open Source

Reconozco que toda la familia de utilidades tipo autoconf, aclocal y configure me acaban causando dolor de cabeza en el momento que intento usarlas fuera de Linux. Pensadas para aumentar la portabilidad, al final, han conseguido que se complique las cosas: si el objetivo es la portabilidad debe de asegurarse que funciona (por no hablar del rendimiento que tiene alguno de estos mostruosos shell scripts....)

Para empezar el antidiluviano m4 como procesador de macros. Sintaxis más propia de mediados de los años 80, cuando hoy en día cualquier sistema tiene un buen interprete perl o python.

Aparte, la gente de Freedesktop tienen otro sistema para localizar donde están los ficheros includes y las librerías, llamado pkg-config.Este sistema es un ejecutable y una serie de ficheros que especifica donde están las librerías y ficheros includes. Por ejemplo MacOS incluye estos ficheros para algunas librerías en /usr/lib/pkgconfig. Claro, que en caso de que actualicemos por ejemplo a nuestra propia versión y la coloquemos en /usr/local, nos encontraremos que el pkg-config sólo esté buscando los paquetes en /usr/local/lib/pkgconfig. Para evitar estos problemas podemos utilizar la variable de entorno PKG_CONFIG_PATH. En esta variable se puede especificar una lista de directorios separados por ":" para que el programa busque en los mismos los ficheros necesarios. Así para que busque en /usr/lib/pkgconfig y /usr/local/lib/pkgconfig:

ibookdrizzt:~ terron$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig 
ibookdrizzt:~ terron$ pkg-config --libs glib-2.0
-L/usr/local/lib -lglib-2.0 -lintl -liconv  
ibookdrizzt:~ terron$ 

Un detalle, aparte, es que para usar autoconf y demás familia, pkg-config instala un fichero de macros llamado pkg.m4.Este fichero de macros depende de donde se ha configurado la instalación del mismo. Claro, que si lo queremos usar desde un aclocal para buscar las dependencias dependerá también de como este último se haya compilado. Para ello, aclocal tiene la opción -I directorio para especificar las rutas de búsqueda de los ficheros m4. Por ejemplo, si en nuestro sistema tenemos un fichero de macros m4 que necesite aclocal en /usr/local/share/aclocal, pues:

ibookdrizzt:~/tmp/os-sim-0.9.9rc3.drizzt terron$ aclocal -I /usr/local/share/aclocal 
ibookdrizzt:~/tmp/os-sim-0.9.9rc3.drizzt terron$ 

En fin, problemillas que me voy encontrando con las autotools ....

Technorati Tags: , ,

lunes, febrero 19, 2007

VoodoPad

Hace poco un amigo del curro me ha pasado la referencia a VoodooPad. Esta pequeña aplicación shareware para MacOS permite montarse un wiki personal para poder organizar la información. Como ventaja principal es que no usa la sintaxis - para mi un poco farragosa -. Al igual que en el caso de un Wiki, tenemos un documento compuesto por páginas y que se enlazan entre sí. Al crear un documento nuevo, se nos muestra una página del siguiente estilo:

inicio de documento

Esta primera página nos sirve de inicio para ir creando el resto con el contenido que nos interese. El editor que se utiliza es el mismo que utiliza la aplicación de MacOS X, TextEdit, con todas las funcionalidades que esto permiten: Uso de listas, tablas, diversas opciones de formato de párrafos, selección de fuentes, etc:

Editor VoodooPad

De la extensiva lista de funcionalidad del programa me gusta destacar el soporte de tabs (pestañas) a la hora de editar, la posibilidad de almacenar información de diversos formatos en el documento - imágenes, pdfs,etc - , las posibilidades de scripting a través de lua, posibilidad de exportar a varios formatos (Word, XML, HTML), el uso de tags y categorías para poder localizar y clasificar la información.

Actualmente lo estoy probando para almacenar toda la información que vas anotando en pequeños ficheros de texto, para poder tenerla clasificada fácilmente y acudir a ella para buscarlo. Un bloc de notas multifunción y multimedia: información, trozos de código, imágenes, capturas, etc.

Technorati Tags: ,

jueves, febrero 15, 2007

Sierra de Gredos: Toros de Guisando y Valle de Iruelas

El finde pasado mi novía y yo decidimos darnos una escapada a la zona de la Sierra de Gredos que está alrededor del Tiembo y los Toros de Guisando. Saliendo de Madrid por la carretera de los pantanos (M-501) la seguimos hasta San Martín de ValleIglesias, estando situados a unos 3 km de esta población. Estas esculturas están datadas del siglo IV-III antes de Cristo, y se cree que se hacían como protecciones mágicas para los prados de alrededor (puede verse algo más de información aqui y aquí. Toros de Guisando Siguiendo la carretera, nos dirigimos hacía el Tiemblo, y pasamos tomamos la carretera que se dirige hacía Ávila,para llegar a la zona del embalse del Burguillo,para abandonar la misma, cruzar la presa e ir hacía la reserva natural del Valle de Iruelas. Esta zona está situada sobre la cara norte de la Sierra de Gredos, y tiene un paísaje espectacular. Aprovechamos para comer en la zona de turismo rural que se ha habilitado: casas rurales pequeña capilla Después de comer seguimos la carretera que lleva hacía la Rinconada, para coger el camino que sube hacia el puerto de Casillas. Asfaltado en los primeros km, se puede recorrer en hasta que se vuelve una pista forestal sólo apta para todoterrenos. Este recorrido se encaja en un valle, siguiendo el curso de un riachuelo que desemboca en el pantano. En el puerto está marcado en los mapas como un mirador, pero el coche que llevábamos no es el más adecuado para subir el trozo de la pista forestal. El bosque de pinos que atraviesa es precioso y la tranquilidad que se respira hace que la excursión merezca la pena. riachuelo riachuelo Reconocemos que hay sitios en la Sierra de Gredos que merece la pena explorar.

Technorati Tags: ,

miércoles, febrero 14, 2007

Descompiladores de Java

He estado haciendo una auditoría sobre código Java y he estado usando varios descompiladores para ver los resultados. En común es que muchos de ellos el uso de mismo backend,jad. Tiene algunas limitaciones a la hora de descompilar y no está la última versión para MacOS X para powerpc.

He estado usando habitualmente Jarinspector, un proyecto de código abierto LGPL. Utiliza un pequeño envoltorio nativo y luego usa una serie de programas java para descompilar. No funciona mal.

También opensource tenemos una aplicación nativa java, jode. No la he usado mucho, pero sin embargo tiene algunas características interesantes:

  • Cambiar el nombre de clases, métodos, campos o nombres locales, usando incluso una tabla de traducción.
  • Quitar la información de depuración
  • Quitar código muerto y campos constantes
  • Optimizar la local
A la hora de usar ingeniería inversa la primera y la tercera son las más útiles para a la hora de la ingeniería inversa.

En Windows está bastante bien el dj java decompiler - que usa como backend jad. Es bastante útil desde mi punto de vista - en especial por las posibilides de descompilar en batch que tiene -

Siempre es interesante conocer las especificaciones de la máquina virtual Java, en especial el formato del fichero de clase.

Technorati Tags:

lunes, febrero 12, 2007

iPodDisk

En Microsiervos he encontrado una referencia a iPodDisk. Esta herramienta permite copiar música del iPod al ordenador - en principio Apple no permite esta opción de manera, digamos sencilla. Emula un iDisk y monta el iPod como una unidad más:

Entre otras cosas permite compartir música en red, tiene utilidades de línea de comandos, soporta iPod formateados para Mac o Widows y soporta el uso de spotlight :)

El software es de código abierto y se distribuye con licencia GPL :)

martes, febrero 06, 2007

Soporte de SmartCards en MacOS X

No tengo muy claro cual es el soporte de SmartCard (o tokens USB como por ejemplo el e-Token) para usar en sistema de autentificación con MacOS X. Bicheando un poco he visto los programas pcsctool y pcsctest para gestionar el uso de SmarCards. Si ejecutamos pcsctool nos dará la lista de librerías que tenemos para soportar las SmartCards
ibookdrizzt:~ terron$ pcsctool 
Select the approprate token driver:
-----------------------------------
  1.     commonAccessCard.bundle
  2.     GSCISPlugin.bundle
  3.     mscMuscleCard.bundle
  4.     slbCryptoflex.bundle
-----------------------------------
Enter the number: 

Estas herramientas salen de M.U.S.C.L.E, un proyecto con la idea de dotar de soporte de smartcards a Linux.

Aparte de este soporte, es necesario los drivers de bajo nivel para acceder a la funcionalidad de la Smartcard. Se supone que Aladdin da soporte para los mismos, aunque en su web no he encontrado los drivers. Una posible solución es mirar el proyecto OpenSC, que tiene drivers para diferentes sistemas (puede verse aquí).

Lástima que no exista documentación oficial de Apple sobre el tema :(

Technorati Tags:

viernes, febrero 02, 2007

Configuración avanzada de TCP/IP en Linux (V): Gestión de las direcciones.

En el artículo artículo sobre el tema estuve hablando de como obtener la información para manejar las direcciones y de los tipos que nos encontramos en Linux. Ahora voy a comentar un poco como se gestionen.

Añadir direcciones

La sintaxis del comando para añadir direcciones es la siguiente
Usage: ip addr add IFADDR dev STRING
      
IFADDR := PREFIX | ADDR peer PREFIX
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
Para asignar una dirección IP es tan sencillo como:
terron@menzoberrazan:~$ip addr add 192.168.1.10/24 broadcast 192.168.1.255 scope global dev eth0
¿Y qué pasa con los alias?. Con la utilidad ifconfig, la manera de colocar un alias era ifconfig eth0:0 192.168.2.1 mask 255.255.255.0. Este comando asignaría una interfaz virtual con la IP asignada. Con la utilidad ip se puede asignar cualquier nombre de interfaz, porque realmente lo que tiene la interfaz son etiquetas. Sin embargo, por compatibilidad, debe de llamarse disposito:etiqueta. Por ejemplo:

terron@menzoberrazan:~$ip addr add 192.168.2.10/24 broadcast 192.168.1.255 scope global label eth0:0 dev eth0
Como podemos ver el alcance en los dos ejemplos anteriores es global. Por ejemplo, el alcanza de una dirección asociada al localhost:
terron@menzoberrazan:~$ip addr add 127.0.0.1/8 broadcast 127.255.255.255 scope host dev lo
Para el caso de una dirección asociada a una dirección peer to peer (por ejemplo un túnel). En este caso la máscara de red está asociado al otro extremo. Por ejemplo si estamos usando 172.16.0.0/30 y se crea un túnel entre la 172.16.0.1 y 172.16.0.2 la dirección se crearía:
terron@menzoberrazan:~$ip addr 172.16.0.1 peer 172.16.0.2/30 broadcast 172.16.0.3 scope global dev ppp0

Borrado de direcciones

Para borrar una direción:
Usage: ip addr del IFADDR dev STRING

IFADDR := PREFIX | ADDR peer PREFIX
          [ broadcast ADDR ] [ anycast ADDR ]
          [ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
Para borrar todas las direcciones asociadas a la interfaz eth0
terron@menzoberrazan:~$ip del dev eth0
Si quisieramos borrar una sola dirección podríamos especificarla:
terron@menzoberrazan:~$ip addr del 192.168.1.2/24 label eth0:0 dev eth0
Esa orden quitaría la dirección 192.168.1.2 asociada a la eth0 y con etiqueta eth0:0 - que en la terminología de ifconfig equivaldría a la interfaz virtual eth0:0 -

Technorati Tags: ,

jueves, febrero 01, 2007

Un algunas fotos de una excursión por la Sierra de Madrid

Aprovechando que ha nevado, este finde pasado nos hemos ido mi novia y yo , a dar una vuelta por la sierra de Madrid. Como era de esperar, toda la subida a Navacerrada atascada - tardamos un buen rato en llegar arriba del puerto. Toda la zona estaba nevada, un frio que pela y fotos bastante espectaculares:

Navacerrada, desde el aparcamiento

La meseta castellana, desde lo alto de Navacerrada

Después de pararnos un rato en lo alto del puerto, seguimos por la carretera que va hacía Rascafría, pasando por el puerto de Cotos. Nos paramos a sacar algunas fotos en los pequeños aparcamientos que hay a lo largo de la carretera. Nos pareció curiosa la de los carámbanos en la piedra, y el cauce del rio nevado.

carámbanos en una roca cauce de un riachuelo

Pasamos por el Paular, y en Rascafría decidimos volver a Madrid a través de la sierra de la Morcuera, a través del puerto del mismo nombre. La vista sobre el valle donde está Rascafría es preciosa.

Rascafría y el valle, subiendo por la carretera del puerto de la Morcuera Por la sierra de la Morcuera