Фильтрация пакетов OP C UA с использованием Scapy в Python - PullRequest
0 голосов
/ 08 января 2020

Как я могу фильтровать входящие пакеты по протоколу пакета? Я использую Scapy в Python и хочу специально фильтровать пакеты OP C -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")

1 Ответ

0 голосов
/ 25 марта 2020

К сожалению, scapy в настоящее время не поддерживает OpcUa.

Однако вы можете достичь своей цели, используя стандартный фильтр op c ua для фильтрации, который равен 4840.

filter = "port 4840"

Это Также возможно проверить байты, содержащиеся в пакете, для более детальной фильтрации пакетов op c ua.

Например:

filter = "(port 4840) " \
         "and (tcp[20:4] = 0x4d534746) " \
         "and ((tcp[46:2] = 0x3a03) or (tcp[46:2] = 0x7702)) "

, который отфильтрует все пакеты Op c Ua whith message_type = "MSG" и chunk_type = "F", которые являются либо ReadRequests, либо PublishRequests.

В этом случае tcp[20:4] означает «В пакете Tcp начинаются с байта 20 и принимают следующие 4 байта» и 0x4d534746 является шестнадцатеричным представлением MSGF.

Более подробную информацию о синтаксисе фильтра пакетов Беркли можно найти здесь .

...