• 学习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,就到此为止吧~

  • 相关阅读:
    Git 最全命令使用
    git 配置(实用)
    用Redis进行实时数据排名
    最长上升子序列
    KMP算法
    计算星期几【基姆拉尔森公式】
    集合划分(贝尔数)
    合数分解(质因数分解)
    乘法逆元
    扩展欧几里得算法
  • 原文地址:https://www.cnblogs.com/miyosan/p/2596654.html
Copyright © 2020-2023  润新知