2016-04-18 2 views
1

Je travaille avec un protocole TCP transmettant un paquet d'un expéditeur à un destinataire. Je dois pouvoir séparer l'en-tête du contenu, qui remplit mon "paquet".Quel est le moyen le plus rapide de couper les 20 premiers octets d'une chaîne d'octets en Python?

Mon-tête est emballé comme si

tcp_header = pack('!HHLLBBH', tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, 
          tcp_window) + pack('H', tcp_check) + pack('!H', tcp_urg_ptr) 

Ensuite, mon paquet est construit comme celui-ci

packet = tcp_header + user_data 

Je déballer comme ça

(tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags,\ 
      tcp_window, tcp_check, tcp_urg_ptr) = unpack('!HHLLBBHHH', sent_packet) 

Mais il ne fonctionne que si j'envoie l'en-tête seul. Comment puis-je séparer le contenu de l'en-tête avant de le déballer?

Merci

Répondre

2

La fonction que vous recherchez struct.unpack_from,

struct.unpack_from('!HHLLBBHHH', sent_packet) 
+1

Merci !. Cela combiné avec struct.calcsize m'a mis sur la bonne voie. –