验证Linux netfilter挂钩中的UDP校验和

时间:2018-10-26 12:37:40

标签: linux-kernel udp hook checksum netfilter

我正在处理/修改UDP数据报,以便在NF_INET_PRE_ROUTING链的Linux内核版本> 4.x中的netfilter挂钩中进行本地传递。但是,在开始修改此类数据报之前,我想通过检查其校验和来验证其一致性。这样做最有效的方法是什么?

由于我假设IP层已经通过,因此IP报头已经给出一致性,如果我通过以下方式进行验证就足够了:

if(udp4_csum_init(skb,udp_hdr(skb),IPPROTO_UDP)) {
    return NF_DROP;
}
else {
    //start modifying skb
}
  1. udp4_csum_init是否涵盖UDP标头和有效载荷?

  2. 我是对的,因为在ip_rcv中调用了netfilter钩子,所以IP包头已经通过验证了吗?

  3. udp4_csum_initudp_lib_checksum_comblete(skb)udp_v4_check(len,saddr,daddr,base)有什么区别?

  4. 在数据报离开netfilter钩子并被本地UDP堆栈接收后,如何避免在UDP堆栈本身中进行额外的校验和验证。通过设置skb->csum_valid = 1可以做到吗?

BR

0 个答案:

没有答案