diff --git a/scapy/layers/dns.py b/scapy/layers/dns.py index 21e8bb79045..3177ee38186 100644 --- a/scapy/layers/dns.py +++ b/scapy/layers/dns.py @@ -546,7 +546,7 @@ class ClientSubnetv4(StrLenField): def getfield(self, pkt, s): # type: (Packet, bytes) -> Tuple[bytes, I] - sz = operator.floordiv(self.length_from(pkt), 8) + sz = operator.floordiv(self.length_from(pkt) + 7, 8) sz = min(sz, operator.floordiv(self.af_length, 8)) return s[sz:], self.m2i(pkt, s[:sz]) diff --git a/test/scapy/layers/dns.uts b/test/scapy/layers/dns.uts index 6496d6e4a82..d0beb222edf 100644 --- a/test/scapy/layers/dns.uts +++ b/test/scapy/layers/dns.uts @@ -516,3 +516,7 @@ assert p == eval(p.command()) pkt = DNSQR(qname=["domain1.com", "domain2.com"], qtype="A") for i in pkt: assert i.qname in [b"domain1.com.", b"domain2.com."] + +b = b'\x00\x08\x00\x0c\x00\x02=\x00+\xaf\xa3\xc4\xed\xeeW\xb8' +p = EDNS0ClientSubnet(b) +assert p.source_plen == 61 and p.address == '2baf:a3c4:edee:57b8::'