当前位置: 首页 > 知识库问答 >
问题:

ISO8583报文解码

东方化
2023-03-14

我只是ISO 8583消息格式的初学者。

所以,我已经在WIKI和Code Project搜索了有关信息

据我所知,这是。。

这条消息我们可以分为 3 个部分......

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消息的本质,包含有关交易的信息,例如…

    < li >交易类型, < li >金额, < li >客户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机上已经有ISO 8583消息日志。这个实际的输出消息日志不像上面的示例那样清晰。所以我不能像上面的例子那样把这个消息分成MTI、Bitmap和Data元素。

以下是我的数据示例

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

共有3个答案

路扬
2023-03-14

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

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

我看到你可能遇到的另一个问题是,你试图解码你认为是ISO-8583的东西,但它不是。我知道有ISO-8583自动柜员机,但它们很少,因为我相信大多数仍然运行IFX,NDC,911/912或其他供应商特定的格式或它们的模拟。这些是短得多的有效载荷消息,它们和/或ISO-8583之间几乎没有共性。

在ISO-8583的变体上,有许多变体共享相同的一级、二级和一些三级位图。规范本身考虑到了许多位图在一定标准内的灵活性、定制和定义,即使是标准的位图在包含的值上也可能有独特的差异。

我今天看到的大多数仍然是ISO-8583-87的变体(Deluxe是许多的基线)或主要支持01xx、02xx、04xx和08xx消息的混合。除了在应用程序内部(即Postilion)之外,我不会太纠结于第一个位置

您还需要考虑数据元素ByteMaps和现在的TLV。

这么长的回答,但我们需要知道你试图解析的格式,或者至少是ATM的构造。

宰父远
2023-03-14

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

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

您调查的最后一个也是最重要的部分——是NDC消息的一部分——NCR用于ATM的网络消息协议。

00 14 5e 47 2e d8 00 1a d4 0c 32 0f 08 00 45 00 
00 7b b2 ec __ __ __ __ __ __ __ __ __ __ __ __

source_port: "0014" #   // 20
destination_port: "5E47" #   // 24135
sequence: "2ED8001A" #   // 785907738
acknowledgment: "D40C320F" #   // 3557569039
offset: "00" #  [xxxx____]
bits: "00" # Control Bits
window: "4500" #   // 17664
crc: "007B"
urgency: "B2EC" #   // 45804
__ __ __ __ __ __ 40 00 80 06 e5 29 ac 11 05 37 ac 11 
05 0d 1a 78 1a 78 bf 1c __ __ __ __ __ __ __ __ __ __

b1: 
 version: "4"
 IHL: "0" # Internet Header Length (in DWORDs)
type:  # Type of Service
 precedence: "00"
 # 000_____ - Routine
 delay: "00"
 # ___0____ - Normal Delay
 throughput: "00"
 # ____0___ - Normal Throughput
 relibility: "00"
 # _____0__ - Normal Relibility
size: "8006" #   // 32774
identifier: "E529"
fragment: 
 flags: "AC11"
 # _0______________ - May Fragment
 # __1_____________ - More Fragments
 offset: "0C11" #  [___xxxxxxxxxxxxx]  // 3089
ttl: "05" #   // 5
protocol: "37" #   // 55 - MOBILE
crc: "AC11"
source_ip: "050D1A78" #   // 5.13.26.120
destination_ip: "1A78BF1C" #   // 26.120.191.28
__ __ __ __ __ __ __ __ 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

加上来自NDC消息的未识别部分或已报头:

__ __ __ __ 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

NDC消息的其余部分在下一个网络数据包/片段中。

冷吉星
2023-03-14

您所拥有的示例只是通过线路传输的交易信息的表示。这实际上是所有数据传输在传输层的样子,无论应用程序如何。

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

对于您拥有的示例,您应该首先将其转换为二进制,然后将二进制结果转换为ASCII。通过这些步骤,我可以告诉您该样本中的机构识别号(或银行识别号)是526402。您发布的片段包含轨道2数据,其中也包含声相。出于显而易见的原因,我不会在这里张贴它(我甚至不会对它应用遮罩)

 类似资料:
  • HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ① 是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。不过,当前的大多数浏览器只支持GET和POST,Spring 3.0提供了一个HiddenHttpMethodFilter,允许你通过“_method”的表单参数指定这些特殊的HTTP

  • 如果这是一个重复的问题,我真的很抱歉,但我在其他线程中尝试了许多答案,但没有一个对我有效。 我试图通过使用TLSv1.2协议的SSLSocket向远程服务器发送ISO8583消息,我用密钥库配置了证书,并试图发送一个ISO8583消息示例:08002220010000800000900000011312115000000180105000003 0800:MTI 222001000800000:二

  • 本文向大家介绍C#如何解析http报文,包括了C#如何解析http报文的使用技巧和注意事项,需要的朋友参考一下 下面通过一段内容有文字说明有代码分析,并附有展示图供大家学习。 要解析HTTP报文,需要实现以下操作: 读取HTTP报头提供的各种属性 分析属性值,从中获取内容编码和字符集编码 将报头数据和内容进行分离 判断内容是否文本还是二进制,如果是二进制的则不进行处理 如果内容是文本,按报头中提供

  • 你需要知道的第一件事是 IPv6 报文长啥样。在我们之前看到的分层模型中,每一层都添加该层自身相关的信息,而这些被添加的信息只能由另一个 IP 设备的对等层处理。不同设备的对等层之间的“对话”必须按照一个协议。 因特网的分层包括: 应用层:这里驻有程序员利用网络协议栈提供的网络服务开发的软件。比如网页浏览器,它向网页服务器发送一个连接请求。又比如网页服务器,它运行在因特网中的某个服务器上等待来自客

  • 服务端 客户端请求 请求报错如下 TypeError: The view function for 'login' did not return a valid response. The function either returned None or ended without a return statement.

  • [mp2@0x5556AEA340]报头丢失错误向解码器提交数据包上述错误得到,我无法找到原因。我正在使用FFMPEG decode_audio对mp3音频文件进行解码。链接为以下内容的cpp pgm:https://www.ffmpeg.org/doxygen/4.1/decode_audio_8c-example.html我想把文件解码成。wav文件。如果有人能回答这个问题,这将有助于每个人谁

  • 请教一下大佬们 为什么 迷糊查询的时候 会报错,key没有重复的嗄?? bug 修改

  • 本文向大家介绍json解析时遇到英文双引号报错的解决方法,包括了json解析时遇到英文双引号报错的解决方法的使用技巧和注意事项,需要的朋友参考一下 有时解析json时,会碰到里面带有英文的双引号,导致解析错误,可以将json进行转义,一下: 以上这篇json解析时遇到英文双引号报错的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。