首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Scapy更改数据包-自动更新属性(长度、校验和等)编辑数据包的有效载荷后

使用Scapy更改数据包-自动更新属性(长度、校验和等)编辑数据包的有效载荷后
EN

Stack Overflow用户
提问于 2018-07-11 14:17:44
回答 1查看 3K关注 0票数 1

我目前正在使用pcap中的scapy修改一个scapy文件(在Linux上)。我这样做有两个原因:

  • 我需要更改某些数据包的负载的特定部分,然后重放这些部分,以便我正在测试的软件接收更改后的数据,使我能够观察它的行为
  • 当我尝试使用tcpreplayscapy自己的sendp(...)时,对于一些数据包(原始负载),我得到的“消息太长了”。如果我没有弄错的话,减少负载应该允许我绕过这个问题。

下面是我所做工作的一个小例子(我使用ipython):

代码语言:javascript
复制
from scapy.all import rdpcap, wrpcap
from scapy.utils import sendp
import re

# Load PCAP file. In my case I have 24 packets
pkts = rdpcap('dump.pcap')

# Change the load of packet 16 by removing some of the data inside
pkts[16].load = re.sub(r'<Stop[0-9]+>[0-9]+</Stop[0-9]+>', '', pkts[16].load)

# Write the changes to a new file
wrpcap('dump_edited.pcap', pkts)

# and send those (the operation requires admin privileges!)
sendp(pkts) # or use tcpreplay in the terminal

现在的问题是,以这种方式编辑加载意味着与其相关的其他属性不会被更新。例如,如果长度以前为2982 (使用pkts[16].show(),您可以获得数据包属性的详细概述),则在编辑其加载后,长度仍然相同。校验和也不会改变。这当然是意料之中的,因为我所做的只是直接编辑字符串,这显然不会触发数据包属性的任何更新。

我刚刚发现了scapy,所以这个问题可能太明显了,但是是否有一种方法可以改变负载,使其属性也能自动更新?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 14:52:42

Scapy避免在没有编码器的情况下做一些事情。例如,您必须能够手动为您的测试指定错误的校验和,而不必对其进行替罪羊的修改。

通常,当属性为None时,scapy将自动计算该值。例如,将所有校验和以及长度设置为None,在构建时,scapy将根据数据包为您计算它们。

如果您不想编写它,也可以使用

代码语言:javascript
复制
pkt = Ether(bytes(pkt))

(假设以太是最低层),在将值设置为None后,也会重新计算校验和。

在执行wrpcap(..)bytes(packet)packet.show2()时,也会生成一个数据包。

这应该能解决你的问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51287871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档