Для пакетов esp, инкапсулированных udp, заголовок udp не принимает длину полезной нагрузки

#python-2.7 #udp #scapy #nat #ipsec

#python-2.7 #udp #scapy #nat #ipsec

Вопрос:

В Scapy, когда я генерирую пакет, инкапсулированный UDP, используя ассоциацию SA, я мог видеть длину UDP как 8. Несмотря на то, что у меня есть пакет esp после заголовка UDP nat.

ЭФИР> IP> UDP (srcport = 4500, dstport = 4500) > ESP

В приведенной выше структуре заголовка я ожидаю, что UDP-заголовок nat должен вычислять длину пакета и добавлять как часть своего поля len. Но я мог видеть только 8, что соответствует длине заголовков UDP.

 >>> p = IP(src='1.1.1.1', dst='2.2.2.2')
>>> p /= UDP(sport=2512, dport=2512)
>>> p /= Raw('testdata')
>>> p
<IP  frag=0 proto=udp src=1.1.1.1 dst=2.2.2.2 |<UDP  sport=2512 dport=2512 |<Raw  load='testdata' |>>>

>>> sa = SecurityAssociation(ESP, spi=0x222,
... crypt_algo='NULL', crypt_key=None,
... auth_algo='NULL', auth_key=None, tunnel_header=IP(proto=1, src="3.3.3.3",dst="4.4.4.4"),
... nat_t_header=UDP(sport=4500, dport=4500))

>>> e = sa.encrypt(p)
>>> e
<IP  version=4 ihl=5 tos=0x0 len=76 id=1 flags= frag=0 ttl=64 proto=udp chksum=0x6c93 src=3.3.3.3 dst=4.4.4.4 |<UDP  sport=ipsec_nat_t dport=ipsec_nat_t len=8 chksum=0x0 |<ESP  spi=0x222 seq=1 data=4500002400010000401174c3010101010202020209d009d00010258c746573746461746101020204 |>>>
>>> sa.decrypt(e)
<IP  version=4 ihl=5 tos=0x0 len=36 id=1 flags= frag=0 ttl=64 proto=udp chksum=0x74c3 src=1.1.1.1 dst=2.2.2.2 |<UDP  sport=2512 dport=2512 len=16 chksum=0x258c |<Raw  load='testdata' |>>>
 

В приведенном выше снимке, пожалуйста, найдите дамп e. Он показывает udp len как 8. И вы можете найти заголовок ESP сразу после этого.
Пожалуйста, дайте мне знать, если я пропустил какое-то действие. Или это ожидаемо.

Спасибо.