diff --git a/scapy/layers/ntp.py b/scapy/layers/ntp.py index eb84c4d6d16..21da95c88ef 100644 --- a/scapy/layers/ntp.py +++ b/scapy/layers/ntp.py @@ -452,10 +452,10 @@ def guess_payload_class(self, payload): """ plen = len(payload) - if plen > _NTP_AUTH_MD5_TAIL_SIZE: - return NTPExtensions - elif plen == _NTP_AUTH_MD5_TAIL_SIZE: + if plen - 4 in [16, 20, 32, 64]: # length of MD5, SHA1, SHA256, SHA512 return NTPAuthenticator + elif plen > _NTP_AUTH_MD5_TAIL_SIZE: + return NTPExtensions return Packet.guess_payload_class(self, payload) diff --git a/test/regression.uts b/test/regression.uts index 4e45d5c34fe..20e8e7c1599 100644 --- a/test/regression.uts +++ b/test/regression.uts @@ -9579,6 +9579,12 @@ assert(p.version == 4) assert(p.mode == 3) assert(p.stratum == 2) += NTPAuthenticator + +s = hex_bytes("000c2962f268d094666d23750800450000640db640004011a519c0a80364c0a80305a51e007b0050731a2300072000000000000000000000000000000000000000000000000000000000000000000000000052c7bc1dda64b97d0000000bcdc3825dbf6b7ad02886ff45aa8b2eaf7ac78bc1") +p = Ether(s) +assert NTPAuthenticator in p and p[NTPAuthenticator].key_id == 3452142173 + ############ ############