學習POS的數據包分析


《一個菜鳥應用軟件工程師的成長故事》(2)

在看了三個禮拜的基於PBOC2.0的POS規范后,今天來梳理一下這段時間的學習內容。

由於規范里的內容比較多,這里就不講那么仔細了,我打算在分析一份數據包的同時,穿插復習以前學過的知識。

下圖就是一份主機從網控器收到的消費數據包(用兩位十六進制數表示一個字節)。

 

相信很多人第一次接觸到這種數據元都會抹眼黑,啥也看不懂,我也是,說實話,我是聽了我們技術總監的講課后才明白這是怎么回事的,現在雖然能看懂,但還不是很熟練。廢話少說,我們來看看這是怎么回事(數據包里的字節按從左到右的順序來排列)。

首先,從第1個字節開始。02,轉化為二進制就是0000 0020,它表示這份數據的開始,幾乎每份數據包都有它的存在。

第2、3個字節是表示后面數據(即8583包)的長度大小,01 06表示8583包的大小為106個字節,即從第4個字節到第109個字節(即倒數第2個字節03)。其中,03為結束符,03前一個字節31則是crc校驗:從第2個字節到結束符03(包括03)之間的異或結果。

第4個字節到第7個字節是網控地址,即tpu:60 00 07 08 08。

第8、9個字節是8583包的開始,它表示交易信息碼(MSGID),02 00表示交易類型為消費,即消費信息碼。

第10到第17個字節(30 20 05 00 20 c0 02 01)是數據包的位圖,位圖一共有8個字節(64位)。先將位圖轉換為二進制(0011 0000 0010 0000 0000 0101 0000 0000 0010 0000 1100 0000 0000 0010 0000 0001),由於第一位不是1,所以除了這個位圖外,數據包中沒有擴展位圖;從這個二進制序列中,我們可以很容易地得知,位圖依次包含以下幾個域:3,4,11,22,24,35,41,42,55,64。

其實,從30到31就是8583數據包,即通常說的數據元。

位圖之后,跟着的是域的信息,域的屬性主要有如下幾種:

a 表示字符,

n 表示數字,

s 表示特殊字符,

b 表示二進制,

z 磁道編碼。

首先,我們來看位圖后面的第一個域,即3域。

第3域:

    名稱:交易處理碼

    屬性:n6

    類型:BCD

    截取字符:00 40 00

如此,原始數據為:004000

從這個例子可以看出,只要我們從位圖上確定了某個域的存在,然后就可以在相應的位置找到該域,然后很據它的屬性與類型來確定原始數據。

類似地,可以得出接下來幾個域表示的信息。

第4域:

    名稱:交易金額

    屬性:N12

    類型:BCD

    截取字符:00 00 00 00 00 99 80(金額是以分為最小單位的,左補零)

    原始數據為:99.80

第11域:

    名稱:受卡方系統跟蹤號(即流水號)

    屬性:n6

    類型:BCD

    截取字符:00 00 01

    原始數據為:000001

第22域:

    名稱:服務點輸入方式碼

    屬性:n3

    類型:BCD

    截取字符:00 21(左補零)

    原始數據為:021

第24域:

    名稱:國際網絡識別符

    屬性:n3

    類型:BCD

    截取字符:00 03(左補零)

    原始數據為:003

第35域:

    名稱:2磁道數據

    屬性:z..37(長度為37,取整后有19個字符)

    格式:LLVAR(可變長)

    類型:BCD

    截取字符:37 62 14 02 10 00 07 41 50 78 d1 56 07 12 20 10 00 00 00 00

    原始數據為:62 14 02 10 00 07 41 50 78 d1 56 07 12 20 10 00 00 00 0

第41域:

    名稱:受卡機終端標識碼(即終端號)

    屬性:ans8(字母,數字,特殊字符皆可,長度為8)

    類型:ASCⅡ

    截取字符:31 32 33 34 35 36 37 38

    原始數據為:12345678(1的ASCⅡ碼為31,因此很容易得出這個結果)

第42域:

    名稱:收卡方標識碼(即商戶號)

    屬性:ans15

    類型:ASCⅡ

    截取字符:30 34 33 20 20 20 20 20 20 20 20 20 20 20 20

    原始數據為:043

第55域:

    名稱:IC卡數據域

    用法:未知(55域有很多用法,這里不確定是用哪種)

    屬性:未知

    類型:未知

    截取字符:ce 8e b2 00 18 03 1e 9a

    原始數據為:未知

第64域:

    名稱:MAC

    屬性:b64

    類型:BINARY

    截取字符:00 06 30 30 30 30 30 31 00 06 30 30 30 30 30 30 00 06 30 30 30 30 30 31

    原始數據:00000000 00000110 00110000 00110000 00110000 00110000 00110000 00110001 00000000 00000110 00110000 00110000 00110000 00110000 00110000 00110000 00000000 00000110 00110000 00110000 00110000 00110000 00110000 00110001

-------------------------------------

以上就是對這份消費數據包的分析,除了第55域我還沒弄懂外,其他的可以說是基本理解了。總的來說,數據包的分析並不難,關鍵是了解數據包是對應什么類型,然后在此基礎上參照具體的模板分析出數據包里傳輸的信息。當然,在熟練之后,一眼就能看出某個數據包是用來干嘛的。

 

寫了那么多,其實也就是涉及了POS規范里的一點點內容罷了,像POS終端管理、終端交易、終端界面和終端交易處理流程都沒有提到,這些都是學習POS規范要求掌握的知識點。鑒於篇幅有限,就留在下篇整理吧。

今天培訓的時候,還講到了安全加密方面的知識,有時間的話,我也整理一些心得體會出來。So,就到此為止吧~

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM