请教一下校验和的问题

请问:如果我在netfilter hook 的 NF_IP_FORWARD修改了将要转发的数据包,具体修改了http中客户端向服务器的请求消息,把消息中cookie:参数的值置为了空字符,我使用tcp_v4_check函数进行重新对tcp进行校验,如下:
tcph->check = tcp_v4_check(tcph, 
tmp->len - (tmp->nh.iph->ihl << 2),
tmp->nh.iph->saddr, tmp->nh.iph->daddr, 
csum_partial((char *)tcph, tmp->len - (tmp->nh.iph->ihl << 2),  
0));
但是修改后的数据包不能被发送出去,请问大侠们,对数据包的data部分进行了修改,需要再进行tcp校验吗,为什么我的数据包发布出去呐?通过抓包工具查看,数据包的中cookie的值仍然存在,不是我修改后的空字符串,怎么处理能使我的修改成功,而且能把修改后的数据包发出去呐?请大侠们帮帮忙,谢谢!

作者: lanmolei814   发布时间: 2011-01-15

数据包修改以后校验和必须重新计算。

作者: jcwKyl   发布时间: 2011-01-15

我只是修改了数据包的data部分,没有修改数据包的长度,没有修改协议头,也需要对校验和进行从新计算吗?如果是,那用什么方法校验呐,怎么判断校验和是否正确呀?

作者: lanmolei814   发布时间: 2011-01-15

TCP校验和是包括数据部分的,所以必须重新计算。
另外,你可以用tcpdump看看你发出去的数据包,如果校验和不对,tcpdump会显示checksum incorrect的,你这样来确信是不是校验和的问题。

校验和计算方法google一下都能找到。我这里就不贴了。

最直接的方法就是用tcpdump看你发送的那些包,直到没有checksum incorrect这样的显示为止。

作者: jcwKyl   发布时间: 2011-01-15