首页 > 解决方案 > 使用 scapy 和 wireshark 生成 STP 流量 [格式错误的数据包]

问题描述

我正在尝试生成一个 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命令中添加的字段中出现错误?

标签: wiresharkscapy

解决方案


我跑了一些东西,看看为什么。

  1. 难道不是padding的问题。我尝试在网络中强制将数据包填充到 60B。(你的wireahrd说捕获57B所以它在下面)。这对我来说从来都不是问题,但我必须检查一下。

  2. 我从wireshark打开一个示例捕获。 https://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=view&target=stp.pcap 我使用 wireshar 打开了第一个数据包(它很高兴),然后使用 scapy 打开它:

    从 scapy.utils 导入 rdpcap

    数据包 = 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 层的。

  1. 尝试在没有 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 不支持开箱即用。您必须自己构建图层。


推荐阅读