diff --git a/exec/load/dns.js b/exec/load/dns.js index 0f3693244bc511cff551a3f659053b54cdbb5a19..d7e730232b0883fa370bc136e93e15a73705204b 100644 --- a/exec/load/dns.js +++ b/exec/load/dns.js @@ -403,12 +403,16 @@ DNS.prototype.handle_response = function(sock) { ret.id = id; ret.response = !!(ascii(resp[2]) & 1); + if (!ret.response) + return null; ret.opcode = (ascii(resp[2]) & 0x1e) >> 1; + if (ret.opcode !== 0) + return null; ret.authoritative = !!(ascii(resp[2]) & (1<<5)); ret.truncation = !!(ascii(resp[2]) & (1<<6)); ret.recusrion = !!(ascii(resp[2]) & (1<<7)); ret.reserved = ascii(resp[3]) & 7; - ret.rcode = ascii(resp[3] & 0xf1) >> 3; + ret.rcode = ascii(resp[3] & 0xf0) >> 4; queries = string_to_int16(resp.substr(4, 2)); answers = string_to_int16(resp.substr(6, 2)); @@ -498,9 +502,9 @@ DNS.prototype.asynchronous_query = function(queries, /* queryStr, type, class, * if (recursive === undefined) recursive = true; if (timeout === undefined) - timeout = 1000; + timeout = 5000; if (failures === undefined) - failures = 1; + failures = 3; if (failed === undefined) failed = 0; @@ -539,9 +543,9 @@ DNS.prototype.synchronous_query = function(queries, callback, thisObj, recursive if (recursive === undefined) recursive = true; if (timeout === undefined) - timeout = 1000; + timeout = 5000; if (failures === undefined) - failures = 1; + failures = 3; if (failed === undefined) failed = 0; @@ -717,6 +721,8 @@ DNS.prototype.resolveTypeClass = function(host, type, class, callback, thisObj) resp.answers.forEach(function(ans) { if (resp.queries[0].type != ans.type || resp.queries[0].class != ans.class) return; + if (resp.rcode !== 0) + return; this.ret.push(ans.rdata); }, this); }