MENU
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » форум cotaline » протоколы передачи данных » протокол IPv4 (как работать, как получить все данные заголовка)
протокол IPv4
patronДата: Понедельник, 31.08.2015, 14:35 | Сообщение # 1
Генерал-лейтенант
Группа: Администраторы
Сообщений: 128
Репутация: 0
Статус: Offline
IP взаимодействует непосредственно с протоколами канального уровня.
Подробное описание - RFC-791.
в этой теме рассматриваем возможности IP и методы работы с ним
 
patronДата: Понедельник, 31.08.2015, 16:08 | Сообщение # 2
Генерал-лейтенант
Группа: Администраторы
Сообщений: 128
Репутация: 0
Статус: Offline
структура заголовка IP для проектов c++

#define u_short unsigned short
#define u_char unsigned char
#define u_long unsigned long

struct ip{
        struct {
            u_short
                s_ip_hl:4,        //длинна заголовка
                s_ver:4,          //версия протокола
                s_tos:8;          //тип сервиса
            }ip_one;
        u_short ip_len;        //длинна пакета
        u_short ip_Id;         //идентификатор
        u_short frag_off;    //смещение фрагмента
        u_char ttl;              //время жизни
        u_char ip_p;          //протокол
        u_short ip_sum;    //контрольная сумма
        u_long sAddr;         //адрес источника
        u_long dAddr;         //адрес получателя
        u_char ip_opt[40];
};
 
patronДата: Вторник, 01.09.2015, 22:43 | Сообщение # 3
Генерал-лейтенант
Группа: Администраторы
Сообщений: 128
Репутация: 0
Статус: Offline
пример расчета контрольной суммы IP заголовка. контрольная сумма должна быть заранее обнулена.

extern unsigned int  SeeIpCheck(unsigned char* ucPack,unsigned uLen)
{
if(uLen<20)        return 1;

ip             *p_ip=(ip*)ucPack;
unsigned int    hlen;

if(p_ip->ip_ver!=4){
return 1;
}
hlen=p_ip->ip_hl << 2;
if(hlen>uLen){
return 1;
}
register u_int changes;
register u_short *bp = (u_short *) ucPack;
for (changes = 0; hlen > 0; hlen -= 2)
changes += *bp++;
changes = (changes & 0xffff) + (changes >> 16);
changes = (changes & 0xffff) + (changes >> 16);
changes = (~changes)&0xffff;

return changes;//возврат КС
}
 
Форум » форум cotaline » протоколы передачи данных » протокол IPv4 (как работать, как получить все данные заголовка)
  • Страница 1 из 1
  • 1
Поиск: