@@ -755,6 +755,12 @@ def post_build(self, p, pay):
755755 elif conf .ipv6_enabled and isinstance (self .underlayer , scapy .layers .inet6 .IPv6 ) or isinstance (self .underlayer , scapy .layers .inet6 ._IPv6ExtHdr ): # noqa: E501
756756 ck = scapy .layers .inet6 .in6_chksum (socket .IPPROTO_TCP , self .underlayer , p ) # noqa: E501
757757 p = p [:16 ] + struct .pack ("!H" , ck ) + p [18 :]
758+ elif self .underlayer .name == "AH" and isinstance (self .underlayer .underlayer , IP ):
759+ ck = in4_chksum (socket .IPPROTO_TCP , self .underlayer .underlayer , p )
760+ p = p [:16 ] + struct .pack ("!H" , ck ) + p [18 :]
761+ elif self .underlayer .name == "AH" and (conf .ipv6_enabled and isinstance (self .underlayer .underlayer , scapy .layers .inet6 .IPv6 ) or isinstance (self .underlayer .underlayer , scapy .layers .inet6 ._IPv6ExtHdr )): # noqa: E501
762+ ck = scapy .layers .inet6 .in6_chksum (socket .IPPROTO_TCP , self .underlayer .underlayer , p ) # noqa: E501
763+ p = p [:16 ] + struct .pack ("!H" , ck ) + p [18 :]
758764 else :
759765 log_runtime .info (
760766 "No IP underlayer to compute checksum. Leaving null."
@@ -833,6 +839,18 @@ def post_build(self, p, pay):
833839 if ck == 0 :
834840 ck = 0xFFFF
835841 p = p [:6 ] + struct .pack ("!H" , ck ) + p [8 :]
842+ elif self .underlayer .name == "AH" and isinstance (self .underlayer .underlayer , IP ):
843+ ck = in4_chksum (socket .IPPROTO_UDP , self .underlayer .underlayer , p )
844+ # According to RFC768 if the result checksum is 0, it should be set to 0xFFFF # noqa: E501
845+ if ck == 0 :
846+ ck = 0xFFFF
847+ p = p [:6 ] + struct .pack ("!H" , ck ) + p [8 :]
848+ elif self .underlayer .name == "AH" and (isinstance (self .underlayer .underlayer , scapy .layers .inet6 .IPv6 ) or isinstance (self .underlayer .underlayer , scapy .layers .inet6 ._IPv6ExtHdr )): # noqa: E501
849+ ck = scapy .layers .inet6 .in6_chksum (socket .IPPROTO_UDP , self .underlayer .underlayer , p ) # noqa: E501
850+ # According to RFC2460 if the result checksum is 0, it should be set to 0xFFFF # noqa: E501
851+ if ck == 0 :
852+ ck = 0xFFFF
853+ p = p [:6 ] + struct .pack ("!H" , ck ) + p [8 :]
836854 else :
837855 log_runtime .info (
838856 "No IP underlayer to compute checksum. Leaving null."
0 commit comments