Python-Scapy wrpcap - Wie kann man die append-Pakete einer pcap-Datei?
Habe ich einige software, die das emulieren kann Dinge wie BER und Verzögerungen auf dem Netzwerk. Ich brauche einen Weg, um zu testen, die BER Modul der software, um sicherzustellen, dass es wirklich richtig funktioniert. Meine Lösung ist, erstellen Sie ein Programm, das sendet rohe Ethernet-Rahmen mit der Typ-Feld auf eine nicht verwendete Typ. Innerhalb des Ethernet-frame wird nur zufällige bits. Für jeden frame gesendet, die ich brauchen, um sich den frame zu einem pcap
- Datei. Auf der anderen Seite der Netzwerk-link wird eine empfangende Anwendung, die schreibt einfach jedes Paket, das Sie sieht, zu seiner eigenen pcap
melden. Nach dem test laufen die beiden pcap-logs verglichen werden, um die BER.
Ich bin mit dem python-Modul Scapy
- und damit weit Ihrer gemacht alles, was ich brauche. Ich kann senden Sie raw-Ethernet-frames mit zufälligen Daten und sehen, wie Sie in Wireshark. Allerdings weiß ich nicht, wie man die wrpcap()
Methode zum Anhängen an die pcap-Datei überschrieben. Ich weiß, ich kann schreiben, eine Liste der Pakete, die wrpcap
, aber diese Anwendung muss in der Lage sein zu laufen für unbestimmte Zeit und ich will nicht warten, bis die Anwendung beendet zu schreiben, alle gesendeten Pakete auf die Festplatte. Als wäre das eine Menge im Speicher speichern, und wenn etwas passierte, hätte ich um den test zu starten alle wieder von neuem.
Meine Frage ist: Wie kann ich anfügen an ein pcap
- Datei mit scapy
anstelle von überschreiben der pcap
- Datei? Ist es überhaupt möglich? Wenn nicht, dann was Modul kann tun, was ich brauche?
Während der Suche nach etwas mit Scapy
's Fähigkeiten, die ich lief in dpkt
, aber ich habe nicht viel Dokumentation dafür. Kann dpkt
tun, was ich verlange und wenn ja, wo bekomme ich einige gute Dokumentation dafür?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine Möglichkeit, das zu tun, was Sie wollen, aber es bedeutet entweder:
[Speicherfresser mit einem großen
pcap
]: Lesen Sie den bestehendenpcap
von der Festplatte mitrdpcap()
in einescapy
PacketList()
und dann schreiben von frames, um diePacketList
wie Sie empfangen werden. Sie können selektiv speichern von ZwischenergebnissenPacketList
zu denpcap
zu werden, aber ich glaube nicht, dass es so etwas wie eine append-Funktion inscapy
'swrpcap()
. Wie Sie bereits erwähnt, ist diese Technik auch bedeutet, dass Sie halten die gesamtePacketList
im Speicher bis zur Fertigstellung.[Leim einzelnen
pcap
Dateien zusammen]: immer Nur kleine Momentaufnahmen der Pakete im Speicher... speichern, sollten Siepcap
snapshots auf einer pro-X-Minuten-basis auf die Festplatte, und dann aggregieren die einzelnen Dateien zusammen, wenn das Skript abgeschlossen ist.Kombinieren Sie
pcap
Dateien in linux mitmergecap
aus derwireshark
Paket... Der folgende Befehl kombinierenpak1.pcap
undpak2.pcap
inall_paks.pcap
:Als für
dpkt
, ich schaute über Ihre Quelle, und es kann in der Lage sein, um inkrementell schreiben Pakete, aber ich kann nicht sprechen, für wie stabil oder beibehalten Ihrer code-Basis ist... es sieht ein bisschen vernachlässigt aus der commit-logs (letzter commit war der 9. Januar 2011).Für die Nachwelt, PcapWriter oder RawPcapWriter sieht der einfachere Weg, um sich mit diesem in scapy 2.2.0. Konnte nicht viel Dokumentation zu anderen, als zum Besuch der Quelle wenn. Ein kurzes Beispiel:
append
parameter: scapy utils @ github. Beachten Sie, dass Sie brauchen, um zu füllen pkt variable mitpkt=rdpcap(pcap_file)
zum Beispiel.p
ist jedes Paket in der Listepkt
, würden Sie wollen, um codep.time = p.time + delay
Ich denke, ich Folge Euch hier als Pakete schnupperte Sie möchten, um Sie alle geschrieben auf einer einzigen pcap-Datei? Sie können zwar nicht Anhängen, um ein pcap Sie können den anfügen, die Pakete auflisten und dann schreiben Sie alle auf einmal zu pcap.
Ich bin mir nicht sicher, ob Ihre Frage damit beantwortet oder hilft überhaupt nichts, wenn nicht lassen Sie mich wissen, und ich kann es tweek um Ihre Bedürfnisse zu erfüllen. In diesem Beispiel habe ich die Schwelle zum erstellen einer neuen pcap-für je 500 Pakete gesnifft. Seien Sie vorsichtig, wenn Sie dies zweimal, wie Ihr pcaps kann sich über geschrieben auf die zweite gehen.
Dies sollte Ihnen ein wenig von nutzen aber die letzten paar Pakete verloren gehen können (niedriger der Wert in der if-Anweisung, diese zu mildern.) Empfehlen es auf beiden Seiten an der gleichen Zeit, so dass jeder pcap sollte, kann man Später verwenden mergepcap als Mike schlägt vor, wenn Sie mögen. Lassen Sie mich wissen, wenn dieses für Sie arbeitet.
Den
wrpcap()
Funktion kann verwendet werden, um anzufügen, wenn man die keyword-argumentappend=True
. Zum Beispiel:Seite Hinweis: wrpcap öffnet und schließt die Datei-handle, das bei jedem Aufruf. Wenn Sie ein offenes Datei-handle, um die pcap-Datei, wird es geschlossen, nach einem Anruf zu
wrpcap()
.