mfontanini / libtins

High-level, multiplatform C++ network packet sniffing and crafting library.
http://libtins.github.io/
BSD 2-Clause "Simplified" License
1.91k stars 375 forks source link

Flush Packet to PCAP #372

Open jacob-baines opened 4 years ago

jacob-baines commented 4 years ago

I was doing some work on a Raspberry Pi with libtins. Specifically, I was writing unique beacons to a pcap file. However, at the end of some runs the pcap would be empty. The PCAP man page states the following:

Packets written with pcap_dump() may be buffered, rather than being immediately written to the "savefile". Closing the pcap_dumper_t will cause all buffered-but-not-yet-written packets to be written to the ``savefile''.

Unfortunately, due to the nature of the RPI, the termination of my program is rarely clean. Meaning pcap_close() will almost certainly never be called. A simple work around is to call pcap_dump_flush() after every write to ensure, no matter what, that the packets get written to the pcap file instead of stored in memory indefinitely.

mfontanini commented 4 years ago

Sorry it took me a while to check this. I think ideally there would be a flush() function in PacketWriter. I don't think every user of the library should be forced to flush every time, as that can make writes slower. Can you instead add a separate function for that? I can do it otherwise.