В PCap ++ я хочу определить, является ли полезная нагрузка HTTP-запросом или нет. Для этого я пытаюсь проанализировать строку и ожидаю, что библиотека позволит мне проверить, было ли это сделано успешно.
К сожалению, мне не удалось этого добиться:
- I может создать RawPacket с сообщением
- Я могу создать пакет с сообщением, но он не содержит HttpRequestLayer, следовательно, синтаксический анализ бесполезен для определения действительности сообщения.
- Я не могу создать HttpRequestLayer непосредственно из сообщения.
Некоторые примеры:
std::string msg= "GET /index.html HTTP/1.1\nHost: example.com\n\n";
// Try to get a RawPacket: works, but does not helps a lot
struct timeval tp; // requires <time.h>
gettimeofday(&tp, nullptr);
RawPacket rp(static_cast<const uint8_t*>(msg.data()), static_cast<int>(msg.size()), tp, false);
// Trying to parse it: works but detect generic Newtork layer only, no HTTP
Packet p(&rp, false, HTTP);
// Trying to create an HttpRequestLayer directly: crash
HttpRequestLayer http(static_cast<const uint8_t*>(msg.data()), static_cast<int>(msg.size()), nullptr, nullptr);
Мой вопрос:
Как определить, что сообщение является допустимым HTTP-сообщением с помощью PCap ++?
Примечание. Я ищу эффективное решение (очень неоптимальные решения, такие как создание слоев TCP, не подходят).