Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么skb_运输_头计算不正确?_C++_C_Linux Kernel_Netfilter - Fatal编程技术网

C++ 为什么skb_运输_头计算不正确?

C++ 为什么skb_运输_头计算不正确?,c++,c,linux-kernel,netfilter,C++,C,Linux Kernel,Netfilter,我用netfilter钩子编写了一个应用程序 似乎skb_transport_header函数计算不正确(有时但不总是): 我的错在哪里?内核版本是非常重要的信息。在Linux网络内核中,SKB的传输头(和许多其他属性)在最初创建时(由驱动程序创建)没有设置,SKB在移动SKB的数据指针时逐层处理。所以,如果你的钩子较低,也就是在桥牌层,当你访问它时,它可能还没有被设置 内核版本是非常重要的信息。在Linux网络内核中,SKB的transport_头(和许多其他属性)在最初创建时(由驱动程序创建

我用
netfilter钩子
编写了一个应用程序

似乎
skb_transport_header
函数计算不正确(有时但不总是):


我的错在哪里?

内核版本是非常重要的信息。在Linux网络内核中,SKB的传输头(和许多其他属性)在最初创建时(由驱动程序创建)没有设置,SKB在移动SKB的数据指针时逐层处理。所以,如果你的钩子较低,也就是在桥牌层,当你访问它时,它可能还没有被设置

内核版本是非常重要的信息。在Linux网络内核中,SKB的transport_头(和许多其他属性)在最初创建时(由驱动程序创建)没有设置,SKB在移动SKB的数据指针时逐层处理。所以,如果你的钩子较低,也就是在桥牌层,当你访问它时,它可能还没有被设置

您可以在这里查看: 问题是网络层的netfilter实现,当数据包从物理层上升时,您在到达tcp层之前捕获数据包,有些功能未处理。

您可以在此处检查:
问题是netfilter在网络层的实现,当数据包从物理层上升时,您在到达tcp层之前捕获数据包,有些功能没有处理。

您使用什么钩子?你能在操作前检查TCP类型吗?@IlyaMatveychikov:是的,我检查了TCP协议。我建议你通过执行数据包分析来澄清问题,以防这些方法给你不同的结果。换句话说,如果
(struct tcphdr*)skb_transport_header(skb)
!=<代码>(struct tcphdr*)((char*)ip_头+(ip_头->ihl*4))您使用什么钩子?你能在操作前检查TCP类型吗?@IlyaMatveychikov:是的,我检查了TCP协议。我建议你通过执行数据包分析来澄清问题,以防这些方法给你不同的结果。换句话说,如果
(struct tcphdr*)skb_transport_header(skb)
!=<代码>(struct tcphdr*)((char*)ip_头+(ip_头->ihl*4))谢谢您的帮助。。我跑了大约两个小时试图找出为什么我传入的数据不正确!谢谢你。。我跑了大约两个小时试图找出为什么我传入的数据不正确!
struct tcphdr* tcp_header = NULL;
tcp_header = (struct tcphdr*)skb_transport_header(skb); // somtimes incorrect address.
tcp_header = (struct tcphdr*)((char*)ip_header + (ip_header->ihl * 4));// always correct address.