Я хочу написать python скрипт с использованием scapy, который извлекает длину TLS-записи TLS-пакетов из файла pcap. Для этого я использовал то, что было упомянуто в этих двух вопросах
Чтобы написать следующий скрипт
from scapy.all import *
def printlen(pkt):
hasraw=0
if pkt.haslayer(Raw):
hasraw=1
extra_tls_layers = TLS(pkt[TLS].load)
i=0
while True:
try:
print(pkt[TLS][i].deciphered_len)
i+=1
except AttributeError:
i+=1
continue
except IndexError:
break
i=0
while True and hasraw:
try:
print(extra_tls_layers[i].len)
i+=1
except AttributeError:
i+=1
continue
except IndexError:
break
pcapfile = "/home/ala-jeb/Videos/SH/traffic/facebook.com.pcap"
load_layer("tls")
try:
reader = PcapReader(pcapfile)
# tls frame accumulation related variables.
tls_accumulate = False
tls_leftover_len = 0
tls_blist = list()
for pkt in reader:
try:
if tls_accumulate and pkt.haslayer(TCP):
ip_tcp_hdr_overhead = ((pkt[IP].ihl*4) + (pkt[TCP].dataofs*4))
pkt_payload_len = (pkt[IP].len - ip_tcp_hdr_overhead)
tls_leftover_len = (tls_leftover_len - pkt_payload_len)
tls_blist.append(raw(pkt[TCP].payload))
if tls_leftover_len <= 0:
# got complete TLS frame
tls_raw_bytes = b''.join(tls_blist)
# parse accumulated frame.
tls = TLS(tls_raw_bytes)
printlen(tls)
# reset accumlation variables.
tls_accumulate = False
tls_leftover_len = 0
tls_blist = list()
else:
continue
if pkt.haslayer(TCP) and pkt.haslayer(TLS):
if not tls_accumulate:
# Process new TLS frame.
# Pkt over head: ip-hdr-len + tcp-hdr-len
ip_tcp_hdr_overhead = ((pkt[IP].ihl*4) + (pkt[TCP].dataofs*4))
pkt_payload_len = (pkt[IP].len - ip_tcp_hdr_overhead)
if pkt[TLS].len > pkt_payload_len:
# partial TLS frame. Start accumulating.
tls_accumulate = True
tls_leftover_len = (pkt[TLS].len - pkt_payload_len)
tls_blist.append(raw(pkt[TCP].payload))
else:
# complete TLS frame
# ... process complete TLS Frame
printlen(pkt)
except Exception as error:
pkt.show()
print("tcp-processing error: %s", error)
sys.exit(-1)
except Exception as error:
print("packet processing error: %s", error)
sys.exit(-1)
Вот файл pcap, который я использовал https://drive.google.com/file/d/1MvaDKUiba2HLIiYHt_SIekB6FlWQkIv2/view?usp=sharing
Полученный результат - 512 122 1 1017 1517 1 53 166 69
Но ожидаемый результат -
512 122 1 1017 1517 466 1 53 166 69
Может кто-нибудь сказать мне, что я сделал не так