Ich muss UDP-Pakete in eine Datei speichern und möchte das pcap-Format verwenden, um die verschiedenen verfügbaren Tools (wireshark, tcpdump, ...) wiederzuverwenden. Es gibt einige Informationen in this thread, aber ich kann nicht finden, wie man den globalen Dateiheader 'struct pcap_file_header' schreibt.Erstellen einer pcap-Datei
pcap_t* pd = pcap_open_dead(DLT_RAW, 65535);
pcap_dumper_t* pdumper = pcap_dump_open(pd, filename);
struct pcap_file_header file_hdr;
file_hdr.magic_number = 0xa1b2c3d4;
file_hdr.version_major = 2;
file_hdr.version_minor = 4;
file_hdr.thiszone = 0;
file_hdr.sigfigs = 0;
file_hdr.snaplen = 65535;
file_hdr.linktype = 1;
// How do I write file_hdr to m_pdumper?
while((len = recvmsg(sd, &msg_hdr, 0)) > 0)
pcap_dump((u_char*)m_pdumper, &m_pcap_pkthdr, (const u_char*)&data);
Wie soll ich den globalen Dateikopf schreiben? Wenn keine spezifische PCAP-Funktion verfügbar ist, wie kann ich den Dateideskriptor abrufen, um den Header mit write() einzufügen?
Danke, aber es sieht so aus, als ob Sie alles mit regulären Datei-Write() -Aufrufen gemacht haben. Ich benutze pcap_dump() und kann nicht herausfinden, wo ich den Dateideskriptor bekommen soll. –
@RobertKubrick Aktualisiert oben. Ich habe die ursprüngliche Antwort verlassen, da selbst mit 'pcap_dump' noch ein IP-Header gefälscht werden muss, und der oben verlinkte Patch kann dabei helfen. – je4d
True, keine Notwendigkeit, den globalen Dateiheader zu schreiben, habe ich gerade verifiziert. –