Networking ISO8583报文解码

Networking ISO8583报文解码,networking,tcp,ip,iso8583,Networking,Tcp,Ip,Iso8583,我只是ISO8583消息格式的初学者 所以,我已经在WIKI和Code项目中搜索了相关信息 据我所知,这是 这个信息我们可以分为三个部分 1.MTI (Message Type Indicator) 1.1.Version 1.2.Message Class 1.3.Message Function 1.4.Message Origin 2.Bitmap Indicate which data elements are present. 3.Da

我只是ISO8583消息格式的初学者

所以,我已经在WIKI和Code项目中搜索了相关信息

据我所知,这是

这个信息我们可以分为三个部分

1.MTI (Message Type Indicator)
     1.1.Version
     1.2.Message Class
     1.3.Message Function
     1.4.Message Origin
2.Bitmap
     Indicate which data elements are present.
3.DataElement
整个ISO消息的本质,包含有关事务的信息,例如

  • 交易类型
  • 金额
  • 客户ID
等等

因此,在阅读了这两个web参考之后,我想将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机上已经有ISO8583消息日志了。 这个实际的输出消息日志不像上面的示例那样清晰。 所以我不能像上面的例子那样将这个消息划分为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)
下面是我的数据示例

00 14 5e 47 2e d8 00 1a d4 0c 32 0f 08 00 45 00 
00 7b b2 ec 40 00 80 06 e5 29 ac 11 05 37 ac 11 
05 0d 1a 78 1a 78 bf 1c 66 c8 8f 11 b5 a9 50 18 
3f b6 c8 f6 00 00 00 51 31 31 1c 30 30 32 1c 1c 
1c 31 3b 1c 3b 35 32 36 34 30 32 31 37 30 33 32 
36 34 30 32 34 3d 31 34 30 35 32 32 31 31 30 30

作为一个示例,您在那里看到的只是通过网络传输的事务信息的表示。这实际上是所有数据传输在传输层的方式,而不管应用程序如何

根据您使用的终端管理应用程序/交换机(Postilion和Base24是很好的示例),应该在日志中的某个地方将十六进制负载转换为ASCII文本


对于你的样品,你应该先做,然后再做。使用这些步骤,我可以告诉您该样本中的机构标识符编号(或银行标识符编号)是526402。您发布的代码段包含Track 2数据,其中也包含PAN。我之所以不在这里发表这篇文章,是因为明显的原因(我甚至不打算对其应用屏蔽)

将十六进制转储反转到消息可能非常容易出错。 ISO8583协议的实现因其所承载的数据和各个字段的格式而异。字段数据可以是BCD、ASCII等,也可以是固定数据或变量数据,在数据前面有一个长度指示符,以便进行解析


如果我仔细查看您的消息,我会看到其中有很多0x1C。这些通常是字段分隔符,这使我相信该消息是atm规范中的原始atm消息,而不是传统的ISO8583消息。

@user3223324我同意@kolossus的许多观点,包括某人的个人信息出现在您的跟踪中。我只能希望这是一张真正的测试卡

这看起来像是来自Wireshark的数据包嗅探器跟踪,而不是终端的跟踪。大多数ATM制造商在终端本身上有一个跟踪机制,可以激活该机制以捕获终端到主机的消息,反之亦然,但在较新的机器上,需要升级权限或现场技术人员拥有的某些东西,才能在禁用屏蔽的情况下激活。主机系统都有一个跟踪功能,至少可以将其转换为文本,通常还伴有十六进制进行比较。我相信Wireshark还内置了一些基本的十六进制到文本转换工具

我看到您可能遇到的另一个问题是,您正在尝试解码您认为是ISO-8583的内容,但事实并非如此。我知道有ISO-8583自动柜员机,但它们很少,因为我相信大多数自动柜员机仍然运行IFX、NDC、911/912或其他特定于供应商的格式或它们的模拟。这些是更短的有效负载消息,它们和/或ISO-8583之间几乎没有共同之处

在ISO-8583的变体上,有许多变体共享相同的主位图、次位图和一些第三位图。规范本身允许许多位图在特定条件下具有很大的灵活性、自定义和定义,即使是标准位图,它们所包含的值也可能有独特的差异

我今天看到的大多数仍然是ISO-8583-87的变体(豪华版是许多版本的基线)或主要支持01xx、02xx、04xx和08xx消息的混合版。我不会太在意第一个职位,因为除了应用程序内部(即Postilion&Base24)之外,它几乎总是0。有些是纯文本,有些是带压缩位图的BCD,有些是带压缩数字的文本位图

您必须考虑的另一件事是数据元素bytemap,现在还有TLV


答案很长,但我们需要知道您试图解析的格式,或者至少是ATM的构造。

十六进制转储肯定是而不是ISO 8583方言消息。有带有十六进制代码0x1C的批次字段分隔符

示例开头的字节看起来像是不同数据包的几层。我并没有假装解密正确,但它可能是IP包中的移动IP包,TCP包中的IP包

您调查的最后一个最重要的部分-是NDC消息的一部分-NCR针对ATM的网络消息协议

TCP-RFC793 IP-RFC791 移动IP(?)-RFC3344 加上NDC消息中未识别的部分或已存在的标题:

__ __ __ __ 00 00 00 51 __ __ __ __ __ __ __ __
NDC事务请求消息(开始)
NDC消息的其余部分在下一个网络数据包/片段中。

谢谢kolossus,我的问题是我无法理解此流量,MTI、位图和数据在哪里fields@user3223324-您提供的样本中不存在MTI和数据元素。其中只有磁道2数据元素和一个或两个其他字段。我之所以能够识别轨道2,仅仅是因为我的经验。
__ __ __ __ __ __ __ __ 66 c8 8f 11 b5 a9 50 18 
3f b6 c8 f6 __ __ __ __ __ __ __ __ __ __ __ __

protocol: "66" #  // 102 - PNNI
code: "C8" #  // 200
crc: "8F11"
destination_ip: "B5A95018" # Home address // 181.169.80.24
source_ip: "3FB6C8F6" # Original sender // 63.182.200.246
__ __ __ __ 00 00 00 51 __ __ __ __ __ __ __ __
__ __ __ __ __ __ __ __ 31 31 1c 30 30 32 1c 1c 
1c 31 3b 1c 3b 35 32 36 34 30 32 31 37 30 33 32 
36 34 30 32 34 3d 31 34 30 35 32 32 31 31 30 30

a: "" # Protocol Header // skipped
b: "1" # Message Class
c: "1" # Message Sub-Class
FS: 0x1c
d: "002" # Logical Unit Number (LUNO) 
FS: 0x1c
FS: 0x1c
e: // empty ?
FS: 0x1c
f: "1" # Top of Receipt Transaction Flag
g: ";" # Message Co-Ordination Number // 0x3b
FS: 0x1c
h: ";526402******4024=1405221100" # Track 2 Data // masked and expired