linux抓bpdu包,用Python发送手工构建的BPDU(生成树协议包)

我试图发送手工制作的BPDU-TCN包(以及其他一些属于不同协议的包)来测试我的网络实验室是否存在DoS攻击。在

我尝试过使用原始套接字和scapy,但没有成功。在

这是我使用原始套接字的代码:from socket import *

from struct import pack

class EthFrame():

def __init__(self, dst_addr='', src_addr='', llc_header ='', payload =''):

self.dst_addr = dst_addr

self.src_addr = src_addr

self.llc_header = llc_header

self.payload = payload

self.header = pack('!s', self.dst_addr + self.src_addr + self.llc_header)

self.frame = pack('s', self.header + self.payload)

def sendFrame(self, interface):

s = socket(AF_PACKET, SOCK_RAW)

s.bind((interface, 0))

s.send(self.frame)

p = EthFrame(b'\x01\x80\xC2\x00\x00\x00', b'\x00'*6, b'\x42\x42\x03', b'\x00\x00\x00\x80')

p.sendFrame('eth0')

结果是一个格式错误的数据包,只包含一个字节-“00000010”。

就我在文档中读到的,NIC应该自己添加CRC和填充位。在

{这是我的代码:

^{pr2}$

它还发送一个格式错误的包,这次包含两个字节。在

我正在准备的数据包在第5页中描述,共this pdf document。在

我在用Linux。在

----编辑:

按照奥利弗的建议,我将从链接文档中添加信息。在

TCN(拓扑更改通知)BPDU包是第2层以太网(I)包。根据硬件供应商的不同,BPDU包的结构也有细微的差别。在这个例子中,我使用的是CISCO实现。在

以太网头应始终将目标地址设置为01:80:C2:00:00:00(STP多播地址)。在

在以太网报头之后,TCN BPDU应包括:

逻辑链路控制-3字节,始终设置为[0x42,0x42,0x03]

BPDU头-4字节,对于TCN BPDU始终设置为[0x00,0x00,0x00,0x80]

后跟填充(在本例中,39字节设置为0x00)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值