linux-kernel - 在 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
}
是否
udp4_csum_init
涵盖 UDP 标头和有效负载?由于调用了 netfilter 钩子,IP 数据包标头已经过验证,我说得对
ip_rcv
吗?udp4_csum_init
和udp_lib_checksum_comblete(skb)
和有什么区别udp_v4_check(len,saddr,daddr,base)
?在数据报离开 netfilter 钩子并被本地 UDP 堆栈接收后,如何避免在 UDP 堆栈本身中进行额外的校验和验证。这可以通过设置
skb->csum_valid = 1
吗?
BR
解决方案
推荐阅读
- command-line - 在我的 git bash 命令行中出现“(master)”。但我现在不做提交。我应该如何关闭它?
- java - Log4j2 和 Airbrake - 如何为记录器设置不同的日志级别?
- python - 调用 Python 对象时超出最大递归深度,用于计算视图
- android - 在重复循环中使用 SoundPool,例如 CountDownTimer
- matlab - MATLAB:两个结构的重排
- lua - 为什么在我的 Lua 代码中自上而下和自下而上的工作方式不同?
- dji-sdk - 使用 Mobile-SDK 调度任务
- python - 有没有办法根据用户输入的数字创建一定数量的新行?
- python - 如何从字母数字字符串中提取有效数字?
- java - 使用 Tomcat 连接池在 JDBC 中取消长时间运行的查询