如何仅使用 TCPDUMP 从 OPC UA 数据中捕获 WriteRequest

如何仅使用 TCPDUMP 从 OPC UA 数据中捕获 WriteRequest

我有一个 PLC,我通过 TCPDUMP 命令捕获数据。现在我遇到的问题是,当我读取已保存数据的十六进制值时,它会通过以下格式显示:

0x0000:0009 0f09 0021 a874 1d8d d6e7 0800 4548 0x0010:00b8 d35f 4000 4006 b7f8 ac1b 0034 0101 0x0020:0150 0016 5e72 eeee fdb5 4ed2 a424 5018 0x0030:01f5 af4a 0000 7c1a 461d 6d6a 3ad3 7dd6 0x0040:ff5b 798d a40e 8f20 3c9d 0d2f 5545 5a9c 0x0050:2a86 b416 6287 a816 001f c61d 3c9a 4d2c 0x0060: 960a 7253 6c3c fcda 8541 2494 4adb ee2a 0x0070: 240f 87ea 029a 9710 48e3 1c5b 36f6 3393 0x0080: dd4d f028 920b 9ae2 41aa eddb 416e 1abd 0x0090: 7258 3bf7 2e29 0ee9 9205 d6de ff03 961c 0x00a0: 24e7 b0d1 7a44 5bfc 47c6 8191 4132 b0e1 0x00b0:d0a8 916c 97f4 f549 0e67 42f5 0b9b 5028 0x00c0:1245 961e b9a1

首先,我想通过将十六进制转储代码相互匹配来捕获 WriteRequest,但这似乎真的很有挑战性。有谁知道用 TCPDUMP 以任何方式仅捕获 WriteRequest/WriteResponse 消息的方法吗?我似乎有点被困住了。

我目前正在用 bash 脚本编写代码,但我只需要 tcpdump 命令,或者如果有人有其他想法,请联系我!遗憾的是我不能使用 tshark 或 wireshark,因为 PLC 没有包管理器。

对于那些想知道我为什么使用这个的人来说,我需要记录当有人向我的 PLC 发送命令时的流量以及我的 PLC 是否真正响应它。然后我可以看到它来自哪个 IP 地址以及命令被激活的时间。

答案1

将数据传输到具有软件解析和解释协议的主机。

进行数据包捕获时,tcpdump -w 传输文件。Wirehark 或类似工具可能能够进行解析,以进行交互式分析或概念验证。如果不存在解析器,请自行开发。

或者,找到一些知道此协议的软件,并根据您的用例进行调整。我完全不了解此协议,但日志记录和审计是常见的要求。可能是一个寻找或编写此类应用程序的项目,但用于此目的的软件肯定比在 shell 中解析十六进制转储更容易。

相关内容