author | Matthew Wild <mwild1@gmail.com> |
Sun, 26 Dec 2021 20:37:20 +0000 | |
changeset 12125 | 2162e86029b6 |
parent 10976 | b3773b1b90a1 |
child 12240 | d0dfd48806f9 |
permissions | -rw-r--r-- |
10965
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 |
-- libunbound based net.adns replacement for Prosody IM |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
-- Copyright (C) 2012-2015 Kim Alvefur |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 |
-- Copyright (C) 2012 Waqas Hussain |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 |
-- |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 |
-- This file is MIT licensed. |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 |
local setmetatable = setmetatable; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 |
local table = table; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
local t_concat = table.concat; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 |
local t_insert = table.insert; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 |
local s_byte = string.byte; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 |
local s_char = string.char; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 |
local s_format = string.format; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
local s_gsub = string.gsub; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 |
local s_sub = string.sub; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 |
local s_match = string.match; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
local s_gmatch = string.gmatch; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 |
local have_net, net_util = pcall(require, "util.net"); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 |
if have_net and not net_util.ntop then -- Added in Prosody 0.11 |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
have_net = false; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 |
local chartohex = {}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 |
for c = 0, 255 do |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 |
chartohex[s_char(c)] = s_format("%02X", c); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
local function tohex(s) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 |
return (s_gsub(s, ".", chartohex)); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 |
-- Converted from |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
-- http://www.iana.org/assignments/dns-parameters |
10976
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
37 |
-- 2020-06-25 |
10965
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 |
local classes = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
IN = 1; "IN"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 |
nil; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 |
CH = 3; "CH"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 |
HS = 4; "HS"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 |
local types = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 |
"A";"NS";"MD";"MF";"CNAME";"SOA";"MB";"MG";"MR";"NULL";"WKS";"PTR";"HINFO"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
"MINFO";"MX";"TXT";"RP";"AFSDB";"X25";"ISDN";"RT";"NSAP";"NSAP-PTR";"SIG"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 |
"KEY";"PX";"GPOS";"AAAA";"LOC";"NXT";"EID";"NIMLOC";"SRV";"ATMA";"NAPTR"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 |
"KX";"CERT";"A6";"DNAME";"SINK";"OPT";"APL";"DS";"SSHFP";"IPSECKEY";"RRSIG"; |
10976
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
51 |
"NSEC";"DNSKEY";"DHCID";"NSEC3";"NSEC3PARAM";"TLSA";"SMIMEA";[55]="HIP"; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
52 |
[56]="NINFO";[57]="RKEY";[58]="TALINK";[59]="CDS";[60]="CDNSKEY";[61]="OPENPGPKEY"; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
53 |
[62]="CSYNC";[63]="ZONEMD";[99]="SPF";[100]="UINFO";[101]="UID";[102]="GID"; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
54 |
[103]="UNSPEC";[104]="NID";[105]="L32";[106]="L64";[107]="LP";[108]="EUI48"; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
55 |
[109]="EUI64";["CSYNC"]=62;["TXT"]=16;["NAPTR"]=35;["A6"]=38;["RP"]=17; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
56 |
["TALINK"]=58;["NXT"]=30;["MR"]=9;["UINFO"]=100;["X25"]=19;["TKEY"]=249; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
57 |
["CERT"]=37;["SMIMEA"]=53;[252]="AXFR";[253]="MAILB";["CDS"]=59;[32769]="DLV"; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
58 |
["RT"]=21;["WKS"]=11;[249]="TKEY";["LP"]=107;[250]="TSIG";["SSHFP"]=44;["DS"]=43; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
59 |
["ISDN"]=20;["ATMA"]=34;["NS"]=2;[257]="CAA";["PX"]=26;["MX"]=15;["TSIG"]=250; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
60 |
["EID"]=31;["TLSA"]=52;["GID"]=102;["KX"]=36;["SPF"]=99;["DOA"]=259;["GPOS"]=27; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
61 |
["IPSECKEY"]=45;["NIMLOC"]=32;["RRSIG"]=46;["UID"]=101;["DNAME"]=39;["NSAP"]=22; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
62 |
["DNSKEY"]=48;["SINK"]=40;["DHCID"]=49;[32768]="TA";["NSAP-PTR"]=23;["AAAA"]=28; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
63 |
["PTR"]=12;["MINFO"]=14;["TA"]=32768;["EUI64"]=109;[260]="AMTRELAY"; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
64 |
["AMTRELAY"]=260;["CDNSKEY"]=60;[259]="DOA";["LOC"]=29;[258]="AVC";["AVC"]=258; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
65 |
["CAA"]=257;["MB"]=7;["*"]=255;[256]="URI";["URI"]=256;["SRV"]=33;["EUI48"]=108; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
66 |
[255]="*";[254]="MAILA";["MAILA"]=254;["MAILB"]=253;["CNAME"]=5;[251]="IXFR"; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
67 |
["APL"]=42;["OPENPGPKEY"]=61;["MD"]=3;["NINFO"]=56;["ZONEMD"]=63;["RKEY"]=57; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
68 |
["L32"]=105;["NID"]=104;["HIP"]=55;["NSEC"]=47;["DLV"]=32769;["UNSPEC"]=103; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
69 |
["NSEC3PARAM"]=51;["MF"]=4;["MG"]=8;["AFSDB"]=18;["A"]=1;["SIG"]=24;["NSEC3"]=50; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
70 |
["HINFO"]=13;["IXFR"]=251;["NULL"]=10;["AXFR"]=252;["KEY"]=25;["OPT"]=41; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
71 |
["SOA"]=6;["L64"]=106; |
b3773b1b90a1
util.dns: Update RR types from IANA registry
Kim Alvefur <zash@zash.se>
parents:
10965
diff
changeset
|
72 |
} |
10965
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 |
local errors = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 |
NoError = "No Error"; [0] = "NoError"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 |
FormErr = "Format Error"; "FormErr"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 |
ServFail = "Server Failure"; "ServFail"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 |
NXDomain = "Non-Existent Domain"; "NXDomain"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 |
NotImp = "Not Implemented"; "NotImp"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 |
Refused = "Query Refused"; "Refused"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 |
YXDomain = "Name Exists when it should not"; "YXDomain"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 |
YXRRSet = "RR Set Exists when it should not"; "YXRRSet"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 |
NXRRSet = "RR Set that should exist does not"; "NXRRSet"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 |
NotAuth = "Server Not Authoritative for zone"; "NotAuth"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 |
NotZone = "Name not contained in zone"; "NotZone"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 |
-- Simplified versions of Waqas DNS parsers |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 |
-- Only the per RR parsers are needed and only feed a single RR |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 |
local parsers = {}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 |
-- No support for pointers, but libunbound appears to take care of that. |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 |
local function readDnsName(packet, pos) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 |
if s_byte(packet, pos) == 0 then return "."; end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 |
local pack_len, r, len = #packet, {}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 |
pos = pos or 1; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 |
repeat |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 |
len = s_byte(packet, pos) or 0; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 |
t_insert(r, s_sub(packet, pos + 1, pos + len)); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 |
pos = pos + len + 1; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 |
until len == 0 or pos >= pack_len; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 |
return t_concat(r, "."), pos; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 |
-- These are just simple names. |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 |
parsers.CNAME = readDnsName; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 |
parsers.NS = readDnsName |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 |
parsers.PTR = readDnsName; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
111 |
local soa_mt = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 |
__tostring = function(rr) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 |
return s_format("%s %s %d %d %d %d %d", rr.mname, rr.rname, rr.serial, rr.refresh, rr.retry, rr.expire, rr.minimum); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
114 |
end; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
116 |
function parsers.SOA(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 |
local mname, rname, offset; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 |
mname, offset = readDnsName(packet, 1); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 |
rname, offset = readDnsName(packet, offset); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 |
-- Extract all the bytes of these fields in one call |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 |
local |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
124 |
s1, s2, s3, s4, -- serial |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 |
r1, r2, r3, r4, -- refresh |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 |
t1, t2, t3, t4, -- retry |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
127 |
e1, e2, e3, e4, -- expire |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 |
m1, m2, m3, m4 -- minimum |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 |
= s_byte(packet, offset, offset + 19); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
130 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 |
return setmetatable({ |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 |
mname = mname; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 |
rname = rname; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 |
serial = s1*0x1000000 + s2*0x10000 + s3*0x100 + s4; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 |
refresh = r1*0x1000000 + r2*0x10000 + r3*0x100 + r4; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 |
retry = t1*0x1000000 + t2*0x10000 + t3*0x100 + t4; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
137 |
expire = e1*0x1000000 + e2*0x10000 + e3*0x100 + e4; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 |
minimum = m1*0x1000000 + m2*0x10000 + m3*0x100 + m4; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 |
}, soa_mt); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
140 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 |
function parsers.A(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 |
return s_format("%d.%d.%d.%d", s_byte(packet, 1, 4)); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
145 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
146 |
local aaaa = { nil, nil, nil, nil, nil, nil, nil, nil, }; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
147 |
function parsers.AAAA(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
148 |
local hi, lo, ip, len, token; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
149 |
for i = 1, 8 do |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
150 |
hi, lo = s_byte(packet, i * 2 - 1, i * 2); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
151 |
aaaa[i] = s_format("%x", hi * 256 + lo); -- skips leading zeros |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
153 |
ip = t_concat(aaaa, ":", 1, 8); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
154 |
len = (s_match(ip, "^0:[0:]+()") or 1) - 1; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 |
for s in s_gmatch(ip, ":0:[0:]+") do |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
156 |
if len < #s then len, token = #s, s; end -- find longest sequence of zeros |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 |
return (s_gsub(ip, token or "^0:[0:]+", "::", 1)); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
159 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
160 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
161 |
if have_net then |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
162 |
parsers.A = net_util.ntop; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 |
parsers.AAAA = net_util.ntop; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
164 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
165 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
166 |
local mx_mt = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
167 |
__tostring = function(rr) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 |
return s_format("%d %s", rr.pref, rr.mx) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
170 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
171 |
function parsers.MX(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
172 |
local name = readDnsName(packet, 3); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
173 |
local b1,b2 = s_byte(packet, 1, 2); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
174 |
return setmetatable({ |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
175 |
pref = b1*256+b2; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
176 |
mx = name; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
177 |
}, mx_mt); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
178 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
179 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
180 |
local srv_mt = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
181 |
__tostring = function(rr) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
182 |
return s_format("%d %d %d %s", rr.priority, rr.weight, rr.port, rr.target); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
183 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
184 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
185 |
function parsers.SRV(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
186 |
local name = readDnsName(packet, 7); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
187 |
local b1, b2, b3, b4, b5, b6 = s_byte(packet, 1, 6); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
188 |
return setmetatable({ |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
189 |
priority = b1*256+b2; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
190 |
weight = b3*256+b4; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
191 |
port = b5*256+b6; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
192 |
target = name; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
193 |
}, srv_mt); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
194 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
195 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
196 |
local txt_mt = { __tostring = t_concat }; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
197 |
function parsers.TXT(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
198 |
local pack_len = #packet; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
199 |
local r, pos, len = {}, 1; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
200 |
repeat |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
201 |
len = s_byte(packet, pos) or 0; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
202 |
t_insert(r, s_sub(packet, pos + 1, pos + len)); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
203 |
pos = pos + len + 1; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
204 |
until pos >= pack_len; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
205 |
return setmetatable(r, txt_mt); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
206 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
207 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
208 |
parsers.SPF = parsers.TXT; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
209 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
210 |
-- Acronyms from RFC 7218 |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
211 |
local tlsa_usages = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
212 |
[0] = "PKIX-CA"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
213 |
[1] = "PKIX-EE"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
214 |
[2] = "DANE-TA"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
215 |
[3] = "DANE-EE"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
216 |
[255] = "PrivCert"; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
217 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
218 |
local tlsa_selectors = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
219 |
[0] = "Cert", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
220 |
[1] = "SPKI", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
221 |
[255] = "PrivSel", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
222 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
223 |
local tlsa_match_types = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
224 |
[0] = "Full", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
225 |
[1] = "SHA2-256", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
226 |
[2] = "SHA2-512", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
227 |
[255] = "PrivMatch", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
228 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
229 |
local tlsa_mt = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
230 |
__tostring = function(rr) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
231 |
return s_format("%s %s %s %s", |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
232 |
tlsa_usages[rr.use] or rr.use, |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
233 |
tlsa_selectors[rr.select] or rr.select, |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
234 |
tlsa_match_types[rr.match] or rr.match, |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
235 |
tohex(rr.data)); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
236 |
end; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
237 |
__index = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
238 |
getUsage = function(rr) return tlsa_usages[rr.use] end; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
239 |
getSelector = function(rr) return tlsa_selectors[rr.select] end; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
240 |
getMatchType = function(rr) return tlsa_match_types[rr.match] end; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
241 |
} |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
242 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
243 |
function parsers.TLSA(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
244 |
local use, select, match = s_byte(packet, 1,3); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
245 |
return setmetatable({ |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
246 |
use = use; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
247 |
select = select; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
248 |
match = match; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
249 |
data = s_sub(packet, 4); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
250 |
}, tlsa_mt); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
251 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
252 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
253 |
local params = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
254 |
TLSA = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
255 |
use = tlsa_usages; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
256 |
select = tlsa_selectors; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
257 |
match = tlsa_match_types; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
258 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
259 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
260 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
261 |
local fallback_mt = { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
262 |
__tostring = function(rr) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
263 |
return s_format([[\# %d %s]], #rr.raw, tohex(rr.raw)); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
264 |
end; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
265 |
}; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
266 |
local function fallback_parser(packet) |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
267 |
return setmetatable({ raw = packet },fallback_mt); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
268 |
end |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
269 |
setmetatable(parsers, { __index = function() return fallback_parser end }); |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
270 |
|
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
271 |
return { |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
272 |
parsers = parsers; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
273 |
classes = classes; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
274 |
types = types; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
275 |
errors = errors; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
276 |
params = params; |
f93dce30089a
util.dns: Library for decoding DNS records
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
277 |
}; |