2016-05-04 5 views
1

Ich versuche, einige Netzwerkaufnahmen (PCAP-Format) mit Pcap.net zu manipulieren. Ich öffne die pcap-Datei und die Schaffung der Kipper mit:PcapDotNet und Datalink Typ

OfflinePacketDevice selectedDevice = new OfflinePacketDevice(pcapInFile); 
using (PacketCommunicator PcapReader = selectedDevice.Open(655360, PacketDeviceOpenAttributes.Promiscuous, 1000)) 
{ 
    PacketDumpFile PcapWriter = PcapReader.OpenDump(pcapOutFile); 
    PcapReader.ReceivePackets(count, PacketDispatcher); 
} 

Und die PacketDispatcher wäre so etwas wie:

private void PacketDispatcher(Packet packet) 
{ 
    // Manipulate the packet 
    PcapWriter.Dump(packet); 
} 

alles in Ordnung ist, so weit wie die pcapInFile Datalink Ethernet-Typ ist. Aber ich habe mehrere Captures ohne Ethernet-Layer (Rawip) und ich muss eine neue Ethernet-Schicht bauen. Bei dieser Art von Kappen ist die Datenübertragungs-Typ die gleiche wie die pcapInFile (raw ip) und ich will es ethernet ändern ...

Wenn ich speichern alle manipulierte Pakete in einem IEnumerable und steckt sie mit:

PacketDumpFile.Dump(pcapOutFile, new PcapDataLink(1), Packets.Count(), Packets); 

Es funktioniert gut ... Aber das ist nicht sehr hilfreich, wenn Sie mit Dateien von mehreren gigas handeln ...

Jede Idee? Danke!

Antwort

0

Nun, trotzdem ist keine Antwort, sondern ein Problem zu umgehen, und da niemand eine bessere Lösung ist dies schrieb, wie ein es fest:

Verwenden SharPcap statt PcapDotNet, dann können Sie diesen einen Leser und Schreiber erklären übrigens:

public CaptureFileReaderDevice PcapReader; 
public CaptureFileWriterDevice PcapWriter; 

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

in der packetDispatcher Funktion:

RawCapture raw = new RawCapture(LinkLayers.Ethernet, e.Packet.Timeval,RebuildNullLinkLayer(e, offset)); 
CaptureHandler.PcapWriter.Write(raw); 

Und in der RebuildNullLinkLayer Funktion können Sie die Ethernet-Schicht hinzufügen, ändern w hatever du willst, etc ...

Beachten Sie, dass Sie beim Aufruf des RawCapture Konstruktors die Link-Ebene (mi ursprüngliches Problem mit Pcap.Net ...) wählen können, wenn Sie also eine RawIp-Erfassung analysieren Konvertiere die Pakete in Ethernet.

0

Unter der Voraussetzung, dass alle Pakete im RAM vorhanden sind, können Sie ein IEnumerable erstellen, das nicht alles im RAM unter Verwendung von yield enthält.

Auf diese Weise ruft Dumper Pakete ab und ruft Ihre Methode auf, um das nächste Element mit yield zu füllen.