西門子S7comm協議解析 —— 利用Wireshark對報文逐字節進行解析詳細解析S7comm所含功能碼以及UserData功能(path2)

接着上一篇來繼續。html

西門子S7comm協議解析 —— 利用Wireshark對報文逐字節進行解析詳細解析S7comm所含功能碼以及UserData功能(path1)網絡

這一篇把常見的功能碼所有解析一遍吧,把UserData這一塊放到最後一篇以及模擬器和抓取pacp的包。函數

一、0x1a 請求下載

咱們基本上也能夠推斷出來這個報文都會有什麼內容。工具

要下載什麼東西,要下載東西的地址,要下載的東西的屬性。八九不離十。post

發包url

頭部都是同樣的 我就不在貼圖了,咱們看參數部分。spa

Byte[0]  1a 功能碼翻譯

Byte[1]  00 即功能狀態,包含錯誤是否發生、是否使用另外一個檢索塊/文件來請求的更多數據網絡狀態3d

Byte[2] Byte[3] 01 00沒什麼意義指針

Byte[4] 到 Byte[7] 沒什麼意義通常都爲0x00000000

Byte[8] 09爲文件名的長度

Byte[9]到 Byte[17] 爲文件名

而後咱們把Filename展開解析這一塊。

Filename部分

Byte[0] 5f 文件標識符

Byte[1] Byte[2] 30 41 塊類型

Byte[3] 到Byte[7] 30 30 30 30 31 即請求的塊編號

Byte[8] 50 即請求目標的文件系統,有三種如下表

P(Passive (copied, but not chained) module):被動文件系統

A (Active embedded module):主動文件系統

B (Active as well as passive module):既主既被文件系統種

接着參數部分繼續往下看

Byte[18] 0d 參數第二部分的長度、即爲接下來數據的長度

Byte[19] 31即加載mem以前的未知字符

Byte[20] 到 Byte[25]  即裝載長度

Byte[26] 到 Byte[31]  即 MC7 代碼長度

整個意思就是請求下載(請求的標識是 5f 、請求的塊類型是 DB 塊的編號是0001 、目標塊文件系統是P、因此文件名爲_0A00001P,用於將DB1複製到被動文件系統或從被動文件系統複製。)

對於發包咱們基本上也是能猜到他會作什麼吧。

不少時候計算機跟我們生活的小事其實挺類似的,舉個不太恰當的例子。

我們吃飯是否是就直接拿着筷子去吃就完了,可是你把步驟分解分解翻譯成機器語言。

筷子 —— 指針  米 —— 數據   吃 —— 處理數據  上廁所 —— 排除垃圾數據。

回包

