Как изменить пакет ответов HTTP с помощью winpcap?

Здесь есть две проблемы:

  1. Что делать, если содержимое закодировано: gzip …
  2. Мне также нужно изменить часть заголовка, чтобы сделать HTTP-пакет действительным (контрольные суммы, если они есть?)

ОБНОВИТЬ

Может ли кто-то с фактическим опытом разработать шаги?

Я использую winpcap и bpf tcp and src port 80 для фильтрации трафика, поэтому моя работа заключается в этой функции обратного вызова:

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

    WinPcap не позволяет вам изменять пакет, который уже был отправлен.

    Если пакет был отправлен, WinPcap не помешает ему добраться до места назначения.

    Если вы хотите отправить другой ответ – в дополнение к ответу, который был отправлен, я не уверен, чего вы пытаетесь достичь.

    1. Декомпрессируйте его с помощью декомпрессора GZIP.
    2. Удалите заголовок Content-Encoding и добавьте заголовок Content-Length представляющий новую длину в байтах.

    Тем не менее, для лучшего ответа вам нужно будет предоставить больше контекста в вопросе. Это запах. Чего вы пытаетесь достичь и для которого вы считаете, что изменение ответа HTTP является правильным решением?

    libpcap используется для захвата. Если вы хотите выполнить модификацию и libnet сетевых пакетов, вам понадобится другая библиотека, такая как libnet .

    winpcap – это странный способ попробовать изменить stream TCP – вы не объясняете, почему вы пытаетесь это сделать, но вы, вероятно, сможете достичь этого, написав вместо этого свой собственный HTTP-прокси. Таким образом, вам предоставляется прямой stream данных, который вы можете перехватить, зарегистрировать и изменить до вашего сердца. Как только вы это сделаете, выньте Accept-Encoding из заголовков запросов , тогда вам никогда не придется иметь дело с gzipped-ответами в первую очередь.

    Нет контрольных сумм HTTP, но нижние уровни имеют контрольные суммы; работая на уровне приложений в качестве прокси-сервера, вы позволяете сетевому стеку справляться со всем этим для вас.