Como construir um driver USB e extrator de dados (Leitor de cartão magnético)? [Python, Ruby]

2

Então eu tenho esse leitor de cartão magnético (genérico) que eu comprei da internet (é chinesse) o problema é que ele tem um manual mas está no chinesse (hahhaha) Então eu não entendo ... eu tenho dois Linux Machines (um Ubuntu e um Fedora) e se você ligá-lo via USB, ele liga e se você passar um cartão (com um editor de texto aberto) Você recebe um código / string um pouco como este:

1303031110012015¿999999999999999
Obviamente, há as informações do Card em algum lugar (que é um cartão de afiliação ao cinema) e o que eu quero fazer é extrair as informações (como nome do proprietário e outros dados, por exemplo) desse número, se eu executar lsusb Eu recebo algo assim:

Leitor desconectado:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 04f2:b293 Chicony Electronics Co., Ltd 
Bus 007 Device 003: ID 0cf3:3005 Atheros Communications, Inc. AR3011 Bluetooth

Leitor conectado:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 04f2:b293 Chicony Electronics Co., Ltd 
Bus 007 Device 003: ID 0cf3:3005 Atheros Communications, Inc. AR3011 Bluetooth
Bus 005 Device 005: ID 05fe:1010 Chic Technology Corp. Optical Wireless

E eu conheço um pouco de Python e Ruby (mais ruby do que python), mas não sei por onde começar ... Seria ótimo se alguém pudesse me apontar na direção certa. ¿Você consegue? (seria ótimo ter um driver de plataforma cruzada para Windows, Linux e Mac).

Obrigado.

P.S. Este é o leitor de cartão que comprei: link

    
por Jmlevick 24.10.2012 / 03:55

1 resposta

4

Comece analisando o artigo da Wikipedia sobre cartões de tarja magnética , que descreve os layouts comuns de dados.

Seu leitor foi projetado para a faixa 2, o que significa que ele lê uma série de dígitos e caracteres especiais. Na página do produto, o dispositivo aparece no seu sistema como um teclado e insere os caracteres que vê. Assim, as informações que você vê ao passar o cartão são exatamente as informações armazenadas na faixa 2 do cartão. Nesse caso, parece o seu número de ID do cliente e nada mais.

Para obter mais bits interessantes, como nomes, você pode tentar colocar um shim físico dentro do leitor para que a cabeça lê a faixa 1. No entanto, isso pode não funcionar se o hardware só souber decodificar a faixa 2.

Para ler o dispositivo programaticamente, você pode usar stdin como faria para um teclado completo. O projeto StripeSnoop de código aberto está morto há muito tempo, mas você provavelmente pode obter algumas boas dicas dele mesmo assim. A tecnologia de tarja magnética não mudou em muito tempo. Hack a Day também tem alguns bons links sobre cartões de crédito.

    
por Steven Bell 24.10.2012 / 04:35