簡體   English   中英

ISO8583消息解碼

[英]ISO8583 message decoding

我只是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消息的本質,包含有關交易的信息,如...

  • 交易類型
  • 量,
  • 顧客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

你在那里作為樣本只是交易信息的表示,因為它是通過網絡傳輸的。 無論應用如何,這實際上都是傳輸層所有數據傳輸的方式。

根據您正在使用的終端管理應用程序/交換機(Postilion和Base24是很好的示例),應該在日志中的某處將該十六進制有效負載轉換為ASCII文本。

對於您擁有的示例,應首先將其轉換為二進制 ,然后將二進制結果轉換為ASCII 使用這些步驟,我可以告訴您該樣本中的機構標識號(或銀行標識號)是526402 您發布的代碼段包含Track 2數據,其中也包含PAN。 我不是因為顯而易見的原因而在這里發帖(我甚至不打算對它進行掩蔽)

十六進制轉儲肯定不是ISO 8583方言消息。 有很多字段分隔符,十六進制代碼0x1C。

示例開頭的字節看起來像幾層不同的數據包。 我不假裝正確解密,但它可能是TCP數據包內的IP數據包內的移動IP數據包。

調查的最后一個也是最重要的部分 - 是NDC消息的一部分 - 來自NCR的ATM網絡消息協議。

TCP - RFC 793

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

IP - RFC 791

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

移動IP(?) - RFC 3344

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

NDC交易請求消息(開始)

__ __ __ __ __ __ __ __ 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消息的其余部分在下一個網絡數據包/片段中。

@ user3223324我同意@kolossus的許多觀點,包括某些個人信息出現在你的追蹤中。 我只能希望它是一張真正的測試卡。

這看起來像是來自Wireshark的數據包嗅探器跟蹤,而不是從終端跟蹤。 大多數ATM制造商在終端本身上都有一個跟蹤機制,可以被激活以捕獲終端到主機消息,反之亦然,但在較新的機器上需要升級的權限或現場技術人員擁有的東西,以禁用屏蔽激活。 主機系統都具有跟蹤功能,至少將其轉換為文本,通常還附帶十六進制用於比較。 我相信Wireshark還內置了一些基本的HEX to Text轉換工具。

我看到你可能遇到的另一個問題是你試圖解碼你認為是ISO-8583的東西,但事實並非如此。 我知道那里有ISO-8583自動櫃員機,但它們很少,因為我相信大多數仍然運行IFX,NDC,911/912或其他供應商特定格式之一或模擬它們。 這些是有效載荷消息要短得多,它們和/或ISO-8583之間幾乎沒有共性。

在ISO-8583的變體上,有許多變體共享相同的主要,次要和一些三級位圖。 規范本身允許在許多位圖的某些標准內進行大量靈活性和定制和定義,然后即使是標准位圖也可以在它們包含的值中具有唯一的差異。

我今天看到的大多數仍然是ISO-8583-87的變體(Deluxe是許多的基線)或主要支持01xx,02xx,04xx和08xx消息的混合。 我不會在第一個位置上掛得太多而不是內部應用程序(即Postilion和Base24),它幾乎總是0.有些都是文本,一些帶有打包位圖的BCD,一些帶有數字填充的文本位圖。

您要考慮的另一件事是數據元素ByteMaps,現在也是TLV。

如此長的答案,但我們需要知道您要解析的格式或至少是ATM的品牌。

將十六進制轉儲反轉為消息可能非常容易出錯。 ISO8583協議的實現因其攜帶的數據和各個字段的格式而異。 字段數據可以是BCD,ASCII等,它可以是固定數據或可變數據,其在數據之前具有長度指示符以啟用解析。

如果我仔細查看你的消息,我會看到很多0x1C。 這些通常是字段分隔符,它使我相信消息是atms規范中的原始atm消息,而不是傳統的ISO8583消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM