2015-04-08 1 views
0

Je veux lire les demandes HTTP en utilisant des sockets sur Python. Plus précisément, la ligne de requête, les en-têtes généraux et les en-têtes de demande, basés sur this. Pour ce faire, j'ai besoin de lire le champ de données du segment TCP, mais comment savoir sur quel bit le champ de données commence? Ce serait sur un multiple de 32, mais devrais-je le forcer brutalement (c'est-à-dire en vérifiant si les 32 premiers octets ressemblent à "GET /index.html HTTP/1.1").Sur quel bit le champ de données commence-t-il dans un segment TCP?

+0

Faites-vous cela à des fins éducatives? Si ce n'est pas le cas, envisagez simplement d'utiliser l'une des nombreuses bibliothèques HTTP pour Python (comme le 'urllib' intégré). – nneonneo

+0

Oui, c'est à des fins éducatives. Je veux juste voir si cela peut être fait avec des sockets. – user3044500

Répondre

0

Avec un socket de flux, Python s'occupe de l'encapsulation/décapsulation TCP pour vous. Ainsi, tout ce que vous avez à faire est d'utiliser la fonction socket recv - les premiers octets que vous recevrez seront GET (en supposant une requête HTTP bien formée).

0

La longueur de l'en-tête TCP est variable mais elle est indiquée dans l'en-tête TCP lui-même. Les 4 premiers bits du 13ème octet (bits 96 - 99) sont la représentation binaire du décalage de données ou de la taille de l'en-tête en mots de 32 bits. Par exemple, le décalage de données minimum est de 20 octets, de sorte que le champ de décalage de données dans l'en-tête sera 0101. c'est-à-dire 5 mots de 32 bits = 5 * 4 octets = 20 octets.

consultez le wikipedia page for TCP pour plus d'informations