Autor Tema: USB Sniffer  (Leído 3523 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado isfan

  • PIC16
  • ***
  • Mensajes: 145
USB Sniffer
« en: 21 de Octubre de 2014, 13:11:20 »
Hola estoy tratando de buscar algo sobre hacer un Sniffer para el puerto USB y capturar el trafico de una impresora epson que usa el protocolo ESC/POS de impresión.

Lo que quisiera es saber de que forma puedo capturar los paquete cuando envia una petición de imprimir, y por otro lado que la impresora trabajara de forma trasparente (como si no tuviera conectado el dispositivo HW.
1.¿Se puede implementar esto con los microcontroladores?
2.¿En El caso afirmativo que configuración deberia darse un, Host USB? CDC, HID? quien seria el maestro y el esclavo?

Se me ocurre un par de modelos para implementar con el PIC24FJ64GB002  o el 18f4550.

Bueno haber si alguien me puede responder, muchas gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: USB Sniffer
« Respuesta #1 en: 21 de Octubre de 2014, 16:56:17 »
Hola, ¿es un sniffer que no interrumpe ni modifica la señal USB pero sí la muestrea? Los que ya existen son como éste:

http://www.totalphase.com/solutions/apps/usb-analyzer-guide/

¿Para qué necesitas tu sniffer? ¿Necesitas controlar una impresora?

Con los micros de Microchip podrías muestrear los datos del bus a modo sniffer, pero necesitarías un transceiver externo que interprete la señal NRZI diferencial del D+ y D- como unos y ceros. Además de que tendrá que evaluar otras condiciones como el estado pullup o pulldown para saber si es Low speed o Full speed. El muestreo de la señal más rápida (12MHz en Full speed) es posible con micros rápidos.

No es necesario que el micro tenga USB. Sólo necesitas un transceiver que cache los varios estados del bus.

Si la impresora que deseas monitorear es High speed (480Mbps), tendrías que diseñar algo súper avanzado que ni con el PIC más veloz muestrearías bien.

Desconectado isfan

  • PIC16
  • ***
  • Mensajes: 145
Re: USB Sniffer
« Respuesta #2 en: 21 de Octubre de 2014, 17:35:45 »
Hola Gracias por la respuesta
Si exacto no modifica para nada la señal de muestreo solo la captura y la impresora hace su tarea tal cual de forma trasparente y ajena al dispositivo.

Mi idea era la siguiente:

Desde una impresora de ticket (EPSON TM-H6000IV ) hacer una copia de seguridad de cada ticket imprimido y mandarlo via Bluetooth a mi terminal(Android).
Tengo desarrollado una app que envia esos archivo a un servidor centralizado para hacer uso a tiempo real desde la red a esos ticket.

Los pasos pensaba:
1º Capturar el muestreo del Puerto USB de la impresora cuando detecte una impresión.
2º Procesar el muestreo y sacar una Cadenas  de String filtrada.
3º Una vez filtrado el contenido capturado ( con los parametros importantes IDproducto, fecha, precio, etc) intentar crear un fichero de almacenamiento(no se si con los PIC se puede implementar ficheros de texto planos como un *.txt) y mandarlo por el Modulo bluetooth a otro dispositivo (en este caso un modulo con el integrado CC2540 Bluetooth 4.0 no se si me vendria mejor el 2.0 porque esta autoalimentado siempre de manera externa)


Como vera mi intención es hacer un sistema de backup de ticket vía hardware. se podria hacer con simple aplicaciones software eso si, pero yo quiero saber si esto es posible y factible hacerlo de esta manera.

PD: en las especificaciones Tecnicas no viene nada referente si la impresora es High speed.


Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: USB Sniffer
« Respuesta #3 en: 21 de Octubre de 2014, 17:58:58 »
y esa impresora que puerto tiene?
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: USB Sniffer
« Respuesta #4 en: 21 de Octubre de 2014, 18:06:55 »
estoy viendo la hoja técnica de EPSON TM-H6000IV y dice que tiene varias interfaces, wifi, usb, puerto paralelo y ethernet.

desde lo que entiendo parece mejor husmear desde un software en el ordenador, aunque los precios de un hardware ya construido como el del link que subió Santiago también valen la pena
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado isfan

  • PIC16
  • ***
  • Mensajes: 145
Re: USB Sniffer
« Respuesta #5 en: 21 de Octubre de 2014, 18:33:32 »
Pues instalar un software es la opcion mas cómoda, pero claro este foro esta para hablar de proyectos con integraciones con microcontroladores que es lo que verdaderamente me interesa.

Tanto para ampliar conocimientos teoricos y practicos como, de utilidad al conectar este dispositivo solo por un medio fisico sin hacer ninguna instalación.

Alguna idea de como meter mano a esto?

Esta impresora dispone tambien de puerto Serie, para conectarlo, habria que descartar en principio la opcion del puerto USB por su complejidad y requisitos?
Muchas gracias.
« Última modificación: 21 de Octubre de 2014, 18:35:34 por isfan »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: USB Sniffer
« Respuesta #6 en: 21 de Octubre de 2014, 22:26:45 »
En mi opinión, es mejor que captures los paquetes que van a la impresora por software. Coincido con Pali.  :mrgreen:

Construir el hardware (si fuera Full speed) es retador y te va a demandar mucho tiempo y experiencia. Es posible e incluso interesante. Si fuera High speed, yo no lo haría... el hardware para leer datos a 480MHz es... caro. Así dejémoslo... caro jeje.

Si lo que quieres es tener un respaldo de los tickets que has mandado a imprimir, debe haber un software que ya lo haga. Podríamos darle una investigada.

Otra es comprar el Beagle 12 (full speed), sólo si quieres gastar 400USD más envío más aduana más impuestos. Una vez muestreada la señal con el Beagle, tomas los datos RAW y los empiezas a desmenuzar con una aplicación que tendrías que diseñar. Si compraras el Beagle 480, la desmenuzada de la clase Printer ya viene hecha:

Printer
Bulk Data Transfers
Printer Class Descriptors
Printer Class Requests

Tú decides, recuerda que como ingeniero uno busca las tres B's. Y también... diseño, ingeniería y economía.

Si tu afán es aprender sobre cómo funciona una impresora USB... talvez te estés adelantando un poquito jejej. Empieza con clases USB sencillas como la CDC o la HID.

Saludos.

Desconectado isfan

  • PIC16
  • ***
  • Mensajes: 145
Re: USB Sniffer
« Respuesta #7 en: 23 de Octubre de 2014, 06:49:41 »
Muchas gracias por los consejos, Voy a intentar igualmente hacer un Sniffer Hw.

Ya iré contando si al final se paraliza el proyecto o hacer modificaciones.

1º Cuestión Apartado Captura de Datos USB:

Ahora por un momento vamos a suponer que voy a trabajar con pueros USB exclusivamente con Full-Speed(12Mbps)
Cual modelo de PIC me recomendaria para poder trabajar intentado muestrear todo el Puerto USB.
La gama de 8bits  18f se quedaria cortito?

que tal el PIC24FJ64GB002?
En el primer post me comentas que no hace falta que tenga el Modulo USB ni, ni OTG cierto?
¿Alguna Configuración especial en el Hardware para la captura de los paquetes del USB?

2º Cuestión, Apartado Crear un file, de texto plano.

Como comente Mi intención es capturar los paquetes saliente del puerto USB decodificar y filtrar algunas tramas de datos y mandarla via BlueTooth (en texto Plano *.txt)

Mi pregunta es si un microcontrolador puede crear un archivo de texto plano donde ir almacenando los datos del sniffer USB e ir enviando(con una cache de 5kByte habria de sobra
Hace falta un Modulo SD para almacenar archivos en tal formato? o con una  EEprom 24LC512 habria la posibilidad


Bueno muchas gracias, se que son muchas preguntas pero este proyecto es muy complejo haber si alguien me la aclara para poder empezar
un saludo.






Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: USB Sniffer
« Respuesta #8 en: 23 de Octubre de 2014, 13:33:29 »
Hola, bueno pues como primer paso te sugiero que leas el documento siguiente: The Original USB 2.0 specification released on April 27, 2000.

http://www.usb.org/developers/docs/usb20_docs/usb_20_081114.zip (Página: http://www.usb.org/developers/docs/usb20_docs/)

Hay capítulos que podrás pasar por alto. Debes enfocarte en entender la naturaleza de los datos que viajan a través de D+ y D-. Cómo funciona la señal diferencial que viaja por ahí, los tipos de voltajes que se manejan, sus velocidades, cómo se comienza la enumeración de un dispositivo, cómo sabe el host que es low speed o full speed, la asignación de una dirección USB, el envío de descriptores USB para que el host sepa con quién está lidiando y la puesta en marcha del device.

Ya sabiendo cómo se manejan las señales eléctricas deberás buscar un transceiver USB que se encargará de convertir los estados NRZI del bus en estados 0 y 1 leíbles por un procesador o un microcontrolador.

Mencioné que no necesitas un micro con periférico USB porque esos micros se encargan de darle uso a los datos USB, pero no te reflejan la capa física de la señal en su mayoría. Es decir, si el bus tiene un 1 lógico en un instante, no hay un registro en el micro que te permita leerlo. Hay micros que sí traen esas prestaciones, pero son procesadores muy veloces y que estarían fuera de alcance para tu proyecto. Con un micro normal y un transceiver apropiado podrás leer a nivel TTL el estado reflejado del bus de datos. También te podrá reportar los estados de las pull-up-down de las líneas D y los estados J y K que se manejan en la comunicación.

Una vez que comprendas al 100% cómo se enumeró el dispositivo deberás: entender cómo se comporta la clase USB Printers, cómo se envían y reciben comandos en ella, cómo se comunican los endpoints, qué tipo de endpoints existen.

Como experimento y sólo adivinando, me atrevo a decir que si te quieres inclinar por un producto Microchip elijas un PIC32 de los que corren a 100MHz. El podrá muestrear datos de la señal de 12MHz. Probablemente esté limitado ya que los 100MHz del CPU no siempre son tan reales y te quede corto (se miden en DMIPS - Dhrystone MIPS). Pero como primera aproximación podrías empezar con él.

El salvado de datos en una SD con el mismo micro será el mayor problema. Prácticamente los sniffers USB no guardan nada en ROM porque los datos muestreados llegan mucho más rápido que la velocidad de escritura de una SD. Deberás usar una RAM interna o externa que te permita guardar muestras por un periodo máximo de tiempo.

Es por eso que los sniffers que puse en mi primer post son caros. Por la calidad de buffers que tienen en cuanto a velocidad electrónica y por la capacidad de RAM interna que tienen para guardar muestras.

Saludos.


 

anything