c++ - 为什么skb_transport_header计算不正确?

标签 c++ c linux-kernel netfilter

我使用netfilter hooks编写了一个应用程序。

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

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.

我哪里错了?

最佳答案

您可以在这里查看: http://www.roman10.net/how-to-filter-network-packets-using-netfilterpart-2-implement-the-hook-function/ 问题是netfilter在网络层实现,当数据包从物理层向上时,您在数据包到达tcp层之前捕获数据包,某些功能无法处理。

关于c++ - 为什么skb_transport_header计算不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162556/

相关文章:

c++ - 如何通过 Windows API 关闭电脑?

c++ - UNICODE_STRING 到 wchar_t* null 终止

c - 在 while 循环中合并 fgetc 和 putchar

c - 使用 ptrace 从结构中检索信息

linux - cdev_add 和 device_create 函数之间的区别?

C++:整数数组[a][b][c] = {0};没有将所有值都设置为 0。该指令是错误的还是我的输出函数有问题?

c++ - 在 C++ 中制作基于文本的 RPG 游戏/模板的问题

linux - 静态插入linux内核模块

c++ - 在 C\C++ 中使用 XML 创建 GUI

linux - 使用 Linux 审计系统追踪 Web shell 攻击