+#define __FAVOR_BSD
#include <pcap.h>
#include "statbag.hh"
#include <map>
#include <set>
#include <fstream>
+#include <algorithm>
#include "anadns.hh"
using namespace boost;
if(argc==3)
pw=new PcapPacketWriter(argv[2], pr);
- int dnserrors=0;
+ int dnserrors=0, bogus=0;
typedef map<uint32_t,uint32_t> cumul_t;
cumul_t cumul;
unsigned int untracked=0, errorresult=0, reallylate=0;
while(pr.getUDPPacket()) {
- if((ntohs(pr.d_udp->dest)==5300 || ntohs(pr.d_udp->source)==5300 ||
- ntohs(pr.d_udp->dest)==53 || ntohs(pr.d_udp->source)==53) &&
+ if((ntohs(pr.d_udp->uh_dport)==5300 || ntohs(pr.d_udp->uh_sport)==5300 ||
+ ntohs(pr.d_udp->uh_dport)==53 || ntohs(pr.d_udp->uh_sport)==53) &&
pr.d_len > sizeof(HEADER)) {
try {
MOADNSParser mdp((const char*)pr.d_payload, pr.d_len);
continue;
}
catch(exception& e) {
- cerr<<"Bogus packet"<<endl;
if(pw)
pw->write();
+ bogus++;
continue;
}
}
cerr<<"Timespan: "<<(highestTime-lowestTime)/3600.0<<" hours"<<endl;
cerr<<"Saw "<<pr.d_correctpackets<<" correct packets, "<<pr.d_runts<<" runts, "<< pr.d_oversized<<" oversize, "<<
- pr.d_nonetheripudp<<" unknown encaps, "<<dnserrors<<" dns decoding errors"<<endl;
+ pr.d_nonetheripudp<<" unknown encaps, "<<dnserrors<<" dns decoding errors, "<<bogus<<" bogus packets"<<endl;
unsigned int unanswered=0;
for(statmap_t::const_iterator i=statmap.begin(); i!=statmap.end(); ++i) {