Трафик 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
1 ответ
Я понял. Wireshark неправильно маркирует пакеты, потому что я переместил свой трафик с порта 502 на порт 12345, потому что мне потребовались права суперпользователя для разговора по порту 502. Я переключил его обратно на порт 502 в моем коде, и теперь Wireshark помечает их как пакеты ModbusTCP.