Всем привет. Пишу модуль для ядра Linux.
Перехватываю пакет через хук, меняю данные и хочу отправить в сеть. Проблема в том, что после изменения данных и пересчета контрольной суммы - пакет не отправляется. Помогите, пожалуйста. разобраться.
Код:


Получаю адрес начала данных:


user_data_ptr = (char *)(skb->data + sizeof(struct iphdr) + sizeof(struct udphdr));


Вычисляю длину данных:


unsigned long iLenData = skb->len - (sizeof(struct iphdr) + sizeof(struct udphdr));


Модифицирую данные, например так:


user_data_ptr[iLenData-2] = ‘k’;


Пересчитываю контрольные суммы:


udp->check = csum((uint16_t*) udp, (iLenData+sizeof(struct udphdr)));


ip->check = csum((uint16_t*) ip, (ip->ihl << 1));


Если ничего не трогать, то пакет отправляется в сеть, но я хочу его модифицировать.


Спасибо за ответы!









 , ,






URL записи