add qd, an, ns, and ar counts
This commit is contained in:
parent
af89bfa000
commit
abf11b7205
25
dns.pack.js
25
dns.pack.js
|
@ -1,25 +0,0 @@
|
||||||
(function (exports) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var pdns = exports.DNS_PACK = function () {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
pdns.packHeader = function(h) {
|
|
||||||
var val = 0;
|
|
||||||
|
|
||||||
val += (h.qr << 15) & 0x8000;
|
|
||||||
val += (h.opcode << 11) & 0x7800;
|
|
||||||
val += (h.aa << 10) & 0x400;
|
|
||||||
val += (h.tc << 9) & 0x200;
|
|
||||||
val += (h.rd << 8) & 0x100;
|
|
||||||
val += (h.ra << 7) & 0x80;
|
|
||||||
val += (h.res1 << 6) & 0x40;
|
|
||||||
val += (h.res2 << 5) & 0x20;
|
|
||||||
val += (h.res3 << 4) & 0x10;
|
|
||||||
val += h.rcode & 0xF;
|
|
||||||
|
|
||||||
return val;
|
|
||||||
};
|
|
||||||
|
|
||||||
}('undefined' !== typeof window ? window : exports));
|
|
|
@ -5,14 +5,18 @@ var dnspack = exports.DNS_PACKER = {
|
||||||
pack: function (packet) {
|
pack: function (packet) {
|
||||||
var total = 0;
|
var total = 0;
|
||||||
var id = packet.header.id; // 2 bytes
|
var id = packet.header.id; // 2 bytes
|
||||||
total += 2;
|
|
||||||
var header = dnspack.packHeader(packet.header); // 2 bytes
|
var header = dnspack.packHeader(packet.header); // 2 bytes
|
||||||
total += 2;
|
total = 12; // 2+2+2+2 bytes ({qd,an,ns,ar}count)
|
||||||
|
|
||||||
var ab = new ArrayBuffer(total);
|
var ab = new ArrayBuffer(total);
|
||||||
var dv = new DataView(ab);
|
var dv = new DataView(ab);
|
||||||
dv.setUint16(0, id, false);
|
dv.setUint16(0, id, false);
|
||||||
dv.setUint16(2, header, false);
|
dv.setUint16(2, header, false);
|
||||||
|
dv.setUint16(4, packet.question.length, false);
|
||||||
|
dv.setUint16(6, packet.answer.length, false);
|
||||||
|
dv.setUint16(8, packet.authority.length, false);
|
||||||
|
// EDNS is added as an additional with TYPE 41 (OPT, 0x29)
|
||||||
|
dv.setUint16(10, packet.additional.length + (packet.payload ? 1 : 0), false);
|
||||||
|
|
||||||
return ab;
|
return ab;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,14 +26,14 @@
|
||||||
var lead = bytecount.toString(16);
|
var lead = bytecount.toString(16);
|
||||||
bytecount += 10;
|
bytecount += 10;
|
||||||
|
|
||||||
while (lead.length < 8) {
|
while (lead.length < 7) {
|
||||||
lead = '0' + lead;
|
lead = '0' + lead;
|
||||||
}
|
}
|
||||||
|
|
||||||
return lead + ' ' + str;
|
return lead + ' ' + str;
|
||||||
}).join('\n');
|
}).join('\n');
|
||||||
var trail = ab.byteLength.toString(16);
|
var trail = ab.byteLength.toString(16);
|
||||||
while (trail.length < 8) {
|
while (trail.length < 7) {
|
||||||
trail = '0' + trail;
|
trail = '0' + trail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue