请教一下校验和的问题
请问:如果我在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的值仍然存在,不是我修改后的空字符串,怎么处理能使我的修改成功,而且能把修改后的数据包发出去呐?请大侠们帮帮忙,谢谢!
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这样的显示为止。
另外,你可以用tcpdump看看你发出去的数据包,如果校验和不对,tcpdump会显示checksum incorrect的,你这样来确信是不是校验和的问题。
校验和计算方法google一下都能找到。我这里就不贴了。
最直接的方法就是用tcpdump看你发送的那些包,直到没有checksum incorrect这样的显示为止。
作者: jcwKyl 发布时间: 2011-01-15