| 179 | |
| 180 | |
| 181 | class NBNSQueryResponse(Packet): |
| 182 | name = "NBNS query response" |
| 183 | fields_desc = [NetBIOSNameField("RR_NAME", "windows"), |
| 184 | ShortEnumField("SUFFIX", 0x4141, _NETBIOS_SUFFIXES), |
| 185 | ByteField("NULL", 0), |
| 186 | ShortEnumField("QUESTION_TYPE", 0x20, _NETBIOS_QRTYPES), |
| 187 | ShortEnumField("QUESTION_CLASS", 1, _NETBIOS_QRCLASS), |
| 188 | IntField("TTL", 0x493e0), |
| 189 | FieldLenField("RDLENGTH", None, length_of="ADDR_ENTRY"), |
| 190 | PacketListField("ADDR_ENTRY", |
| 191 | [NBNS_ADD_ENTRY()], NBNS_ADD_ENTRY, |
| 192 | length_from=lambda pkt: pkt.RDLENGTH) |
| 193 | ] |
| 194 | |
| 195 | def mysummary(self): |
| 196 | if not self.ADDR_ENTRY or \ |
| 197 | not isinstance(self.ADDR_ENTRY[0], NBNS_ADD_ENTRY): |
| 198 | return "NBNSQueryResponse" |
| 199 | return "NBNSQueryResponse '\\\\%s' is at %s" % ( |
| 200 | self.RR_NAME.decode(errors="backslashreplace"), |
| 201 | self.ADDR_ENTRY[0].NB_ADDRESS |
| 202 | ) |
| 203 | |
| 204 | def answers(self, other): |
| 205 | return ( |
| 206 | isinstance(other, NBNSQueryRequest) and |
| 207 | other.QUESTION_NAME == self.RR_NAME |
| 208 | ) |
| 209 | |
| 210 | |
| 211 | bind_layers(NBNSHeader, NBNSQueryResponse, # RD+AA |
no test coverage detected
searching dependent graphs…