Я написал программу Python3 для прослушивания пакетов. Мне удалось unpack
и декодировать почти каждое поле, но я не мог понять, как декодировать данные пакета.
Я использую библиотеки socket
и struct
для прослушивания и декодирования пакетов, и это сегмент моего кода, который анализирует TCP-пакет:
if protocol == 6:
t = iph_length + eth_length
tcp_header = packet[t:t+20]
tcph = unpack('!HHLLBBHHH', tcp_header)
source_port = tcph[0]
dest_port = tcph[1]
sequence = tcph[2]
acknowledgement = tcph[3]
doff_reserved = tcph[4]
tcph_length = doff_reserved >> 4
print('Src Port: ' + str(source_port) + ' Dest Port: ' + str(dest_port) + ' Sequence Number: ' + str(sequence) + ' Acknowledgement: ' + str(acknowledgement) + ' TCP header length: ' + str(tcph_length))
h_size = eth_length + iph_length + tcph_length * 4
data_size = len(packet) - h_size
#get data from the packet
data = packet[h_size:] #example data = b"\x14\x03\x03\x00\x01\x01\x16\x03\x03\x00(K\xa0sq\xd8\x1em\xd1\xec\xde\xab\x99U\xb3po\x8aN\xc3\x13\xf2*\x97\xd6\xd1\x0e\x1f\xc9\xa5\xac'4\x8e1\xb6\x98\xbf;\x9b\x9a"
print('Data : ' + str(data))
Я использовал str(data)
, чтобы избежать ошибок (пока), но хочу его правильно декодировать.