Как разобрать / проверить HTTP-сообщение в PCapPlusPlus? - PullRequest
0 голосов
/ 04 августа 2020

В 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, не подходят).

...