Я создаю http-пакет с помощью функций сборки libnet и отправляю его libnet_write. Я вижу, что пакет успешно отправлен через wirehark, заголовок tcp и ip - все в порядке. Но клиент не может разобрать мой пакет. Например, клиент не загружает html при отправке пакета «HTTP/1.1 200 OK»; клиент не переходит на сайт перенаправления, когда я отправляю пакет «HTTP/1.1 302 Moved Temporarily». и т. д.Почему клиент не может разобрать http-пакет, созданный и отправленный libnet?
ответ
Вы не указываете код в своем вопросе, и ни один пример пакета, который вы создаете, но HTTP работает через TCP, и вы говорите о написании только одного пакета. Это не сработает. Для установления TCP-соединения необходимо написать пакет SYN, прочитать ответ SYN/ACK и написать окончательный ACK.
Только после этого обмена 3 пакетами может быть отправлен TCP-пакет с данными.
Кроме того, его совсем не ясно, почему вы пытаетесь это сделать. Если вы хотите, чтобы данные были получены HTTP-сервером, вы должны создать и отправить его с помощью обычных API сокетов.
Спасибо за ваш ответ. Моя система развернута в обход шлюза, который может контролировать внутренний трафик, если клиент пытается запросить определенный сайт, я отправлю RST на сервер и переадресацию пакета клиенту. Например, если клиент пытается получить доступ к google.com, мне нужно перенаправить его на facebook.com. Я беру пакет, используя libpcap, создаю и отправляю новый пакет через libnet. Информация о создании пакета получена из последнего пакета запроса HTTP GET клиента. @Sam Roberts – Scott
И теперь я могу прерывать подключение к серверу, однако, используя wirehark, я вижу, что клиент не отправляет новый запрос на новый сайт после получения пакета перенаправления 302. Я чувствую, что браузер клиента не анализирует http-пакет, созданный libnet. @Sam Roberts – Scott
Просто потому, что он отправлен, не означает, что полезная нагрузка не является мусором, не так ли? Возможно, в том числе и то, как вы строите пакет. –
Спасибо за ответ. Полезная нагрузка, то есть http-данные, выглядит следующим образом: «HTTP/1.1 302 временно перемещен \ r \ n" "Местоположение: http: //www.example.com \ r \ n" "Content-Type: text/html \ r \ n " " Content-Length: 0 \ r \ n " " Connection: close \ r \ n " " \ r \ n " Я не знаю, что в этом плохого? @FiddlingBits – Scott