python - ModbusTCP 流量在 WireShark 中显示为 TCP 数据包
问题描述
我正在使用 pyModbusTCP 在本地主机上发送 ModbusTCP 数据包。我的代码似乎工作正常,但在 Wireshark 中我的数据包显示为 TCP 而不是 ModbusTCP。当我转到“分析 > 启用协议”时,ModbusTCP 已启用。另一个奇怪的事情是,上周我按照这个教程YouTube 视频,我能够让 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 输出
解决方案
我想到了。Wireshark 没有正确标记数据包,因为我将流量从端口 502 转移到端口 12345,因为我需要超级用户权限才能在端口 502 上通话。我在代码中将其切换回端口 502,现在 Wireshark 将它们标记为 ModbusTCP 数据包。
推荐阅读
- react-native - 在 flatlist 的一个容器中添加多个数据
- android - Android LiveData Observer 只接收最后发出的值
- reactjs - 样式组件中的嵌套道具会导致 Typescript 错误
- javascript - Match list of search terms in response
- listview - 如何在 VB 6.0 中将值从列表框传输到组合框
- reactjs - componentDidMount() 导致堆栈跟踪和未捕获的 DOMExemption 错误
- javascript - 为什么没有正确生成日期?
- android - 如何在 Android 中为 pdf/images/layout 添加 Page curl 效果?
- amazon-cognito - 用于身份验证的 OpenId 问题
- php - 如何从 php 中的 json_encode 中删除双引号?