|
Изменение данных пакета и пересчет контрольной суммы
|
|||
---|---|---|---|
#18+
Всем привет. Пишу модуль для ядра 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 = 0; udp->check = csum((uint16_t*) udp, (iLenData+sizeof(struct udphdr))); ip->check = 0; ip->check = csum((uint16_t*) ip, (ip->ihl << 1)); Если ничего не трогать, то пакет отправляется в сеть, но я хочу его модифицировать. Пакет отправится, если я поставлю контрольную сумму в udp в 0. Еще вопросик: Как добавить свои данные к эти данным? Нужно ли менять tot_len и len в заголовках? Спасибо за ответы! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 14:13 |
|
|
start [/forum/topic.php?fid=25&fpage=4&tid=1481022]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
1080ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
others: | 250ms |
total: | 1404ms |
0 / 0 |