工业控制系统离不开上位机监控系统和下位机控制器即PLC,上位机软件相对比较容易获得,比如本文采用kingview6.53,但PLC的获得相对来说就没有那么轻松,考虑这种情况,本文借助一款模拟工业自动化环境的开源软件OpenPLC基于modbus协议实现与组态王的通讯仿真。同时基于环境进行模拟测试,对组态王的组态画面、OpenPLC Editor梯形图简单编程进行简单介绍,亲测效果不错。
(1)Kali linux虚拟机(IP:192.168.180.146)安装OpenPLC
安装过程参考https://github.com/thiagoralves/OpenPLC_v3,安装后,Kali linux虚拟机内置浏览器输入如下地址,账户/密码:openplc/openplc。
![70782253009f51080ef9f0d4f736e241.png](https://i-blog.csdnimg.cn/blog_migrate/908b8601c40adeb14fa749d74f029eea.jpeg)
(2)Kali linux虚拟机(IP:192.168.180.146)安装OpenPLC_Editor,安装过程参考https://github.com/thiagoralves/OpenPLC_Editor,安装后,在应用里面搜索OpenPLC_Editor,打开后,编写简单程序如下,下载链接:openplc_test.st。
![93d5eda69b91edf4ab7ebbd93a688175.png](https://i-blog.csdnimg.cn/blog_migrate/be7a98d0fa1766887f3b8f522b653bb7.jpeg)
![66a3e0de3f8103336f4065004e540bb9.png](https://i-blog.csdnimg.cn/blog_migrate/21395728f727eb2cccc04f1c025e9b38.jpeg)
(3)winxp sp3 虚拟机(IP:192.168.180.157)安装组态王6.53,新建test工程下载链接https://github.com/sxd0216/kingview–test,并按下图所示添加OpenPLC设备OpenPLC_test。
![c36e4f1e7d3a13d7228ea9c7ed18c83f.png](https://i-blog.csdnimg.cn/blog_migrate/089dd546cfdd37a852f66f3db9e49fec.jpeg)
![ecf51108a8c6338a1c55402512086309.png](https://i-blog.csdnimg.cn/blog_migrate/7ac919549999bdc9e2f56071d1c6a5da.jpeg)
![7253229c905e1d5df4208298b293d24c.png](https://i-blog.csdnimg.cn/blog_migrate/d34a4d317ae72654a5fc243f4df4e9df.jpeg)
![1d1a84d0f6abf1a38c1f43faf2bf4107.png](https://i-blog.csdnimg.cn/blog_migrate/6b4f9c84aaa921b9619be39a01646608.jpeg)
![a830825607bc0357b000afb94a0275bf.png](https://i-blog.csdnimg.cn/blog_migrate/34de700474a796a8a693de0f293592d1.jpeg)
(4)设定变量并和OpenPLC_test连接
![247bb2c19e9228960f27cc64f3de006b.png](https://i-blog.csdnimg.cn/blog_migrate/4da9aa85b6f018b9996069a386fe8215.jpeg)
(5)组态简单画面,点击Start,电机运行,点击Stop,电机停止
![24c1118a678f92a790577c0ae698055e.png](https://i-blog.csdnimg.cn/blog_migrate/142a0e87bb407f7ee5b5e75517c89755.jpeg)
(1)Kali linux虚拟机(IP:192.168.180.146)中运行OpenPLC,导入OpenPLC_Editor编辑好的程序openplc_test.st。
![c7891b7405e27da350af829db31bdfa4.png](https://i-blog.csdnimg.cn/blog_migrate/49bc5d64a278df3378bfb292a2be63c8.jpeg)
![dca42cca7fd918eb50bb77ba64055c9c.png](https://i-blog.csdnimg.cn/blog_migrate/f4e1146843a30c7d2e297fb1e134b835.jpeg)
待程序编译好后,Go to Dashboard,然后Start PLC
![1291d10a3bfde6f03bc3a68518f0bcc0.png](https://i-blog.csdnimg.cn/blog_migrate/d80209f8419c2b631116fca9326df8d2.jpeg)
![bd8ea06f8e235f8d2b67e24151ff7521.png](https://i-blog.csdnimg.cn/blog_migrate/6f3da2ed375fa37a3e36c282bc9e1a6b.jpeg)
待PLC出现Running后,进入Monitoring
![032b5bc62e841c20befd01eeb2d2ef7c.png](https://i-blog.csdnimg.cn/blog_migrate/aa44e8733b7ba199fb942d635b99c949.jpeg)
![658997cb950e4dd7e05b0fd794a3ff35.png](https://i-blog.csdnimg.cn/blog_migrate/8fae66a8f0ac7bafb060260aa8cfb2bd.jpeg)
(2)winxp sp3 虚拟机(IP:192.168.180.157)中运行test工程
![ce4a9184e94e1dac353468291fa53d29.png](https://i-blog.csdnimg.cn/blog_migrate/bbcf5d4b7895aa6d8e9b8c7821e19e30.jpeg)
![0c2e9ff53083caed0b15bec7fa3eccbb.png](https://i-blog.csdnimg.cn/blog_migrate/faf34fa0a4fde08583dc4d7db9ee29ea.jpeg)
(3)通过信息窗口查看,已经通讯成功
![14992698492caf8616869aa9496836ae.png](https://i-blog.csdnimg.cn/blog_migrate/336c2b700335a5e4bc7247f0f1b74472.jpeg)
(4)点击Start后,指示灯亮,电机启动,进入PLC,发现Start和MV1变量值已经变为TRUE,对比图如下:
![508e8ca923a891d230b0e65d2b672c83.png](https://i-blog.csdnimg.cn/blog_migrate/57b1d78238dbb5414eec0d78378e3fed.jpeg)
![8b5ef4f06e602c23aff978d5968f78d3.png](https://i-blog.csdnimg.cn/blog_migrate/0720d3538fee66480366f7a829277741.jpeg)
(5)点击Stop后,指示灯灭,电机停止,进入PLC,发现Start和MV1变量值已经变为FALSE,Stop变量值变为TRUE,对比图如下:
![afda2d6ac544451a7ec04e969939428e.png](https://i-blog.csdnimg.cn/blog_migrate/cb0cc3d1c70b9f86e0dabfd9c494e9a2.jpeg)
![75ccfab9bf0cc0498d6e7098b06c399d.png](https://i-blog.csdnimg.cn/blog_migrate/ba42774af6e7a5cf29f344483be8493d.jpeg)
(1)winxp sp3 虚拟机(IP:192.168.180.157)中利用wireshark抓取03.仿真通讯中Start(14帧、16帧)和Stop(19帧、21帧)的数据包,下载链接https://github.com/sxd0216/attack-packets。
![e28dac41917e2a0c070705b80d09c471.png](https://i-blog.csdnimg.cn/blog_migrate/8c0990cef5f2d53c2aea35bdefce3c97.jpeg)
![0eb23b5feaf274bb41b795fd03dcb74a.png](https://i-blog.csdnimg.cn/blog_migrate/3e939b5e7fafb1764f614d9d8d73b79c.jpeg)
查看数据包,搜索modbus协议”05″功能码Write Coil,捕获到Start(14帧、16帧)和Stop(19帧、21帧)的攻击数据包,modbus协议常用功能码如下:
01 :读取线圈状态
02:读取输入状态
03:保持型寄存器读取
05:写单一线圈
06:写单一寄存器
(2)基于wireshark捕获的Write Coil,编写Python攻击包,下载链接https://github.com/sxd0216/attack-packets。
![0787fe08278dbb36fb11a7d6f46586e3.png](https://i-blog.csdnimg.cn/blog_migrate/10c00d3dc8daec5c7b90d4a4c1e58fb6.jpeg)
![f383e44a723ebc38af9013aa1514dc5d.png](https://i-blog.csdnimg.cn/blog_migrate/9e694be9c02958bf65b7709def33187f.jpeg)
(3)利用攻击包也可以达到(4)和(5)的效果
本文主要利用OpenPLC模拟modbus协议实现了OpenPLC实现了与Kingview的通讯仿真与模拟测试,大家如果感兴趣也可以基于OpenPLC模拟其他协议,进而仿真其他环境;同时本文也对kingview如何建立工程、组态画面,OpenPLC Editor编辑简单梯形图程序进行了简单介绍,希望对热爱工控的人士有所帮助。