Как мне изменить ответный пакет HTTP с помощью winpcap? - PullRequest
1 голос
/ 10 мая 2010

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

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

UPDATE

Может ли кто-то с реальным опытом разработать соответствующие шаги?

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

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

Ответы [ 4 ]

3 голосов
/ 14 мая 2010

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

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

Если вы хотите отправить еще один ответ - помимо отправленного ответа - я не уверен, чего вы пытаетесь достичь.

1 голос
/ 20 мая 2010

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

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

1 голос
/ 19 мая 2010

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

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

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

...