学习POS的数据包分析

5 篇文章 0 订阅

http://www.cnblogs.com/miyosan/archive/2012/07/18/2596654.html

在看了三个礼拜的基于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,就到此为止吧~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值