微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ModbusTCP 流量在 WireShark 中显示为 TCP 数据包

如何解决ModbusTCP 流量在 WireShark 中显示为 TCP 数据包

我正在使用 pyModbusTCP 在本地主机上发送 ModbusTCP 数据包。我的代码似乎工作正常,但在 Wireshark 中,我的数据包显示为 TCP 而不是 ModbusTCP。当我转到“分析 > 启用协议”时,ModbusTCP 已启用。另一个奇怪的事情是,上周我遵循了本教程 YouTube Video 并且我能够让 Wireshark 识别 ModbusTCP 数据包。我今天又试了一次,我在 Wireshark 将 ModbusTCP 数据包标记为 TCP 时遇到了同样的问题。我不知道为什么会这样,希望得到一些建议?

服务器代码

from pyModbusTCP.server import ModbusServer,DataBank
from time import sleep
from random import uniform

# set up server on Local Host port 12345
server = ModbusServer('127.0.0.1',12345,no_block=True)
# initialize register 0 with value of 80
DataBank.set_words(0,[80])

try:
        print("Start server...")
        server.start()
        print("Server is online...")
        # change register value every 5 seconds. 
        while True:
            # Set Register @ Address 0 to random int. value
            DataBank.set_words(0,[int(uniform(0,100))])
            sleep(5)
# when hit ctrl+C in CMD line,shut down server
except:
        print("Shutdown server....")
        server.stop()
        print("Server is offline...")
        sleep(0.5)

客户代码

from pyModbusTCP.client import ModbusClient
from pyModbusTCP.server import ModbusServer,DataBank
import time

# Set up client,tell it to communicate with server on local host port 12345
c = ModbusClient()
c.host("127.0.0.1")
c.port(12345)

while True:
    if not c.is_open():
        if not c.open():
            print("Unable to connect to 127.0.0.1:12345")
    
    if c.is_open():
        # Read Register 0 and print it to cmd line
        regs = c.read_holding_registers(0,1)
        if regs:
            print("Register #0: " + str(regs))
            
    time.sleep(2)

我的 Wireshark 窗口图片Wireshark Output

解决方法

我想通了。 Wireshark 没有正确标记数据包,因为我将流量从端口 502 转移到端口 12345,因为我需要超级用户权限才能在端口 502 上进行通信。我在代码中将其切换回端口 502,现在 Wireshark 将它们标记为 ModbusTCP 数据包。>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?