Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Редактирование данных сетевого пакета.

62K
05 января 2011 года
Dynamic
8 / / 21.10.2010
Необходимо модифицировать сетевой пакет, адресованый некоторой программе. Меотодом перехвата функции recv получаем буфер с данными(char * buf) и размер данных(int len).
Нужно искать некоторую hex последовательность, и при нахождении заменять на свою. После чего передать измененный буфер в реальную функцию recv.
Например ищем: 00 38 00 02 00 22
Надо заменить на: 00 35 55 01 01 00
Помогите пожалуйста с построением оптимального алгоритма поиска в буфере определенной hex строки и ее замены. В конце должны получить указатель на редактированный буфер.
1
05 января 2011 года
kot_
7.3K / / 20.01.2000
что в твоем понимании "оптимальный"?
по каким параметрам? Где твой вариант?
62K
06 января 2011 года
Dynamic
8 / / 21.10.2010
Привет kot_!
Оптимальный - имею ввиду максимально производительный.
На данный момент вот что имеем. Нуждаюсь в помощи с заменой и преобразованием обратно в бинарные данные, которые потом пойдут в функцию recv().
Код:
#include <iostream>

char *StrToHexStr(char *str, int len)
{
char *newstr = new char[(len*2)];
char *cpnew = newstr;
char *cpold = str;

for(int i = 0; i < len; i++){
        sprintf(cpnew, "%02X", (char)(*cpold++));
        cpnew+=2;
}
return newstr;
}

int main(){
    int len = 18;
    char data[30]="binary\0data1234asd";
    char pattern[6+1] = "313233";
    char replaceto[6+1] = "911119";
    char * pFind;
    char * buf = data;
    char * hexstr = StrToHexStr(buf,len);
    std::cout<< "buf in hex - " << hexstr << std::endl;
    pFind = strstr(hexstr,pattern);
    if(pFind)
        std::cout<< "need replace !" << std::endl;
return 0;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог