]>
git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/sdig.cc
1 #include "dnsparser.hh"
4 #include "dnswriter.hh"
5 #include "dnsrecords.hh"
9 int main(int argc
, char** argv
)
15 cerr
<<"Syntax: sdig IP-address port question question-type\n";
19 vector
<uint8_t> packet
;
21 DNSPacketWriter
pw(packet
, argv
[3], DNSRecordContent::TypeToNumber(argv
[4]));
26 pw.startRecord("powerdns.com", DNSRecordContent::TypeToNumber("NS"));
27 NSRecordContent nrc("ns1.powerdns.com");
30 pw.startRecord("powerdns.com", DNSRecordContent::TypeToNumber("NS"));
31 NSRecordContent nrc2("ns2.powerdns.com");
35 string
ping("hallo!");
36 /* DNSPacketWriter::optvect_t opts;
38 opts.push_back(make_pair(5, ping));
39 pw.addOpt(5200, 0, 0x8000, opts);
43 Socket
sock(InterNetwork
, Datagram
);
44 ComboAddress
dest(argv
[1] + (*argv
[1]=='@'), atoi(argv
[2]));
45 sock
.sendTo(string((char*)&*packet
.begin(), (char*)&*packet
.end()), dest
);
48 sock
.recvFrom(reply
, dest
);
50 MOADNSParser
mdp(reply
);
51 cout
<<"Reply to question for qname='"<<mdp
.d_qname
<<"', qtype="<<DNSRecordContent::NumberToType(mdp
.d_qtype
)<<endl
;
52 cout
<<"Rcode: "<<mdp
.d_header
.rcode
<<", RD: "<<mdp
.d_header
.rd
<<", QR: "<<mdp
.d_header
.qr
;
53 cout
<<", TC: "<<mdp
.d_header
.tc
<<", AA: "<<mdp
.d_header
.aa
<<", opcode: "<<mdp
.d_header
.opcode
<<endl
;
55 for(MOADNSParser::answers_t::const_iterator i
=mdp
.d_answers
.begin(); i
!=mdp
.d_answers
.end(); ++i
) {
56 cout
<<i
->first
.d_place
-1<<"\t"<<i
->first
.d_label
<<"\tIN\t"<<DNSRecordContent::NumberToType(i
->first
.d_type
);
57 cout
<<"\t"<<i
->first
.d_ttl
<<"\t"<< i
->first
.d_content
->getZoneRepresentation()<<"\n";
61 if(getEDNSOpts(mdp
, &edo
)) {
63 cerr
<<"Have "<<edo
.d_options
.size()<<" options!"<<endl
;
64 for(vector
<pair
<uint16_t, string
> >::const_iterator iter
= edo
.d_options
.begin();
65 iter
!= edo
.d_options
.end();
67 if(iter
->first
== 5) {// 'EDNS PING'
68 cerr
<<"Have ednsping: '"<<iter
->second
<<"'\n";
69 if(iter
->second
== ping
)
70 cerr
<<"It is correct!"<<endl
;
73 cerr
<<"Have unknown option "<<(int)iter
->first
<<endl
;
80 catch(std::exception
&e
)
82 cerr
<<"Fatal: "<<e
.what()<<endl
;