patron | Дата: Понедельник, 31.08.2015, 14:35 | Сообщение # 1 |
Генерал-лейтенант
Группа: Администраторы
Сообщений: 128
Статус: Offline
| IP взаимодействует непосредственно с протоколами канального уровня. Подробное описание - RFC-791. в этой теме рассматриваем возможности IP и методы работы с ним
|
|
| |
patron | Дата: Понедельник, 31.08.2015, 16:08 | Сообщение # 2 |
Генерал-лейтенант
Группа: Администраторы
Сообщений: 128
Статус: 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
Статус: 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;//возврат КС }
|
|
| |