Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Перехват SMPP пакетов


Автор: V1tal1us 26.3.2007, 02:10
Здравствуйте уважаемые.

Задача такова: 
На серверное приложение поступает SMPP пакет (Short message peer-to-peer protocol (SMPP) — протокол, описывающий взаимодействие конечного клиента с SMS-сервером. Используется для передачи SMS и USSD сообщений, как правило в системах VAS.), этот пакет Я должен словит -> изменить -> отправить обратно клиенту пославшему запрос. В качества инструмента Я выбрал «C++Builder 6» , перехватывать пакеты буду с помощью сокетов.

Вступление: 
Как это всё сделать??? ))) Работать с сокетами умею, но одно дело файл переслать или чат простенький сделать, а тут задачка посложнее и поинтереснее. При передаче PDU пакета    («PDU (protocol data units, пакетов данных протокола) передаваемой на уровне 4 OSI (TCP/IP сессии или X.25 SVC3). PDU имеют бинарное представление для повышения эффективности передачи. Обмен пакетами может происходить как синхронно (после отправки запроса дальнейший обмен пакетами приостанавливается до получения ответа), так и асинхронно (запросы отправляются без задержек, обработка ответов происходит по мере их поступления).»)    сервер принимает через String strClientRequest = Socket->ReceiveText(); непонятно что, по спецификации скорее всего это бинарник.
Через TMemoryStream,сохраняю полученный пакет в файл ( в идеале, нужно обойтись без файла, но пока что Я не знаю как),и естественно когда открыть этот файл с помощю блокнота ,то ничего мы там не увидим, кроме как абракадабры)) Но а вот если через хекс редактор, то нарисуется совсем другая картина :
Hex.jpg
Кусок кода,который Я успользую :

Код

void __fastcall TfrmXX::ServerSocketGetClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
    String strClientRequest = Socket->ReceiveText();

    log("Получен запрос!");

    TMemoryStream* MS = new TMemoryStream ();

    MS->Position = 0;
    MS->Write( strClientRequest.c_str() , strClientRequest.Length() );
    MS->SaveToFile( "File.txt" );
    delete MS;

}

Собственно вопрос:
    Как выдрать из данного файла нужную мне информацию(первые 4 октета ), и изменить её, или как обойтись без него и напрямую работать с полученным пакетом? Если кто уже работал с SMPP,то пожалуйста поделитесь своим опытом и знаниями,вам потом воздастся)) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)