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


Автор: Faraon2x 10.11.2009, 21:16
Всем привет.
Кто подскажет, как я могу перехватить трафик RTP.
Я откинул заголовки Ethernet, IP, UDP. Дальше идет RTP, вот здесь то я и застрял.

Структура заголовка следующая:
Код

//Структура RTP
typedef struct RTPHeader{
    unsigned int version:2;    //версия протокола
    unsigned int p:1;              //флаг дополнения пустыми байтами в конце пакета
    unsigned int x:1;              //флаг использования расширенного заголовка
    unsigned int cc:4;             //число csrc полей
    unsigned int m:1;             //маркер
    unsigned int pt:7;            //тип данных
    unsigned short seq;         //порядковый номер
    unsigned int ts;                //временная метка
    unsigned int ssrc;             //id источника
    vector<unsigned int> csrc; //id промежуточных узлов 0..15
    BYTE data[MAX_PACKET_SIZE];  //данные
} RTPHeader; 


Накладываю маску на поле данных UDP
Код

RTPHeader* RTPhdr = (RTPHeader *)UDPhdr->data;       //наложение маски RTP для проверки


Правильная ли следующая запись?
Я правильно думаю, что таким образом первые 2 бита в поле данных = 10?
Код

if (RTPhdr->version==2){}


Автор: jonie 10.11.2009, 21:50
Цитата

Код

    vector<unsigned int> csrc; //id промежуточных узлов 0..15

НЕ ВЕРЮ! не может быть чтобы так было в спецификации, такую жескую привязку протокола к языку никто не позволит себе.
кроме того, вероятно у вас #pragma pack(1) понадобится...

Автор: Faraon2x 10.11.2009, 22:16
Код

 vector<unsigned int> csrc; //id промежуточных узлов 0..15

Я до этого еще не дошел, подозреваю, что не правильно. Но компилятор ошибок не выдает.
В принципе для меня не так важно это поле => добавлю его в поле данных.

Я не могу отфильтровать RTP из трафика. Вот, что мне нужно

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