2012-06-12 68 views
2

我希望能夠嘗試編寫一段軟件來幫助我讀取串口磁卡閱讀器中的數據。解碼串口通訊

我們有這個讀卡器,它是我們用來捕獲我們會員會員卡細節的一個非常老的設備。讀卡器有一個軟件可以下載卡的詳細信息(存儲在讀卡器上),然後軟件將詳細信息放在C驅動器上的文本文件中。我想寫一些軟件來完成同樣的事情。

我可能會吠叫錯誤的樹或希望太多,但任何幫助都會很好。

我到目前爲止已將讀卡器連接到本機的串行端口,並運行舊版軟件並使用com端口監視器捕獲通信。這是我有點卡住,並想知道如果任何人都可以告訴我,如果我所捕獲的是無論如何有用,並希望將我指向正確的方向。

當讀卡器沒有存儲卡信息並捕獲它時,我運行下載序列。

[12/06/2012 18:28:55] - Open port COM4 

[12/06/2012 18:29:02] - Written data 
31 00 01 00 00 00 32        1.....2   

[12/06/2012 18:29:04] - Read data 
31 00 06 00 0c 06 0c 00 00 00 00 55     1..........U  

[12/06/2012 18:29:04] - Written data 
33 00 01 00 00 00 34        3.....4   

[12/06/2012 18:29:05] - Read data 
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00  3.............B. 
00 43 00 00 63 00 00 00 01 51      .C..c....Q  

[12/06/2012 18:29:06] - Written data 
34 00 01 00 00 00 35        4.....5   

[12/06/2012 18:29:08] - Read data 
34 00 01 00 00 00 35        4.....5   

[12/06/2012 18:29:08] - Written data 
35 00 07 00 0c 06 0c 12 1c 36 00 00 be    5........6..¾ 

[12/06/2012 18:29:10] - Read data 
35 00 01 00 00 00 36        5.....6   

[12/06/2012 18:29:11] - Close port COM4 

然後我刷1卡,讀卡器有這個存儲在內存中,並再次運行下載的,這個時候我得到這個

[12/06/2012 18:31:23] - Open port COM4 

[12/06/2012 18:31:48] - Written data 
31 00 01 00 00 00 32        1.....2   

[12/06/2012 18:31:50] - Read data 
31 00 06 00 0c 06 0c 00 00 00 00 55     1..........U  

[12/06/2012 18:31:51] - Written data 
33 00 01 00 00 00 34        3.....4   

[12/06/2012 18:31:53] - Read data 
33 00 14 00 06 03 00 00 0c 00 00 0d 00 00 42 00  3.............B. 
00 43 00 00 63 00 00 00 01 51      .C..c....Q  

[12/06/2012 18:31:55] - Written data 
34 00 01 00 00 00 35        4.....5   

[12/06/2012 18:31:57] - Read data 
34 00 01 00 00 00 35        4.....5   

[12/06/2012 18:31:57] - Written data 
35 00 07 00 0c 06 0c 12 1f 16 00 00 a1    5...........¡ 

[12/06/2012 18:32:01] - Read data 
35 00 01 00 00 00 36        5.....6   

[12/06/2012 18:32:01] - Close port COM4 

最後我刷卡3卡並再次運行下載並抓獲這

[12/06/2012 18:30:21] - Open port COM4 

[12/06/2012 18:30:22] - Written data 
31 00 01 00 00 00 32        1.....2   

[12/06/2012 18:30:24] - Read data 
31 00 06 00 0c 06 0c 00 03 00 00 58     1..........X  

[12/06/2012 18:30:24] - Written data 
32 00 04 00 03 00 01 00 00 3a      2........:  

[12/06/2012 18:30:26] - Read data 
32 00 1c 00 03 00 01 00 12 1e 58 28 54 08 33 00  2.........X(T.3. 
12 1e 58 28 53 96 95 00 12 1e 58 28 54 12 32 00  ..X(S–•...X(T.2. 
05 07            ..    

[12/06/2012 18:30:27] - Written data 
33 00 01 00 00 00 34        3.....4   

[12/06/2012 18:30:29] - Read data 
33 00 14 00 06 03 00 01 0c 00 00 0d 00 00 42 00  3.............B. 
00 43 00 00 63 00 00 00 01 52      .C..c....R  

[12/06/2012 18:30:30] - Written data 
34 00 01 00 00 00 35        4.....5   

[12/06/2012 18:30:41] - Read data 
34 00 01 00 00 00 35        4.....5   

[12/06/2012 18:30:41] - Written data 
35 00 07 00 0c 06 0c 12 1e 15 00 00 9f    5...........Ÿ 

[12/06/2012 18:30:43] - Read data 
35 00 01 00 00 00 36        5.....6   

[12/06/2012 18:30:43] - Close port COM4 

我所知道的是,傳統的軟件檢查是否設備連接到所選則的COM端口將數據下載,然後從卡中清除數據讀者

而如果它幫助。如果我沒有讀卡器連接和嘗試,並下載我得到這個錯誤

命令0X31未發送

任何人都可以擺脫任何在這一切的光?

預先感謝您。

+2

如果您可以告訴我們您正在使用的硬件的型號以及使用什麼類型的卡,它將會更加有用。如果您努力提前查找硬件手冊,那更好。 – Brad

+0

所有這些我都試過了,這是由一家不再存在的公司製造的傳統定製硬件,硬件沒有型號,因爲它是一家相當定製的小公司。相信我,我已經費了很大力氣,這是我的解決方案,我問是否有人可以提供建議。 – JonBull2013

+0

你能告訴我們卡的類型嗎? RFID? Mag條紋?智能卡?你可以註釋日誌,注意你刷卡的地方嗎?卡上是否有任何類型的ID號碼可以與數據對齊?預計什麼樣的數據?舊的軟件是用什麼書寫的?如果它是像VB6那樣的東西(或者如果你真的很幸運,.NET),那麼你可以挖掘一下並且更好地瞭解如何使用這些數據。另外,您可以在幾次刷同一張卡的情況下獲取數據嗎? – Brad

回答

3

這是一個非常典型的串口協議。字節順序是最小字節順序。前兩個字節是塊號,這就是響應如何與請求相匹配以及如何檢測到數據包丟失。接下來的兩個字節是消息的長度,以字節爲單位。消息中的字節在後面。最後兩個字節是校驗和,即在整個消息中添加字節的結果。一些奇怪的原因,大尾巴,afaict。

這只是協議幀規範,對一個不完善,因爲它不顯示數據被擾亂時會發生什麼。什麼真的計數是消息中的數據字節。沒有辦法找到這些字節意味着什麼,沒有聯繫製造商,並獲得規範。

2

我們是很熟悉這些類型的協議,我能想到的解決這個問題的唯一途徑是:

  1. 聯繫廠家給你的API(消息格式)使用他們的軟件實用程序與卡交談
  2. 反向工程API協議。這可能需要付出巨大的努力才能找出所有數據字節的含義,這些數據字節的含義可以隨着卡提供的功能數量成倍增長。一個好的開始是刷一張卡並記錄數據並重新啓動硬件,刷第二張卡,記錄並重啓,第三張卡也一樣。然後在二進制消息之間進行二進制比較,以找出從一張卡變爲另一張卡的字節。