rho*_*lke 10 python networking network-programming scapy raw-ethernet
我有一些软件可以模拟BER和网络延迟等问题.我需要一种方法来测试软件的BER模块,以确保它真正正常工作.我的解决方案是创建一个程序,发送原始以太网帧,类型字段设置为未使用的类型.以太网帧内部只是随机位.对于发出的每个帧,我需要将帧记录到pcap文件中.在网络链路的另一端将是一个接收应用程序,它只是将它看到的每个数据包写入自己的pcap日志.测试完成后,将比较两个pcap日志以获得BER.
我正在使用python模块Scapy,到目前为止它完成了我需要的一切.我可以发送带有随机数据的原始以太网帧,并在Wireshark中查看它们.但是,我不知道如何将wrpcap()方法附加到pcap文件,而不是覆盖.我知道我可以写一个包列表wrpcap,但是这个应用程序需要能够无限期地运行,我不想等到应用程序退出写入发送到硬盘的所有数据包.因为在内存中存储很多,如果发生了什么事,我将不得不从头开始测试.
我的问题是:如何pcap使用scapy而不是覆盖文件来附加到pcap文件?它甚至可能吗?如果不是那么什么模块可以做我需要的?
在寻找Scapy具有我的功能的东西时,我遇到了dpkt,但我没有找到很多文档.可以dpkt做我想问的问题,如果可以,我可以在哪里获得一些好的文档呢?
小智 16
对于后代来说,PcapWriter或RawPcapWriter看起来是在scapy 2.2.0中处理这个问题的更简单方法.除了浏览源代码之外,找不到更多文档.一个简短的例子:
from scapy.utils import PcapWriter
pktdump = PcapWriter("banana.pcap", append=True, sync=True)
...
pktdump.write(pkt)
...
Run Code Online (Sandbox Code Playgroud)
有办法做你想要的,但它意味着:
[带有一个大的记忆猪pcap]:pcap从磁盘中读取现有的rdpcap()a scapy PacketList(),然后将帧写入PacketList接收到的帧.您可以选择性地将中间值保存PacketList到随意pcap,但我认为没有类似于附加功能scapy的内容wrpcap().正如您所提到的,这种技术也意味着您将整个PacketList内存保留在内存中直到完成.
[将各个pcap文件粘贴在一起]:仅在内存中保留数据包的小快照...您应该pcap以每X分钟为基础将快照保存到磁盘,然后在脚本完成时将这些单个文件聚合在一起.
你可以结合pcap在Linux与文件mergecap从wireshark包...下面的命令将结合pak1.pcap和pak2.pcap成all_paks.pcap:
mergecap -w all_paks.pcap pak1.pcap pak2.pcap
Run Code Online (Sandbox Code Playgroud)
至于dpkt,我浏览了他们的源代码,它可能能够逐步写入数据包,但我不能说他们的代码库是多么稳定或维护......它看起来有点忽略了提交日志(最后提交是2011年1月9日).
| 归档时间: |
|
| 查看次数: |
17958 次 |
| 最近记录: |