diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py index 00f78e3079b6c1711ce6e6767f89f817c9bac715..5309ff511d2ed6bfddc685fa5003d2d09c292db0 100644 --- a/scapy/layers/inet.py +++ b/scapy/layers/inet.py @@ -557,7 +557,10 @@ class UDP(Packet): inet_aton(self.underlayer.dst), self.underlayer.proto, ln) - ck=checksum(psdhdr+p) + ck = checksum(psdhdr+p) + # According to RFC768 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:] 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)