STP 流量生成 [Malformed Packet] with scapy & wireshark
STP traffic generation [Malformed Packet] with scapy & wireshark
我正在尝试生成一个 STP 数据包并使用 wireshark 捕获它,这是我的代码:
from scapy.all import STP
import scapy
from scapy.all import *
sendp(Dot3(dst="01:00:0c:cc:cc:cd", src="08:17:35:51:29:2e")/LLC(dsap=0xaa, ssap=0xaa)/SNAP(OUI=0x0c, code=0x010b)/STP(), iface="eth1", count=200)
我已经能够生成所需的输出,但我在 wireshark
中遇到错误
我应该在 sendp
命令中添加一些字段吗?
我运行几件事,看看为什么。
是不是padding的问题。我尝试将数据包填充到 60B 作为网络中的强制性要求。 (你的 wiresard 说捕获了 57B,所以它在下面)。这对我来说从来都不是问题,但我不得不检查一下。
我打开了一个来自 wireshark 的示例捕获。
https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=view&target=stp.pcap
我使用 wireshar 打开第一个数据包(很高兴),然后使用 scapy 打开它:
从 scapy.utils 导入 rdpcap
packets = rdpcap("/home/fgagnaire/Downloads/stp.pcap")
数据包[0].show()
输出:
###[ 802.3 ]###
dst = 01:80:c2:00:00:00
src = 00:1c:0e:87:85:04
len = 38
###[ LLC ]###
dsap = 0x42
ssap = 0x42
ctrl = 3
###[ Spanning Tree Protocol ]###
proto = 0
version = 0
bpdutype = 0
bpduflags = 0
rootid = 32868
rootmac = 00:1c:0e:87:78:00
pathcost = 4
bridgeid = 32868
bridgemac = 00:1c:0e:87:85:00
portid = 32772
age = 1.0
maxage = 20.0
hellotime = 2.0
fwddelay = 15.0
###[ Padding ]###
load = '\x00\x00\x00\x00\x00\x00\x00\x00'
现在看起来它们是 building
没有图层的 SNAP。
尝试在没有 SNAP 层的情况下构建:
from scapy.layers.inet import SNAP
from scapy.layers.l2 import LLC, STP, Dot3
from scapy.packet import Padding
from scapy.utils import wrpcap
packets = []
packet = Dot3(dst="01:00:0c:cc:cc:cd", src="08:17:35:51:29:2e") / LLC() / STP()
wrpcap("/tmp/test_file.pcap", packets)
这让 wireshark 很高兴。这也有助于我理解您的问题不是关于 STP 而是关于 PVSTP+。
如果您的问题是关于 PVSTP+,那么我认为 scapy 不支持它开箱即用。你必须自己构建层。
我正在尝试生成一个 STP 数据包并使用 wireshark 捕获它,这是我的代码:
from scapy.all import STP
import scapy
from scapy.all import *
sendp(Dot3(dst="01:00:0c:cc:cc:cd", src="08:17:35:51:29:2e")/LLC(dsap=0xaa, ssap=0xaa)/SNAP(OUI=0x0c, code=0x010b)/STP(), iface="eth1", count=200)
我已经能够生成所需的输出,但我在 wireshark
中遇到错误
sendp
命令中添加一些字段吗?
我运行几件事,看看为什么。
是不是padding的问题。我尝试将数据包填充到 60B 作为网络中的强制性要求。 (你的 wiresard 说捕获了 57B,所以它在下面)。这对我来说从来都不是问题,但我不得不检查一下。
我打开了一个来自 wireshark 的示例捕获。 https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=view&target=stp.pcap 我使用 wireshar 打开第一个数据包(很高兴),然后使用 scapy 打开它:
从 scapy.utils 导入 rdpcap
packets = rdpcap("/home/fgagnaire/Downloads/stp.pcap") 数据包[0].show()
输出:
###[ 802.3 ]###
dst = 01:80:c2:00:00:00
src = 00:1c:0e:87:85:04
len = 38
###[ LLC ]###
dsap = 0x42
ssap = 0x42
ctrl = 3
###[ Spanning Tree Protocol ]###
proto = 0
version = 0
bpdutype = 0
bpduflags = 0
rootid = 32868
rootmac = 00:1c:0e:87:78:00
pathcost = 4
bridgeid = 32868
bridgemac = 00:1c:0e:87:85:00
portid = 32772
age = 1.0
maxage = 20.0
hellotime = 2.0
fwddelay = 15.0
###[ Padding ]###
load = '\x00\x00\x00\x00\x00\x00\x00\x00'
现在看起来它们是 building
没有图层的 SNAP。
尝试在没有 SNAP 层的情况下构建:
from scapy.layers.inet import SNAP
from scapy.layers.l2 import LLC, STP, Dot3
from scapy.packet import Padding
from scapy.utils import wrpcap
packets = []
packet = Dot3(dst="01:00:0c:cc:cc:cd", src="08:17:35:51:29:2e") / LLC() / STP()
wrpcap("/tmp/test_file.pcap", packets)
这让 wireshark 很高兴。这也有助于我理解您的问题不是关于 STP 而是关于 PVSTP+。
如果您的问题是关于 PVSTP+,那么我认为 scapy 不支持它开箱即用。你必须自己构建层。