Bonsoir,
Je code actuellement un proxy local afin de récupérer les requêtes envoyées par ma machine et les réponses reçues, mon problèmes est que j'aimerais pouvoir lire les données reçues mais que ces dernières sont généralement compressées avant d'être envoyées.
Après quelques recherches, j'ai cru comprendre que l'algo de compression le plus utilisé pour ce genre de chose est gzip ou deflate, d'ailleurs, ces algo sont-ils identiques ? La réponse varie selon les sites ou on regarde..
J'ai alors essayé d'utiliser gunzip sur les corps de réponses, sans succes, de même avec la fonction uncompress de la librairie zlib qui me retourne un résultat incohérent.
Voila le code:
Outre ce problème de décompression, le programme fonctionne, du moins avec HTTP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 /* dest représente la socket qui relie ce programme a mon navigateur, src la socket qui relie ce programme à l'hôte distant*/ int getencodedmsg(int dest, int src){ printf("Appel de getencodedmsg\n"); int i, data = 0; int taille = 1024; int lu, total = 0; char tmp[taille]; char *header_end = "\r\n\r\n"; char *begin; char file[24]; sprintf(file, "test_%d.gz", getpid()); int fd = open(file, O_WRONLY | O_TRUNC | O_CREAT, 0700); while((lu = read(src, tmp, taille-1)) > 0){ write(dest, tmp, lu); total += lu; //Si le buffer ne contient plus de header if(data == 1){ write(fd, tmp, lu); } //Si le buffer contient des headers et une partie du corps du message if((begin = memmem(tmp, lu, header_end, strlen(header_end))) != NULL){ begin += strlen(header_end); write(fd, begin, lu - (begin - tmp)); data = 1; } memset(tmp, 0, taille); } //Nécessaire ? write(fd,"\0", 1); close(fd); return total; // Nombre de bytes écrits dans msg }
Voila l'erreur que me sort gunzip:
Il arrive que la décompression fonctionne et m'affiche:gzip: test_3156.gz: not in gzip format
Mais je ne sais pas pourquoi ca marche dans ces cas la et pas dans les autresgzip: test_3594.gz: decompression OK, trailing garbage ignored
Si qqun peut m'eclairer..
Partager