Comment modifier un paquet de réponse HTTP avec winpcap?

Ici, nous avons deux problèmes:

  1. Et si le contenu est encodé: gzip …
  2. Dois-je également modifier la partie en-tête pour rendre le paquet HTTP valide (sums de contrôle éventuelles?)

METTRE À JOUR

Une personne ayant une expérience réelle peut-elle préciser les étapes à suivre?

J’utilise winpcap , bpf tcp and src port 80 de tcp and src port 80 pour filtrer le trafic. Mon travail consiste donc à appeler cette fonction:

 void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) 

    WinPcap ne vous permet pas de changer un paquet déjà envoyé.

    Si le paquet a été envoyé, WinPcap ne l’empêchera pas d’atteindre sa destination.

    Si vous souhaitez envoyer une autre réponse – en plus de la réponse qui a été envoyée – je ne suis pas sûr de ce que vous essayez d’atteindre.

    1. Décompressez-le avec un décompresseur GZIP.
    2. Supprimez l’en Content-Encoding tête Content-Encoding et ajoutez un en Content-Length tête Content-Length représentant la nouvelle longueur en octets.

    Cela dit, pour une meilleure réponse, vous devrez fournir plus de contexte à la question. Ceci est à savoir une odeur. Qu’est-ce que vous essayez d’atteindre et pour lequel vous pensez que la modification de la réponse HTTP est la bonne solution?

    libpcap est utilisé pour la capture. Si vous souhaitez modifier et injecter des paquets réseau, vous avez besoin d’une autre bibliothèque, telle que libnet .

    winpcap est un moyen étrange d’essayer de modifier un stream TCP – vous n’expliquez pas pourquoi vous essayez de le faire, mais vous devriez probablement pouvoir y parvenir en écrivant votre propre proxy HTTP. De cette façon, vous êtes présenté avec un stream de données direct que vous pouvez intercepter, enregistrer et modifier à votre guise. Une fois que vous avez fait cela, supprimez Accept-Encoding des en-têtes de requête , vous n’aurez plus besoin de gérer les réponses gzippées.

    Il n’y a pas de sums de contrôle HTTP, mais les couches inférieures ont des sums de contrôle; en opérant au niveau de l’application en tant que serveur proxy, vous laissez la stack de réseaux gérer tout cela pour vous.