struct tcphdr *tcph = (struct tcphdr *)(skb_network_header((skb)) + ip_hdrlen((skb)));
struct iphdr *iph = (struct iphdr *)skb_network_header(skb);
printk(KERN_ALERT "INFO: CHECKSUM TCP old: %u.\n",tcph->check);
datalen = skb->len - (iph->ihl << 2);
tcph->check = 0;printk(KERN_ALERT "INFO: CHECKSUM TCP=0: %u.\n",tcph->check);
tcph->check = csum_tcpudp_magic(iph->saddr, iph->daddr, datalen, IPPROTO_TCP, csum_partial((unsigned char *)tcph,datalen,0));
printk(KERN_ALERT "INFO: CHECKSUM TCP new: %u.\n",tcph->check);
Есть пример, но на выдаче неверная сумма. Не могу понять, как правильно считать чексумму.
Суть данного кода в том, что он просто считает заново хэш исходящего пакета.
skb->ip_summed = CHECKSUM_UNNECESSARY; - добавил после расчета суммы, сумма отличная от старой, но пакеты идут..
Правильно ли я понимаю, что skb->ip_summed = CHECKSUM_UNNECESSARY; - позволяет не обращать внимания на чексумму?
Ответ на:
комментарий
от i-rinat
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум RAW socket - sending TCP-packet (2007)
- Форум bad tcp cksum (2006)
- Форум Переслать полученный пакет (2012)
- Форум sk_buff Данные из пакета (2013)
- Форум пользовательские данные,sk_buff (2013)
- Форум Изменение данных пакета и пересчет контрольной суммы (2020)
- Форум [СИ] Где расположены данные сокета? (2010)
- Форум RAW SOCKET (2002)
- Форум отправка skb на loopback-интерфейс (dev_queue_xmit) в .ko (2013)
- Форум nfqueue вытащить данные пакете (2012)