Декодировать пакетные данные в Python3 - PullRequest
0 голосов
/ 10 июля 2020

Я написал программу 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), чтобы избежать ошибок (пока), но хочу его правильно декодировать.

...