| 1 | #include <bitset> |
|---|
| 2 | #include "statbag.hh" |
|---|
| 3 | #include "dnspcap.hh" |
|---|
| 4 | #include "sstuff.hh" |
|---|
| 5 | #include "anadns.hh" |
|---|
| 6 | |
|---|
| 7 | // this is needed because boost multi_index also uses 'L', as do we (which is sad enough) |
|---|
| 8 | #undef L |
|---|
| 9 | |
|---|
| 10 | #include <arpa/nameser.h> |
|---|
| 11 | #include <set> |
|---|
| 12 | #include <deque> |
|---|
| 13 | |
|---|
| 14 | #include <boost/format.hpp> |
|---|
| 15 | #include <boost/utility.hpp> |
|---|
| 16 | #include <boost/multi_index_container.hpp> |
|---|
| 17 | #include <boost/multi_index/ordered_index.hpp> |
|---|
| 18 | #include <boost/multi_index/key_extractors.hpp> |
|---|
| 19 | #include <cctype> |
|---|
| 20 | |
|---|
| 21 | using namespace boost; |
|---|
| 22 | using namespace ::boost::multi_index; |
|---|
| 23 | using namespace std; |
|---|
| 24 | StatBag S; |
|---|
| 25 | |
|---|
| 26 | int main(int argc, char** argv) |
|---|
| 27 | try |
|---|
| 28 | { |
|---|
| 29 | PcapPacketReader pr(argv[1]); |
|---|
| 30 | Socket sock(InterNetwork, Datagram); |
|---|
| 31 | |
|---|
| 32 | IPEndpoint remote(argc > 2 ? argv[2] : "127.0.0.1", |
|---|
| 33 | argc > 3 ? atoi(argv[3]) : 5300); |
|---|
| 34 | |
|---|
| 35 | |
|---|
| 36 | while(pr.getUDPPacket()) { |
|---|
| 37 | try { |
|---|
| 38 | MOADNSParser mdp((const char*)pr.d_payload, pr.d_len); |
|---|
| 39 | for(int i=0; i < mdp.d_qname.length(); ++i) |
|---|
| 40 | if(!isalnum(mdp.d_qname[i]) && mdp.d_qname[i]!='.' && mdp.d_qname[i]!='-' && mdp.d_qname[i]!='_') { |
|---|
| 41 | cout<<mdp.d_qname<<"|"<<mdp.d_qtype<<"|"<<mdp.d_qclass<<"\n"; |
|---|
| 42 | sock.sendTo(string(pr.d_payload, pr.d_payload + pr.d_len), remote); |
|---|
| 43 | break; |
|---|
| 44 | } |
|---|
| 45 | if(mdp.d_qtype > 256 || mdp.d_qclass!=1 ) { |
|---|
| 46 | // sock.sendTo(string(pr.d_payload, pr.d_payload + pr.d_len), remote); |
|---|
| 47 | |
|---|
| 48 | } |
|---|
| 49 | for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i!=mdp.d_answers.end(); ++i) { |
|---|
| 50 | |
|---|
| 51 | } |
|---|
| 52 | |
|---|
| 53 | } |
|---|
| 54 | catch(MOADNSException &e) { |
|---|
| 55 | cerr<<"Error: "<<e.what()<<"\n"; |
|---|
| 56 | sock.sendTo(string(pr.d_payload, pr.d_payload + pr.d_len), remote); |
|---|
| 57 | } |
|---|
| 58 | } |
|---|
| 59 | } |
|---|
| 60 | catch(exception& e) |
|---|
| 61 | { |
|---|
| 62 | cerr<<"Fatal: "<<e.what()<<endl; |
|---|
| 63 | } |
|---|
| 64 | |
|---|