了解 ISO 8583 消息传递日志
Posted
技术标签:
【中文标题】了解 ISO 8583 消息传递日志【英文标题】:Understanding ISO 8583 messaging log 【发布时间】:2011-12-20 22:03:45 【问题描述】:我在WIKI 和Code Project 上了解到ISO 8583 消息;我了解 ISO 8583 消息基本上可以分为 3 个部分:
-
MTI(消息类型指示器)
1.1。版本
1.2。消息类
1.3。消息功能
1.4。消息来源
-
位图
指出存在哪些数据元素。
-
数据元素
整个ISO消息的本质,包含有关事务的信息,例如:
交易类型,
金额,
客户ID等
所以,在阅读了这两个网络参考之后,我想将我的 ISO 消息传递日志划分为 MTI、位图和数据元素。
例如:
(0800 2020000000800000 000000 000001 3239313130303031)
MTI: 0800 (1987 version, Network Management Message, Request, Acquirer)
Bitmap: 20 20 00 00 00 80 00 00 (eg. 20 = 0010 0000 ,so position 3 is on)
DataElement:(by seeing Bitmap , we can defined data element as follow)
field 03:000000 (Processing Code)
field 11:000001 (Systems trace audit number)
field 41:3239313130303031 (Card acceptor terminal idenfication)
但我面临的挑战是,我的 ATM 机上已经有 ISO 8583 消息传递日志。
这个实际输出的消息日志不像上面sn-p中的那样很清楚。
所以我不能像上例那样将此消息划分为 MTI、位图和数据元素。
00000:00 5B 30 31 31 30 30 30 30 30 30 30 30 38 32 30 80 38 00 00 [.[01100000000820.8..]
00020:00 81 00 00 04 00 00 00 00 00 00 00 33 36 32 39 31 30 31 30 [............36291010]
00040:32 39 35 37 31 30 33 31 31 30 30 30 30 30 30 35 30 33 31 53 [2957103110000005031S]
00060:55 32 30 31 31 31 30 33 31 31 30 32 39 35 37 32 30 31 31 31 [U2011103110295720111]
00080:30 33 31 31 30 32 39 35 37 33 30 30 31 [0311029573001 ]
我以前没有 ISO 8583 消息方面的经验,欢迎提出建议。
【问题讨论】:
我想你会在专业论坛上得到更多帮助,这似乎是一个非常本地化的问题 谢谢@CharlesB,请指导我哪个论坛合适。 我不知道,因为我不在该领域,但在专业论坛上进行广泛搜索可能会有所帮助 顺便说一句,我在堆栈交换平台下为这类问题提出了一个专门的站点,相信我他们很多。 area51.stackexchange.com/proposals/36383/… 【参考方案1】:知道了, 此消息分为如下:
前 2 个字节是消息长度 00 5B = 91 后跟 14 字节的标头 = 01100000000820
BMP 以某种方式跟随如下:
主要 BMP = 80 38 00 00 00 81 00 00 = 字段 1, 11,12, 13, 41, 48 存在 字段 1 表示二级 BMP 存在 辅助 BMP = 04 00 00 00 00 00 00 00 = 字段 70 存在我不确定 MTI 在哪里,它会是标题预告片中的 0820 吗?因为它是 ASCII 格式,通常它的数值为 08 20,但这可能是规范的一部分。 0820 表示网络管理建议
无论如何,解码后的 BMP 中的字段如下:
DE 11 = 362910系统跟踪审核编号 DE 12 = 102957本地交易时间 hh(24)mmss DE 13 = 1031本地交易日期 MMDD DE 41 = 10000005终端 ID DE 48 = (031) SU20111031102957201110311029573 请注意该字段中剩余数据之前的 3 位长度字段。这是一个通用(未来/私人使用)字段 DE 70 = 001 网络管理信息代码从 DE 70 值 001 开始,这是一条登录消息,它必须是 0800 MTI。
要获得有关 MTI 位置和 DE 48 含义的更多信息,您应该阅读此设备的手册(技术规格)以获取更多信息。
【讨论】:
顺便问一下,您使用任何 ISO 8583 分析仪软件吗?如果你这样做了,也请告诉我这个工具。 不客气@MyatThu。信不信由你,我使用的是 "My Own Brain" v 1.0,我在 ISO 工作了将近 13 年,阅读转储消息就像阅读英语一样简单。但是,我以前见过一些能够解码 ISO 消息的免费工具。尝试通过技术规格,使用记事本,这将是一项容易的任务,比现成的 S/W 更容易 请不要误会我的意思,@A.Rashad。我相信您对 ISO 8583 有很好的经验,但为什么我问您有关分析仪软件的问题,我只是想用这些工具进行测试。我确信您不需要任何工具来翻译消息,因为您自己的经验可以让您理解。请不要误会我的意思。 别担心,我完全明白你在说什么,这就是为什么我希望我们可以有一些网站来讨论这些问题。我们在 90 年代经历了很长时间,我们不得不用铅笔和纸来解码 ISO 消息,其他消息格式也是如此,例如 NDC 和 D912。我相信我们需要为此建立一个社区,以便将工具和经验传递给新一代。干得好,继续努力 非常感谢您的帮助@A.Rashad。现在,由于您的回答,我了解了 ISO 8583 的概述。但是我还有一个问题要问,我也希望你不介意给我答复。通过查看您对 ISO 8583 的分析方式,我认为您在阅读这些消息时不会使用以下数字。 “0000:在第一行,00020:在第二行,00040:在我的日志记录的第三行。”在阅读 ISO 消息时这些数字不是必不可少的吗?如果是,为什么?【参考方案2】:在发送 ISO 8583 消息时,我们将其转换为 BCD/HEX 格式,使用 Wireshark 工具来
跟踪 IP 和端口之间的通信。
【讨论】:
【参考方案3】:一个不错的在线位图分析工具是https://neapay.com/online-tools/bitmap-fields-decoder.html。
有时会帮助https://codebeautify.org/hex-string-converter 工具。
为了更好地理解 ISO 8583 消息格式,手动分析每个字段很有用。但是,每个字段可以具有不同格式(BCD、EBCDIC、ASCII ...)的长度和值子字段。并且某些字段可能具有内部字段,例如 BMP 48 或 60 经常用作嵌套字段树的容器。这些内部字段可能有标签、长度和值。这些字段的嵌套字段可能再次具有不同的格式:)。例如,https://github.com/credibledoc/credible-doc/blob/master/iso-8583-packer/doc/ebcdic/ebcdic-decimal-tag-packer.md 页面描述了一个带有 EBCDIC 标记和 BCD 值的字段。
您可以使用https://github.com/credibledoc/credible-doc/tree/master/iso-8583-packer Java 库(我是作者)来构建 ISO 8583 消息。上面的 ISO 消息示例可以使用 iso-8583-packer 库进行解包和打包。
消息数据:
<f name="Root" lenHex="005B">
<f name="Header" val="0110000000" valHex="30313130303030303030"/>
<f name="MTI" val="0820" valHex="30383230"/>
<f name="Bitmap" bitmapHex="80380000008100000400000000000000" bitSet="1, 11, 12, 13, 41, 48, 70">
<f name="SystemTraceAuditNumber" fieldNum="11" val="362910" valHex="333632393130"/>
<f name="LocalTransactionTimeHHMMSS" fieldNum="12" val="102957" valHex="313032393537"/>
<f name="LocalTransactionDateMMDD" fieldNum="13" val="1031" valHex="31303331"/>
<f name="TerminalId" fieldNum="41" val="10000005" valHex="3130303030303035"/>
<f name="PrivateData_48" fieldNum="48" val="SU20111031102957201110311029573" lenHex="303331" valHex="53553230...39353733"/>
<f name="NetworkManagementInformationCode" fieldNum="70" val="001" valHex="303031"/>
</f>
</f>
消息结构:
<f type="LEN_VAL" name="Root" lengthPacker="BinaryLengthPacker" bodyPacker="AsciiBodyPacker">
<f type="VAL" name="Header" bodyPacker="AsciiBodyPacker" len="10"/>
<f type="VAL" name="MTI" bodyPacker="AsciiBodyPacker" len="4"/>
<f type="BIT_SET" name="Bitmap" bitMapPacker="IfbBitmapPacker">
<f type="VAL" fieldNum="11" name="SystemTraceAuditNumber" bodyPacker="AsciiBodyPacker" len="6"/>
<f type="VAL" fieldNum="12" name="LocalTransactionTimeHHMMSS" bodyPacker="AsciiBodyPacker" len="6"/>
<f type="VAL" fieldNum="13" name="LocalTransactionDateMMDD" bodyPacker="AsciiBodyPacker" len="4"/>
<f type="VAL" fieldNum="41" name="TerminalId" bodyPacker="AsciiBodyPacker" len="8"/>
<f type="LEN_VAL" fieldNum="48" name="PrivateData_48" lengthPacker="AsciiLengthPacker" bodyPacker="AsciiBodyPacker"/>
<f type="VAL" fieldNum="70" name="NetworkManagementInformationCode" bodyPacker="AsciiBodyPacker" len="3"/>
</f>
</f>
上面的例子可以在GitHub上找到https://github.com/credibledoc/credible-doc/blob/master/iso-8583-packer/src/test/java/com/credibledoc/iso8583packer/examples/UnderstandingIso8583MessageLogTest.java
BMP 55 通常包含 TLV EMV 数据。 https://paymentcardtools.com/emv-tlv-parser 工具在这种情况下很有用。
【讨论】:
以上是关于了解 ISO 8583 消息传递日志的主要内容,如果未能解决你的问题,请参考以下文章