我写一个使用Netfilter的钩子来修改某些TCP报头信息,并且显然是一个内核模块,发送前,我要重新计算校验和。
我也在接收端编辑标题,所以我需要在那里重新计算它。如何计算TCP校验
网上搜索,我发现有些人说我可以简单地将其设置为0,它会计算对我来说,显然没有奏效。
我还发现这个功能
tcp_v4_send_check(struct sock *sk, struct sk_buff *skb);
虽然没有人解释这是怎么使用的,以及是否我可以在接收/实际使用它发送相同的方式。
我自己尝试是校验设置为0,则调用该函数传递SKB我已经和是skb-> SK我有,仍然一无所获。
那么请问,什么是直接计算TCP数据报校验和的方法?
你究竟什么设置为0,你在哪里期望找到校验?查看代码,你应该设置tcp_hdr(skb) - > check为0,然后调用该函数,之后新的校验和应该在那里。 – BjoernD 2012-07-10 09:16:59
,这正是我所做的,但是当我加载模块时,所有的TCP连接都不起作用。 – Fingolfin 2012-07-10 10:25:04
您应该在问题中添加“C”标签。顺便说一句,看看http://www.winpcap.org/pipermail/winpcap-users/2007-July/001984.html – Jite 2012-07-10 10:27:47