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


接着上一篇來繼續。

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

這一篇把常見的功能碼全部解析一遍吧,把UserData這一塊放到最后一篇以及模擬器和抓取pacp的包。

1、0x1a 請求下載

我們基本上也可以推斷出來這個報文都會有什么內容。

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

發包

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

Byte[0]  1a 功能碼

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

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

2、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]到尾都是數據內容  

3、0x1c 下載結束

發包

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

回包

 

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

4、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

5、0x1e 上傳

發包

 

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

回包

 如之前的一樣、不做介紹了。

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

6、0x1f 上傳結束

發包

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

回包

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

7、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 就是說明確認請求成功

8、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(通過搜索屏幕進行復雜搜索)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM