отправить HTTP-запрос, используя raw-сокет и WinPcap - PullRequest
1 голос
/ 20 ноября 2010

как часть моего проекта, я пытаюсь отправить IP-пакеты, содержащие HTTP-запросы, в Google.Я использую библиотеку Winpcap и VC ++.В настоящее время у меня есть готовые трехсторонние пакеты TCP, но я застрял при отправке фактического пакета HTTP-запроса после отправки пакета TCP ACK.Когда я перехватываю пакеты с помощью wireshark, этот пакет помечается как «TCP-сегмент повторно собранного PDU».Столбец протокола также «TCP», а не «HTTP».В чем дело?Как бы я отправил HTTP-пакеты таким образом?

Ответы [ 4 ]

2 голосов
/ 20 ноября 2010

Вы не обязательно делаете что-то не так.

По умолчанию Wireshark передает данные TCP в обработчик протокола более высокого уровня - в этом случае, который пытается собрать целые HTTP-запросы и ответы. Он присоединяет повторно собранное сообщение к пакету final в последовательности и помечает другие пакеты как «сегмент TCP повторно собранного PDU»:

alt text

Вы можете отключить эту функцию повторной сборки для проверки отдельных пакетов:

  • Правка -> Настройки -> Протоколы -> TCP
  • Снимите флажок «Разрешить субдисектору повторно собирать потоки TCP»
1 голос
/ 15 сентября 2011

Возможно, вы не заканчиваете запрос с \r\n дважды.

Если вы отправите строку GET / HTTP/1.0\r\n, вы не получите никаких пакетов.

Вы должны отправить эту строку: GET / HTTP/1.0\r\n\r\n.

1 голос
/ 20 ноября 2010

Я настоятельно рекомендую вам изучить основы протокола HTTP, прежде чем пытаться сделать это, если вы планируете расширить его.Возиться с выполнением сырых сокетов и бросать запросы get;Прочитайте некоторый исходный код.

Однако я не вижу смысла в pcap.Вы должны иметь возможность использовать библиотеку Wininet, если вам не нужно кодировать фактический сокет: Wininet lib

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

Если вы пытаетесь перехватить соединение как атаку MITM с помощью программы pcap для отправки HTTP-запроса, я бы, вероятно, изучил некоторые программы на Pcap.Для этого существует множество учебных пособий, таких как this .

PS: Посмотрите учебник по winsocks, поскольку его довольно сложно понять новичкам.Кроме того, winpcap поддерживается не во всех системах, и его установка (в некоторых случаях) может быть затруднена.Честно говоря, для этого было бы лучше использовать winsocks.У Wininet гораздо больше поддержки, и я (не поддерживаю меня в этом) считаю, что все сборки W2K + имеют wininet, поэтому для проблем совместимости (которые я не считаю проблемой для вас) я бы использовал wininetили winsocks.

1 голос
/ 20 ноября 2010

Почему вы используете WinPCap для отправки пакетов?Вместо этого вы должны использовать обычные сокеты.Лучше использовать библиотеку сокетов, которая реализует для вас протокол HTTP, такой как curl, или даже собственные Microsoft WinInet или WinHTTP API.

...