首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PcapDotNet和数据链类型

PcapDotNet和数据链类型
EN

Stack Overflow用户
提问于 2016-05-04 07:18:35
回答 2查看 434关注 0票数 1

我试图使用Pcap.net操纵一些网络捕获(Pcap.net)。我正在打开pcap,并使用以下内容创建这个翻盖:

代码语言:javascript
复制
OfflinePacketDevice selectedDevice = new OfflinePacketDevice(pcapInFile);
using (PacketCommunicator PcapReader = selectedDevice.Open(655360, PacketDeviceOpenAttributes.Promiscuous, 1000))
{
    PacketDumpFile PcapWriter = PcapReader.OpenDump(pcapOutFile);
    PcapReader.ReceivePackets(count, PacketDispatcher);
}

PacketDispatcher应该是这样的:

代码语言:javascript
复制
private void PacketDispatcher(Packet packet)
{
    // Manipulate the packet
    PcapWriter.Dump(packet);
}

只要pcapInFile数据链路是以太网类型,一切都是正常的。但是我有几个没有以太网层(rawip)的捕获,我必须构建一个新的以太网层。在这种类型的上限中,数据链路类型与pcapInFile (原始ip)相同,我希望将其更改为以太网.

如果我将所有操作过的数据包存储在一个i枚举中,并将它们转储到:

代码语言:javascript
复制
PacketDumpFile.Dump(pcapOutFile, new PcapDataLink(1), Packets.Count(), Packets);

效果不错..。但是,如果您正在处理几个gigas的文件,这不是很有用..。

有什么想法吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-23 09:11:09

好吧,尽管这不是一个答案,而是一个解决办法,既然没有人写出更好的解决方案,这就是如何解决这个问题:

使用SharPcap而不是PcapDotNet,您可以这样声明读取器和作者:

代码语言:javascript
复制
public CaptureFileReaderDevice PcapReader;
public CaptureFileWriterDevice PcapWriter;

PcapReader = new CaptureFileReaderDevice(fileIn);
PcapReader.OnPacketArrival += packetDispatcher;
PcapReader.Capture();

在packetDispatcher函数中:

代码语言:javascript
复制
RawCapture raw = new RawCapture(LinkLayers.Ethernet, e.Packet.Timeval,RebuildNullLinkLayer(e, offset));
CaptureHandler.PcapWriter.Write(raw);

在RebuildNullLinkLayer函数中,您可以添加以太网层,修改您想要的任何内容,等等。

请注意,当您调用RawCapture构造器时,您可以选择链接层(Pcap.Net.中的mi原始问题),因此如果解析RawIp捕获,则可以将数据包转换为以太网。

票数 0
EN

Stack Overflow用户

发布于 2016-05-14 13:04:02

假设关注的是内存中的所有数据包,则可以使用IEnumerable创建一个不包含RAM中所有内容的产出量

这样,当Dumper转储数据包时,它将调用您的方法来使用产率填充下一个项目。

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

https://stackoverflow.com/questions/37020950

复制
相关文章

相似问题

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