diff --git a/exec/load/dns.js b/exec/load/dns.js index bbe4a374389eb5dd60ef1baa7d489c7e6a599d62..09b7bf905e0bc65138ad1920d577fb54db886540 100644 --- a/exec/load/dns.js +++ b/exec/load/dns.js @@ -89,16 +89,16 @@ function DNS(servers) { var tmp4; switch(type) { - case 1: // A + case 1: // A return ascii(resp[offset]) + '.' + ascii(resp[offset + 1]) + '.' + ascii(resp[offset + 2]) + '.' + ascii(resp[offset + 3]); - case 2: // NS + case 2: // NS return get_name(resp, offset).name; - case 5: // CNAME + case 5: // CNAME return get_name(resp, offset).name; - case 6: // SOA + case 6: // SOA tmp = {}; tmp2 = 0; tmp3 = get_name(resp, offset + tmp2); @@ -118,7 +118,7 @@ function DNS(servers) { tmp.minimum = string_to_int32(resp.substr(offset + tmp2, 4)); tmp2 += 4; return tmp; - case 11: // WKS + case 11: // WKS tmp = {}; tmp.address = ascii(resp[offset]) + '.' + ascii(resp[offset + 1]) + '.' + @@ -135,17 +135,17 @@ function DNS(servers) { } } return tmp; - case 12: // PTR + case 12: // PTR return get_name(resp, offset).name; - case 13: // HINFO + case 13: // HINFO tmp = get_string(resp, offset); return {'cpu':tmp.string, 'os':get_string(resp, offset + tmp.len).string}; - case 15: // MX + case 15: // MX tmp = {}; tmp.preference = string_to_int16(resp.substr(offset, 2)); tmp.exchange = get_name(resp, offset + 2).name; return tmp; - case 16: // TXT + case 16: // TXT tmp = []; tmp2 = 0; do { @@ -154,7 +154,7 @@ function DNS(servers) { tmp2 += tmp3.len; } while (tmp2 < len); return tmp; - case 28: + case 28: // AAAA return format("%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", ascii(resp[offset + 0]), ascii(resp[offset + 1]), ascii(resp[offset + 2]), ascii(resp[offset + 3]), @@ -165,13 +165,50 @@ function DNS(servers) { ascii(resp[offset + 12]), ascii(resp[offset + 13]), ascii(resp[offset + 14]), ascii(resp[offset + 15]) ).replace(/(0000:)+/, ':').replace(/(^|:)0{1,3}/g, '$1'); - case 3: // MD - case 4: // MF - case 7: // MB - case 8: // MG - case 9: // MR - case 10: // NULL - case 14: // MINFO + case 33: // SRV + tmp = {}; + tmp.priority = string_to_int16(resp.substr(offset, 2); + offset += 2; + tmp.weight = string_to_int16(resp.substr(offset, 2); + offset += 2; + tmp.port = string_to_int16(resp.substr(offset, 2); + offset += 2; + tmp.target = get_name(resp, offset).name; + return tmp; + case 35: // NAPTR + tmp = {}; + tmp.order = string_to_int16(resp.substr(offset, 2); + offset += 2; + tmp.preference = string_to_int16(resp.substr(offset, 2); + offset += 2; + tmp2 = get_string(resp, offset); + tmp.flags = tmp2.string; + offset += tmp2.len; + tmp2 = get_string(resp, offset); + tmp.services = tmp2.string; + offset += tmp2.len; + tmp2 = get_string(resp, offset); + tmp.regexp = tmp2.string; + offset += tmp2.len; + tmp.replacement = get_name(resp, offset).name; + return tmp; + case 256: // URI + tmp = {}; + tmp.priority = string_to_int16(resp.substr(offset, 2); + offset += 2; + tmp.weight = string_to_int16(resp.substr(offset, 2); + offset += 2; + tmp.target = get_string(resp, offset).string; + tmp.target = tmp.target.replace(/\\"/g, '"'); + tmp.target = tmp.target.replace(/^"(.*)"$/, '$1'); + return tmp; + case 3: // MD + case 4: // MF + case 7: // MB + case 8: // MG + case 9: // MR + case 10: // NULL + case 14: // MINFO return {'raw':resp.substr(offset, len)}; } } @@ -312,7 +349,10 @@ DNS.types = { 'MINFO':14, 'MX':15, 'TXT':16, - 'AAAA':28 + 'AAAA':28, + 'SRV':33, + 'NAPTR':35, + 'URI':256 }; DNS.classes = {