]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/dnspcap.hh
initial import of dnswasher
[thirdparty/pdns.git] / pdns / dnspcap.hh
1 #ifndef PDNS_DNSPCAP_HH
2 #define PDNS_DNSPCAP_HH
3 #include <cstdio>
4 #include <stdexcept>
5 #include <string>
6
7 using namespace std;
8
9 class PcapPacketReader
10 {
11 public:
12 class EofException : public runtime_error
13 {
14 public:
15 EofException(const string& str="") : runtime_error(str)
16 {
17 }
18 };
19
20 PcapPacketReader(const string& fname);
21
22 ~PcapPacketReader();
23
24 template<typename T>
25 void checkedFread(T* ptr)
26 {
27 checkedFreadSize(ptr, sizeof(*ptr));
28 }
29
30 void checkedFreadSize(void* ptr, size_t size) ;
31
32 bool getUDPPacket();
33
34 struct iphdr *d_ip;
35 const struct tcphdr *d_tcp;
36 const struct udphdr *d_udp;
37 const uint8_t* d_payload;
38 int d_len;
39 struct pcap_pkthdr d_pheader;
40 pcap_file_header d_pfh;
41 unsigned int d_runts, d_oversized, d_packets;
42 char d_buffer[5000];
43 private:
44 FILE* d_fp;
45 string d_fname;
46 };
47
48 class PcapPacketWriter
49 {
50 public:
51 PcapPacketWriter(const string& fname, PcapPacketReader& ppr);
52
53 void write();
54
55 ~PcapPacketWriter();
56
57 private:
58 string d_fname;
59 const PcapPacketReader& d_ppr;
60
61 FILE *d_fp;
62 };
63
64 #endif // DNSPCAP_HH