Sniffing de tráfico USB con Wireshark

Problema: una impresora HP LaserJet 1300 que funcionaba perfectamente en Ubuntu 9.10 ha dejado de hacerlo al actualizar a Ubuntu 10.04 el PC de sobremesa. Realmente el trabajo de impresión se envía, la impresora parpadea indicando que está recibiendo datos, pero nunca deja de parpadear, y no arrastra papel para imprimir.

Al conectar otro Ubuntu 10.04 – de un portátil – a la misma impresora, funciona perfectamente. Las versiones de CUPS, libpoppler, foomatic y compañía son las mismas en ambos ordenadores. Eliminando del PC completamente todos los programas indicados (apt-get remove –purge && rm -rf /etc/cups) y volviendo a instalar, no se soluciona el problema.

CUPS en modo debugger no indica ningún fallo (es posible ponerlo en modo debugger cambiando el DebugLevel en /etc/cups/cups.conf). Un diagnóstico de problemas de impresión tampoco arroja ningún resultado.

¿Cómo solucionar? Bien, la idea es ir al meollo de la cuestión: ¿qué se está enviando por USB a la impresora en uno y otro caso? ¿Cuál es la diferencia entre lo que envía el portátil y lo que envía el PC de sobremesa? Eso nos puede dar alguna pista.

Para capturar el tráfico USB nos valdremos de un kernel moderno y compilado con soporte debugs:

$ mount | grep debugfs
none on /sys/kernel/debug type debugfs (rw)

Lo siguiente es comprobar en qué bus USB tenemos conectada la impresora:

$ lsusb | grep Hewlett
Bus 007 Device 002: ID 03f0:1017 Hewlett-Packard LaserJet 1300

Ahora que tenemos todos los datos, arrancamos Wireshark y elegimos hacer sniffing sobre el bus USB apropiado. Al enviar un documento cualquiera a imprimir, veremos que hay actividad en Wireshark. En la imagen vemos que se ha convertido el documento a formato PostScript y eso es lo que se ha enviado a la impresora. Haciendo lo mismo desde el portátil, al enviar el mismo fichero a la misma impresora veo que hay diferencias precisamente al final del documento PostScript.

A partir de este punto el trabajo que he realizado no ha sido nada interesante, pues realmente ha sido un penoso proceso de prueba y error, copiando versiones de programas del portátil al PC, sin buenos resultados… hasta que en un foro he visto que para impresoras HP en Linux recomendaban encarecidamente instalar HPLIP, un conjunto de drivers y aplicaciones de gestión en Linux de la propia HP. Realmente hasta ahora nunca lo había usado (me bastaba con el soporte base que me daba CUPS), pero ha sido instalarlo, configurar una impresora desde hp-toolbox e imprimir a la primera.

4 comentarios en «Sniffing de tráfico USB con Wireshark»

  1. A ver si se dignan los de HP a traducir su software de Linux al Español, es un poco vergonzoso dejar un buen trabajo a medias, el software de HP para Linux es bueno y funciona bien, ¿Por que meten la pata en cosas tan tontas?

  2. Aunque al final has terminado buscando la solución al problema en Internet (como hacemos la inmensa mayoría de los mortales) me ha gustado realmente el uso de Wireshark para esnifar el flujo de datos entre los equipos y la impresora.

    Gracias por compartirlo pues a buen seguro que en algún momento podría hacerme falta

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.