diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py index 164712544c82d5ba44c1248ce86b5e493711d86c..8a82dc7a2eb4d22fab17b8dcccb2eecf5ea3d5da 100644 --- a/scapy/layers/inet.py +++ b/scapy/layers/inet.py @@ -517,6 +517,9 @@ class UDP(Packet): p = p[:6]+struct.pack("!H", ck)+p[8:] elif isinstance(self.underlayer, scapy.layers.inet6.IPv6) or isinstance(self.underlayer, scapy.layers.inet6._IPv6ExtHdr): ck = scapy.layers.inet6.in6_chksum(socket.IPPROTO_UDP, self.underlayer, p) + # According to RFC2460 if the result checksum is 0, it should be set to 0xFFFF + if ck == 0: + ck = 0xFFFF p = p[:6]+struct.pack("!H", ck)+p[8:] else: warning("No IP underlayer to compute checksum. Leaving null.")