scapy - 在 Python 中使用 Scapy 过滤 OPC UA 数据包
问题描述
如何通过数据包的协议过滤传入的数据包?我在 Python 中使用 Scapy,我想专门过滤 OPC-UA 数据包。我只找到了有关 TCP 数据包的示例。
from scapy.all import *
from scapy.layers.inet import IP,TCP,ICMP, Ether, UDP
interface = "eth0" #Name of interface to be sniffed
sniff(iface=interface, prn=check_pkt, store=0, filter="opc")
解决方案
遗憾的是,scapy 目前不支持 OpcUa。
但是,您可以通过使用标准的 opc ua 端口进行过滤来实现您的目标,即 4840。
filter = "port 4840"
还可以检查包中包含的字节,以便对 opc ua 包进行更详细的过滤。
例如:
filter = "(port 4840) " \
"and (tcp[20:4] = 0x4d534746) " \
"and ((tcp[46:2] = 0x3a03) or (tcp[46:2] = 0x7702)) "
这将过滤所有带有 message_type="MSG" 和 chunk_type="F" 的 Opc Ua 包,它们是 ReadRequests 或 PublishRequests。
在这种情况下tcp[20:4]
,表示“在 Tcp 数据包中从第 20 个字节开始并取接下来的 4 个字节”,并且0x4d534746
是MSGF
.
可以在此处找到有关 berkeley 包过滤器语法的更多信息。
推荐阅读
- javascript - 如何将 Nuxt 与 Vue Cli 3 一起使用?
- javascript - 除非包装在箭头函数中,否则方法不会返回正确
- html - 脚本标签中的 HTML 中的动态 Src
- c++ - 这是什么意思:“类 DATA_C 数据容器”
- c# - 我的 JsonConvert.DeserailizeObject 参数是否正确?
- javascript - 通过PHP代码上传的图像未加载,而直接通过C面板上传正在加载
- azure - 使用 SSIS 脚本组件读取 Azure Data Lake Store 文件
- hyperledger-fabric - 从多用户休息服务器运行 Hyperldger 查询时它给出错误“已指定无效或无关的参数 access_token”
- angular - Angular 会自动取消订阅 FormControl.value 订阅吗?
- r - 一个图中 2 个向量