我有一些软件可以模拟网络上的误码率和延迟。我需要一种方法来测试软件的误码率模块,以确保它实际工作正常。我的解决方案是创建一个程序,发送原始以太网帧,并将type字段设置为未使用的类型。以太网帧内部只是随机位。对于发送的每个帧,我需要将帧记录到一个pcap
文件中。在网络链路的另一端是一个接收应用程序,它只需将看到的每个包写入自己的pcap
日志。测试完成后,运行两个pcap日志进行比较以获得BER。
我正在使用python模块Scapy
,目前为止它已经完成了我需要的所有工作。我可以发送带有随机数据的原始以太网帧,并在Wireshark中看到它们。但是,我不知道如何让wrpcap()
方法附加到pcap文件,而不是覆盖。我知道我可以向wrpcap
写入一个数据包列表,但是这个应用程序需要能够无限期地运行,我不想等到应用程序退出将所有发送到硬盘的数据包写入。因为这需要存储在内存中,如果发生了什么事情,我将不得不从头开始测试。
我的问题是:如何使用scapy
附加到pcap
文件,而不是覆盖pcap
文件?有可能吗?如果不是,那么什么模块可以做我需要的?
在寻找具有Scapy
功能的东西时,我遇到了dpkt
,但是没有找到很多文档。dpkt
能按我的要求做吗?如果能,我在哪里能得到一些好的文档?
有一种方法可以做你想做的事,但它意味着:
[Memory hog with one big
pcap
]:从带有rdpcap()
的磁盘中将现有的pcap
读入scapy
PacketList()
,然后在接收到帧时将其写入PacketList
。您可以随意选择将中间PacketList
保存到pcap
,但我认为scapy
的wrpcap()
中没有任何类似附加功能的功能。正如您所提到的,这种技术还意味着您将整个PacketList
保存在内存中,直到完成。[将单个
pcap
文件粘合在一起]:只在内存中保留数据包的小快照。。。您应该每X分钟将pcap
快照保存到磁盘,然后在脚本完成时将这些单独的文件聚合在一起。您可以将linux中的} 组合在一起。。。以下命令将把
pcap
文件与wireshark
包中的^{pak1.pcap
和pak2.pcap
组合成all_paks.pcap
:至于^{} ,我查看了它们的源代码,它可能能够以增量方式编写数据包,但我无法说明它们的代码基础有多稳定或维护有多好。。。在提交日志中,它看起来有点被忽略了(上一次提交是2011年1月9日)。
对于后人来说,PcapWriter或RawPcapWriter看起来是在scapy 2.2.0中处理这个问题的更简单的方法。不过,除了浏览源代码外,找不到太多文档。一个简单的例子:
我想我在这里跟踪你,因为包是嗅探你想让他们都写在一个单一的pcap文件?虽然不能追加到pcap,但可以将数据包追加到列表,然后一次将它们全部写入pcap。
我不确定这是否能回答你的问题或有任何帮助,如果不让我知道,我可以让它满足你的需要。在这个例子中,我设置了一个阈值来创建一个新的pcap,用于监听500个包。如果您运行此命令两次,请小心,因为第二次运行时您的PCAP可能会被重写。
这应该会给你一点优势,但是最后几个数据包可能会丢失(降低if语句中的值以减轻这种情况)。建议同时在两边使用它,这样每个pcap都应该排好队,以后你可以像Mike建议的那样使用mergepcap,如果你喜欢的话。如果这对你有用,请告诉我。
相关问题 更多 >
编程相关推荐