現在網上有很多類似的文章、其實這一篇也借鑒了很多其他博主的文章。
寫這篇文章的重點是在於解析功能和報文、對MMS這個協議並不會做很多介紹。
好了,我們開始吧。
MMS協議的協議規范取決於IEC61850規范
從報文來看mms協議共有tpkt cotp mms 下圖為mms協議整體報文結構
之前的tpkt 和 cotp這一塊的就不展開進行介紹了,可以自行去了解一下(我們主要是講MMS這一層)
Initiate
發包
Byte[0] a8 消息的類型
Byte[1]26 mms消息的大小
Byte[2]80 LocalDetailCalling參數的類型
Byte[3]03 LocalDetailCalling參數的長度
Byte[4]-[6]04 e2 00 LocalDetailCalling本地詳細信息調用參數的值 這個字節數不固定 取決於后面數字的大小
Byte[7]81 proposedMaxServOutstandingCalling參數的類型
Byte[8]01 proposedMaxServOutstandingCalling參數的長度
Byte[9]01 proposedMaxServOutstandingCalling譯提出的最大服務端呼叫數值的值
Byte[10]82 proposedMaxServOutstandingCalled參數的類型
Byte[11]01 proposedMaxServOutstandingCalled的長度
Byte[12]01 proposedMaxServOutstandingCalled譯提出的最大服務端被呼叫數值的值
Byte[13]83 proposedDataStructureNestingLevel 參數的類型
Byte[14]01 proposedDataStructureNestingLevel 參數的長度
Byte[15]05 proposedDataStructureNestingLevel 譯預先編碼的數據結構嵌套級別的值
Byte[16]a4 初始請求詳細信息類型
Byte[17]16 初始請求詳細信息的長度 也就是以后的字節長度
Byte[18]80 proposedVersionNumber參數的類型
Byte[19]01 proposedVersionNumber 參數的長度
Byte[20]01 proposedVersionNumber 譯 提出的版本號的值
Byte[21]81 padding參數的類型
Byte[22]03 padding和proposedParmeterCBB的長度 (這里為什么是兩個參數的長度呢,因為Wireshark解析錯了 這倆個參數是在一個結構體內的)
Byte[23]05 padding 譯 填充的值
Byte[24][25] f1 00 proposedParmeterCBB 譯 提出的參數cbb
Byte[26] 82 padding或servicesSupportedCalling參數的類型
Byte[27]0c 自此往后的長度
Byte[28] 03 padding 譯 填充的值
Byte[29]-[39] servicesSupportedCalling服務支持的呼叫的值
回包
可以看到的是 基本是一收一發 所有的參數都是與發包時候對應 那么就不在一個字節一個字節的闡述了
需要注意的是mms協議Wireshark解析的並不完整、有很多字節是沒有解析到的,要注意觀察,比如某某值的長度某某值的type都是沒有解析到的。
Read
在介紹一個就夠了,這些都是互通的,能認出來一個那么就能認出來其它的。
發包
上面的幾層我就不截圖了
這樣看會直觀一些,我現在點的是InvokeID這一塊,他的值為04 d0 但是他前面還有a0 27 02 02 是在mms協議的結構體內但是Wireshark沒有解析到,這種情況會很經常發生,基本上與我上面說的一樣,type和length都沒有解析到。
A0 也即為消息的類型 27也即為消息的長度 那么02也即為Invokid的類型 下一個02也即為Invokid的長度
我現在點擊的是confirmedServiceRequest那么可以看到又有兩個數值沒有解析到 a4 與 21 直接拿之前的經驗往上套 那么a4 即為confirmedServiceRequest消息的類型 21即為confirmedServiceRequest消息的長度
Read是與confirmedServiceRequest一個結構體內所以他倆的數值是一樣。
現在我點擊的是 specificationWithResult 那么又可以看到遺留了兩個數值80 與 01,80還是為specificationWithResult類型 那么01即為mms.specificationWithResult消息的長度
按照這個找法其實這些都是一樣的 我就不繼續往下闡述了。
回包
與發包也是一發一收 沒有很大的變化 只是多了個讀取到的數值
剩下的自己對照Wireshark就可以發現 都是一致的,剩下的我也就不再說了