Cami Can Calders, 8 2º-2ª | 08173 Sant Cugat del Valles info@bmotes.com 932504996

WhatsBee blog

Zigbee: ¿Necesito un sniffer?

 

Como decíamos ayer … ( © Fray Luis de León siglo XVI) nuestro objetivo es ver que pasa en la red Zigbee.

Lo que necesitamos es un network sniffer (en lo sucesivo sniffer). Un sniffer es un programa que captura las tramas de la red y las muestra de una forma mucho más visible para su análisis. He buscado, buscado y buscado…, el clásico Wireshark me ha parecido una buena opción, pero he tenido serios problemas porque el origen de la captura no es una tarjeta de red. Hay un montón de sniffers, pero son propios de cada entorno de desarrollo y DIGI no tiene ninguno. He descargado aplicaciones comerciales (de pago) que en su versión de demo no funcionan en modo «live», todas ellas son capaces de analizar un fichero con tramas, pero no de recoger las tramas directamente del coordinador. En otros casos he estado enviándome correos electrónicos con los fabricantes para probar su demo, pero tampoco he sido capaz, en unas me faltaba el código de instalación, en otras el servidor no verificaba el código suministrado por el fabricante, en definitiva un infierno.

Al final he encontrado uno, el AD Pixie Sniffer. Sinceramente es la que tiene el peor aspecto estético de todas, pero he llegado a la conclusión que en las otras aplicaciones, detrás de tanta belleza, hay una complejidad que impide que funcionen de forma sencilla, yo solo quería ver los paquetes.

El AD Pixie Sniffer no me reconoce mi Xstick de DIGI, es bastante lógico, la licencia del AD Pixie es gratuita siempre y cuando se utilice con uno de sus productos y eso es perfectamente detectable en las tramas.

XSitck de DIGI (Fuente: http://www.digi.com/)

En realidad aunque el AD Pixie funcionara con este USB Dongle solo podríamos ver las tramas que llegan a la capa de aplicación, tengo curiosidad también por ver como son las tramas que forman la red.

En el mundo Ethernet una tarjeta que es capaz de recoger todos los paquetes de la red se dice que funciona en modo promiscuo, en contra de la creencia popular de que una tarjeta que funciona en este modo es capaz de leer los paquetes «de las otras», esto no es exactamente así. Recordemos que en general en una red el medio es compartido, como norma general la capa física de la tarjeta se descartan todos los paquetes que no van dirigidos a la misma o son de broadcast y los paquetes que van dirigidos a las capas más inferiores del stack no llegan a la capa de aplicación (Exactamente lo que nos pasaba con Zigbee). La tarjeta en modo promiscuo es capaz de traspasar a las capas más altas todas las tramas que llegan a su medio, independientemente de a que tarjeta vayan dirigidas. El objetivo es mostrar gráficamente todos los pàquetes de la red.

En realidad a día de hoy esto no permite ver todos los paquetes. Originalmente en las redes de cable coaxial todo el tráfico estaba concentrado en el mismo medio aunque en las redes más grandes había algún bridge que filtraba el tráfico. Actualmente las redes tienen switches que son capaces de filtrar el tráfico entre sus «patas», por lo que los datos recogidos por unas tarjeta en modo promiscuo son los del dominio de colisiones en los que está instalada, no es capaz de atravesar un switch si no se ha configurado previamente para que pase el tráfico de forma transparente.

Y esto… ¿cómo funciona en Zigbee?… Pues, si tenemos en cuenta que el medio de transmisión es el aire y que en el aire no hay diferentes dominios de colisiones, cualquier módulo Zigbee que sea capaz de pasar a la capa de aplicación todos los paquetes que pasen por el aire, nos servirá para nuestro propósito (Insisto de nuevo, es pura deducción, no he encontrado información sobre este asunto, pero estaré encantado de aceptar correcciones).  Para conseguir que todos los paquetes pasen a la capa de aplicación lo que nos hace falta es un módulo con una versión de firmware pensada para esto, aunque no se si en el mundo Zigbee esto se llama modo promiscuo o de otra forma.

El módulo adecuado para el AD Pixie  es el UZBee de Flexipanel, curiosamente, al leer que dentro de este módulo no cabe el SW para que pueda hacer de coordinador, me he hecho una reflexión: Yo estaba pensando que el sniffer siempre hacía de coordinador, pero ahora veo claro que si es capaz de analizar todos los paquetes del medio no es necesario que lo sea, de hecho ni tan solo que forme parte de la red que analiza. Es lo lógico, una red Zigbee solo admite un coordinador y podemos querer analizar una red en la que el coordinador sea otro equipo.

USB Dongle UZBee plus (Fuente: http://www.flexipanel.com/)

Logicamente al Dongle le tenemos que instalar una versión de firmware especial MACDongle, que entiendo que únicamente contiene la capa MAC del Stack y que lo que hace es transmitir los paquetes tal cual por el puerto USB emulando un puerto serie.

Una vez más no hay buena disponibilidad en el mercado, ya os contaré cuando me llegue…

3 Comentarios

  1. orionym

    Hola,

    Antes de nada, felicidades por el Blog. Para todos los que estamos empezando con Zigbee es de mucha ayuda.
    Me ha llamado la atención esta entrada, ya que tengo ciertas dudas y no sé si necesito un dispositivo de este tipo o no.

    Estoy intentando desarrollar una aplicación en Java que se pueda conectar al coordinador de una red Zigbee y acceda a la información de la red y además pueda realizar peticiones a la red a través del coordinador. Lo ideal, es que pueda que pueda conectarme a cualquier tipo de red Zigbee, independientemente de Hw que se utilice. He visto que hay un api bastante utilizado que me permitiría hacer lo que quiero (xbee-api http://code.google.com/p/xbee-api/ ) pero parece que solo es útil si tienes dispositivos Xbee. ¿Conoceis algún API alternativo más genérico?

    La verdad que aquí es donde tengo las mayores dudas… No sé si necesito un API específico para los dispositivos que yo tengo, o por si lo contrario hay una puerta a la información de la red a través del protocolo de Zigbee y podría tener un API genérico…

    Cualquier pequeña ayuda será bienvenida.

    Gracias.

    Un saludo,

    Cristina

    1. Carlos (Publicaciones Autor)

      Cristina,

      incluso aunque utilices módulos Xbee lo que viaja por el aire cumple con las especificaciones Zigbee (hay varias en función de como configures los módulos). La especificación Zigbee define un protocolo, por encima de ese protocolo funciona el específico de Digi para la gama Xbee.

      Sobre paquetes Zigbee funcionan las APIS de Xbee que utilizan un endpoint y un cluster ID propios. Aún así (y si el API que quieres utilizar lo soporta) hay un tipo de paquetes Frame Type 0x11 con el que puedes enviar comandos Zigbee explícitos y otros para enviar Zigbee Device Objects (ZDO)para manejar los nodos.

      La respuesta es que si que puedes con radios Xbee, siempre y cuando la API que quieras utilizar te permita trabajar con los paquetes ZDO y los Explicit Zigbee.

      Apis genéricos, que yo sepa, no existen, cada fabricante de transceivers tiene el suyo, pero en este caso el API define la forma en la que te conectas al transceiver, lo que viaja por el aire es un protocolo estándar.

      Si utilizas Xbee puedes mirar el stack de Ember, que son los chips que utiliza en Xbee, pero el desarrollo es más complejo.

  2. berna83

    Hola Carlos.

    Enhorabuena por el blog, me ha ayudado bastante pero aun ando un poco perdido. Estoy haciendo un proyecto con un Sniffer ZigBee, y quisiera preguntarte un par de dudas por correo, si es tan amable, me podria dar su email?. Gracias y Saludos.

Dejar un comentario