首页 > 解决方案 > 在 Linux netfilter 挂钩中验证 UDP 校验和

问题描述

我正在处理/修改 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. 由于调用了 netfilter 钩子,IP 数据包标头已经过验证,我说得对ip_rcv吗?

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

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

BR

标签: linux-kerneludphookchecksumnetfilter

解决方案


推荐阅读