- 论坛徽章:
- 0
|
各位大神,我在实现一个修改数据包ip功能的内核模块,使用nf_hook_ops钩子的方式,有两个钩子,一个是在NF_INET_PRE_ROUTING位置,另外一个是在NF_INET_POST_ROUTING位置,NF_INET_POST_ROUTING我搞定了。
但是NF_INET_PRE_ROUTING总是checksum错误。代码如下:
iph = ip_hdr(skb);
tcph = (void*) iph+ iph->ihl * 4;
tot_len = ntohs(iph->tot_len);
if(iph->protocol == IPPOTO_TCP)
{
if( tcph->soource == htons(22210) && iph->saddr == htonl(svr_ip) )
{
iph_len = ip_hdrlen(skb);
iph->daddr = in_aton("10.1.52.220");
tcph->check = 0;
skb->csum = csum_partial((char*)(tcph,tot_len - iph_len,0);
tcph->check = tcp_v4_check(tot_len-iph_len,iph->saddr,ip->daddr,skb->csum);
iph->check = 0;
ip_send_check(iph);
return NF_ACCEPT;
}
}
调试了好久,不知道是哪里的问题,建立连接和断开正常,就是接收数据和ack会失败,请大神们帮忙看看,十分感激!
|
|