python-3.x - 通过 scapy 配置 STP 协议
问题描述
我需要使用 scapy 生成和 STP 流量,当我通过可视化它时,wireshark
我得到类似于下面显示的标题的输出:
当我运行此代码时:
from scapy.all import STP
import scapy
from scapy.all import *
data='STP'
sendp(Ether(dst="01:80:c2:00:00:00")/LLC(dsap=0xaa, ssap=0xaa)/STP(bpdutype=0x00, bpduflags=0x01, portid=0x8002)/data, iface="eth1", count=200)
这是我的wireshark输出
解决方案
你忘了层 SNAP
这是帮助我调试的 2 个示例:
- 示例 1:您的代码。
- 示例 2:添加了 SNAP 层
对于这两个例子:
from scapy.layers.inet import SNAP
from scapy.layers.l2 import Ether, LLC, STP
data = "STP"
示例编号 1:
packet = (
Ether(dst="01:80:c2:00:00:00")
/ LLC(dsap=0xAA, ssap=0xAA)
/ STP(bpdutype=0x00, bpduflags=0x01, portid=0x8002)
/ data
)
packet.show2()
输出:
###[ Ethernet ]###
dst = 01:80:c2:00:00:00
src = 4c:d9:8f:77:3b:33
type = 0x8870
###[ LLC ]###
dsap = 0xaa
ssap = 0xaa
ctrl = 3
###[ SNAP ]###
OUI = 0x0
code = 0x1
###[ 802.3 ]###
dst = 00:00:00:00:00:00
src = 00:00:00:00:00:00
len = 0
###[ Padding ]###
load = '\x00\x00\x00\x00\x00\x00\x80\x02\x01\x00\x14\x00\x02\x00\x0f\x00STP'
你看到 scapy 如何在 LLC 层之后解码一个名为 SNAP 的层吗?这使得解码之后都错了
所以让我们添加它,所以所有的解码都是真的:
示例 2:添加 SNAP 层
packet = (
Ether(dst="01:80:c2:00:00:00")
/ LLC(dsap=0xAA, ssap=0xAA)
/ SNAP()
/ STP(bpdutype=0x00, bpduflags=0x01, portid=0x8002)
/ data
)
packet.show2()
输出:
###[ Ethernet ]###
dst = 01:80:c2:00:00:00
src = 4c:d9:8f:77:3b:33
type = 0x8870
###[ LLC ]###
dsap = 0xaa
ssap = 0xaa
ctrl = 3
###[ SNAP ]###
OUI = 0x0
code = 0x10b
###[ Spanning Tree Protocol ]###
proto = 0
version = 0
bpdutype = 0
bpduflags = 1
rootid = 0
rootmac = 00:00:00:00:00:00
pathcost = 0
bridgeid = 0
bridgemac = 00:00:00:00:00:00
portid = 32770
age = 1.0
maxage = 20.0
hellotime = 2.0
fwddelay = 15.0
###[ Raw ]###
load = 'STP'
它看起来好多了。我没有尝试使用wireshark,但至少scapy似乎对此很满意。
推荐阅读
- phpstorm - 在 PhpStorm 中显示文件菜单
- java - 为什么我必须在用户登录后使用 firebase 对其进行身份验证?
- c# - 如何在 IActionFilter 中获取类型化的响应对象。ASP 核心 2.2
- python - 当我尝试将 JSON 转换为 Pandas Dataframe 时出现错误“AttributeError: 'list' object has no attribute 'values'”
- asp.net - Webhook 调用失败。错误:DEADLINE_EXCEEDED | 请求超时
- twitter-bootstrap-3 - 如何在这个垂直轮播的第一个和最后一个项目上隐藏引导 3 个轮播箭头?
- python - 从 MySQL 数据库获取后如何将 python 字符串转换为其原始类型
- laravel - 无法登录到 Gitlab CI 中的 MSSQL docker 以开始测试迁移
- javascript - 从对象有键返回对象的条件为真
- php - 使用 php 获取图像时的结果排序