Как разобрать захваченный пакет из сокета в cpp?

Я использую RAW сокет для захвата пакетов UDP. После захвата хочу разобрать пакет и посмотреть что внутри.

Входные данные, которые я получаю из сокета, представляют собой беззнаковый буфер char * и его длину. Я пытался поместить буфер в строку, но, думаю, я сделал это неправильно, потому что, когда я проверял строку, она была пустой.

Любой совет?

-3

Решение

Я не знаю, что вы хотите проанализировать, но у вас есть буфер и его длина. Таким образом, вы можете делать все, что вы хотите с этой памятью. Ищите арифметику указателей. Если вы хотите создать C-строку из содержимого, просто добавьте ‘\ 0’ в конец блока памяти. Но это предполагает, что никакие другие 0x00 не находятся внутри буфера. Так что, возможно, вы должны это проверить. Как сказал πάντα ῥεῖ.

шаги:

1: получить пакет UDP

2: бросить как:

unsigned char* buffer;
char* cString = (char*) buffer;

3: проверить приведенную cString, если ‘\ 0’ произошло до того, как был достигнут размер буфера. Если это так, то создайте новый указатель char * на байт после ‘\ 0’, но помните о размере буфера. Сохраните указатель в векторе.

Я сделал пример кода, но не проверил, работает ли он!

char* firstPtr = (char*) buffer;
size_t indexer = 0;
std::vector<char*> pointerVec;
pointerVec.push_back(firstPtr);

while(indexer < bufferSize) {

if(*(buffer + indexer) == '\0') {
if(indexer + 1 < bufferSize) {
char* cString = (char*) (buffer + indexer);
pointerVec.push_back(cString);

}
}
} // end while

После этого у вас должны быть сохранены позиции различных строк с указателями внутри вектора. Теперь вы можете обработать их с помощью механизма копирования, который берет каждый указатель C-String и сохраняет его содержимое в одну C-String или String.

Надеюсь, вы искали что-то подобное, потому что ваш вопрос был неясным.

0

Другие решения


По вопросам рекламы [email protected]