頭部不用說了參數部分只回復了1a 表明確認請求了確認請求以後就會進行下載塊(功能碼爲:1b

二、0x1b 下載塊

那麼咱們再去推斷一下 這個報文裏面都會有什麼,要多多思考哈~

發包

紅框內都同樣(其餘的也都同樣)從length開始加深一下吧

Byte[0] 09 表示以後的數據長度

Byte[1] 5f  文件標識符

Byte[2] 30 41 塊類型

Byte[3] 30 30 30 30 31 塊編號

Byte[4] 50 請求目標的文件系統

回包

與發包相比較只多了個data部分介紹data部分就好了

這個就簡單易懂了吧,不用說也能猜到了吧。

Byte[0] Byte[1] 00 de data數據內容的長度

Byte[2] Byte[3] 00 fb 未知字節

Byte[4]到尾都是數據內容  

三、0x1c 下載結束

發包

與0x1a和0x1b都同樣少了裝載長度和MC7長度意思就是結束下載了這裏就不作描述了

回包

 

也很簡單參數部分只回復了個1c 就是下載結束的意思了

四、0x1d 開始上傳

發包

 

能夠看到,開始上傳的結構和請求下載的前部分結構一致,如上圖所示的內容,其實就是告訴 PLC 一個文件名,文件標識是_ (Complete Module),塊類型爲0B(SDB),塊的編號爲00000,目標塊的文件系統是A (Active embedded module),因此文件名爲_0B00000A

基本與請求下載都同樣 Fliename就是文件名長度UploadID即爲會話ID的意思

回包

 

Byte[0] 1d功能碼 Byte[1] 00 功能狀態

Byte[2] Byte[3] 01 00 即即blockcontrol中的全部未知字節

Byte[4] Byte[7] 會話ID

Byte[8] 即自此以後的數據長度

Byte[9]到尾完整上傳快的長度(以字節爲單位)、能夠拆分爲多個PDU

五、0x1e 上傳

發包

 

這個就不作介紹了 UploadID與1d 協商的ID 是對照的

回包

 如以前的同樣、不作介紹了。

Length,數據內容長度。Unknown byte(s) in blockcontrol,未知字節。Data,數據。

六、0x1f 上傳結束

發包

都同樣不描述了其中只是多了個錯誤代碼 Errorcode

回包

 只回復了個1f 是上傳結束了

七、0x28程序調用服務

發包

Byte[0] 28功能碼

Byte[1]到byte[7] 00 00 00 00 00 00 fd 未知字節

Byte[8]byte[9] 00 02 Parameter block的長度

Byte[10]byte[11] 45 50 即參數塊

Byte[12] 05 即PI程序調用服務名的數據長度

Byte[13]到尾 5f 4d 4f 44 55爲程序調用服務名(經常使用的我貼到最後吧貼這裏太長了搜附錄一)

回包

 Header頭不講,parameter只回復了 0x28 就是說明確認請求成功

八、0x29 關閉PLC

這個跟以前的都同樣、我再總體的圖示一下吧,不一個字節一個字節說了

發包

 回包

 

 好了,基本上功能這方面的介紹完了,下一篇把Userdata再說一下也就完活了。

仍是那句話一通百通,不少東西你明白一條基本上其餘的也能猜個八九不離十。

善於思考。

 

 

附錄一:程序調用服務名

UNKNOWN    PI-Service目前不詳

_INSE    PI-Service _INSE(激活PLC模塊)

_DELE    PI-Service _DELE(從PLC的被動文件系統中刪除模塊)

P_PROGRAM    PI-Service P_PROGRAM(PLC啓動/中止)

_MODU    PI-Service _MODU(PLC Copy Ram to Rom)

_GARB    PI-Service _GARB(壓縮PLC內存)

_NLOGIN    PI-Service _NLOGIN(登陸)

_N_LOGOUT    PI-Service _N_LOGOUT(退出)

_N_CANCEL    PI-Service _N_CANCEL(取消NC報警)

_N_DASAVE    PI-Service _N_DASAVE(用於將數據從SRAM複製到FLASH的PI-Service)

_N_DIGIOF P   I-Service _N_DIGIOF(關閉數字化)

_N_DIGION    PI-Service _N_DIGION(打開數字化)

_NDZERO    PI-Service _NDZERO(設置全部D nos。對於函數無效\「惟一D號。\」)

_N_ENDEXT    PI-Service _N_ENDEXT()

_N_F_OPER    PI-Service _N_F_OPER(以只讀方式打開文件)

_N_OST_OF    PI-Service _N_OST_OF(Overstore OFF)

_N_OST_ON    PI-Service _N_OST_ON(Overstore ON)

_NSCALE    PI-Service _NSCALE(測量單位設置(公制< - > INCH))

_N_SETUFR    PI-Service _N_SETUFR(激活用戶幀)

_N_STRTLK    PI-Service _N_STRTLK(設置全局啓動禁用)

_N_STRTUL    PI-Service _N_STRTUL(重置全局啓動禁用)

_N_TMRASS    PI-Service _N_TMRASS(重置活動狀態)

_N_F_DELE    PI-Service _N_F_DELE(刪除文件)

_N_EXTERN    PI-Service _N_EXTERN(選擇外部程序執行)

_N_EXTMOD    PI-Service _N_EXTMOD(選擇外部程序執行)

_N_F_DELR    PI-Service _N_F_DELR(即便沒有訪問權限也刪除文件)

_N_F_XFER    PI-Service _N_F_XFER(選擇要上傳的文件)

_NLOCKE    PI-Service _NLOCKE(鎖定活動文件以進行編輯)

_N_SELECT   PI-Service _N_SELECT(選擇要執行的程序)

_N_SRTEXT    PI-Service _N_SRTEXT(文件正在/ _N_EXT_DIR中標記)

_N_F_CLOS    PI-Service _N_F_CLOS(關閉文件)

_N_F_OPEN   PI-Service _N_F_OPEN(打開文件)

_N_F_SEEK   PI-Service _N_F_SEEK(定位文件搜索指針)

_N_ASUP    PI-Service _N_ASUP (分配中斷)

_N_CHEKDM    PI-Service _N_CHEKDM(對D號碼啓動惟一性檢查)

_N_CHKDNO    PI-Service _N_CHKDNO(檢查工具是否具備惟一的D編號)

_N_CONFIG    PI-Service _N_CONFIG(從新配置機器數據)

_N_CRCEDN    PI-Service _N_CRCEDN(經過指定邊數來建立切削刃)

_N_DELECE    PI-Service _N_DELECE(刪除最前沿)

_N_CREACE    PI-Service _N_CREACE(創造最前沿)

_N_CREATO   PI-Service _N_CREATO(建立工具)

_N_DELETO   PI-Service _N_DELETO(刪除工具)

_N_CRTOCE   PI-Service _N_CRTOCE(生成具備指定邊數的工具)

_N_DELVAR    PI-Service _N_DELVAR(刪除數據塊)

_N_F_COPY   PI-Service _N_F_COPY(複製NCK中的文件)

_N_F_DMDA    PI-Service _N_F_DMDA(刪除MDA內存)

_N_F_PROT    PI-Service _N_F_PROT(爲文件指定保護級別)

_N_F_RENA    PI-Service _N_F_RENA(重命名文件)

_N_FINDBL    PI-Service _N_FINDBL(激活搜索)

_N_IBN_SS    PI-Service _N_IBN_SS(設置設置開關)

_N_MMCSEM    PI-Service _N_MMCSEM(MMC-Semaphore)

_N_NCKMOD    PI-Service _N_NCKMOD(正在設置NCK工做的模式)

_N_NEWPWD    PI-Service _N_NEWPWD(新密碼)

_N_SEL_BL    PI-Service _N_SEL_BL(選擇新塊)

_N_SETTST    PI-Service _N_SETTST(激活替換工具組的工具)

_N_TMAWCO    PI-Service _N_TMAWCO(在一個雜誌中設置有效磨損組)

_N_TMCRTC   PI-Service _N_TMCRTC(建立具備指定邊數的工具)

_N_TMCRTO    PI-Service _N_TMCRTO(在工具管理中建立工具)

_N_TMFDPL    PI-Service _N_TMFDPL(搜索空白處加載)

_N_TMFPBP    PI-Service _N_TMFPBP(搜索空位)

_N_TMGETT    PI-Service _N_TMGETT(使用Duplono肯定特定工具ID的T編號)

_N_TMMVTL   PI-Service _N_TMMVTL(加載或卸載工具)

_N_TMPCIT   PI-Service _N_TMPCIT(設置計件器的增量值)

_N_TMPOSM    PI-Service _N_TMPOSM(定位雜誌或工具)

_N_TRESMO    PI-Service _N_TRESMO(重置監控值)

_N_TSEARC   PI-Service _N_TSEARC(經過搜索屏幕進行復雜搜索)

相關文章
相關標籤/搜索