| 1164 | |
| 1165 | |
| 1166 | class DNSRR(Packet): |
| 1167 | name = "DNS Resource Record" |
| 1168 | show_indent = 0 |
| 1169 | fields_desc = [DNSStrField("rrname", ""), |
| 1170 | ShortEnumField("type", 1, dnstypes), |
| 1171 | BitField("cacheflush", 0, 1), # mDNS RFC 6762 |
| 1172 | BitEnumField("rclass", 1, 15, dnsclasses), |
| 1173 | IntField("ttl", 0), |
| 1174 | FieldLenField("rdlen", None, length_of="rdata", fmt="H"), |
| 1175 | MultipleTypeField( |
| 1176 | [ |
| 1177 | # A |
| 1178 | (IPField("rdata", "0.0.0.0"), |
| 1179 | lambda pkt: pkt.type == 1), |
| 1180 | # AAAA |
| 1181 | (IP6Field("rdata", "::"), |
| 1182 | lambda pkt: pkt.type == 28), |
| 1183 | # NS, MD, MF, CNAME, PTR, DNAME |
| 1184 | (DNSStrField("rdata", "", |
| 1185 | length_from=lambda pkt: pkt.rdlen), |
| 1186 | lambda pkt: pkt.type in [2, 3, 4, 5, 12, 39]), |
| 1187 | # TEXT |
| 1188 | (DNSTextField("rdata", [""], |
| 1189 | length_from=lambda pkt: pkt.rdlen), |
| 1190 | lambda pkt: pkt.type == 16), |
| 1191 | ], |
| 1192 | StrLenField("rdata", "", |
| 1193 | length_from=lambda pkt:pkt.rdlen) |
| 1194 | )] |
| 1195 | |
| 1196 | def default_payload_class(self, payload): |
| 1197 | return conf.padding_layer |
| 1198 | |
| 1199 | |
| 1200 | def _DNSRR(s, **kwargs): |
no test coverage detected