c - netinet/tcp.h 中的有效负载偏移值?

标签 c tcp network-protocols pcap libpcap

我已经尝试了一段时间从 TCP 数据包 header 获取偏移值,并不断获取值 0。这是我的代码所基于的 header 文件的链接:

http://unix.superglobalmegacorp.com/BSD4.4/newsrc/netinet/tcp.h.html

我正在使用 tcpHdr->th_off 并收到一个值 0。我知道该值是 4 位长,所以上面的行可能不是我想要的。对于标志,我使用 th_flags 值,然后使用我正在寻找的已定义标志执行按位操作,但我没有找到使用有效负载偏移值执行此操作的方法。如何获取负载偏移值?

编辑:

这是我对 tcpHdr 指针的初始化:

packetSt += ipHdr->ip_hl*4; // Moves IP header pointer to the TCP header location.
tcpHdr = (struct tcphdr*) packetSt; // My TCP header pointer.

这是我用来获取 TCP 偏移值的行:

tcpHeader->th_off;

我实际上在刚刚修复的代码中发现了一个错误。内容如下:

曾经

tcpHdr = (struct tcphdr*) (packetSt + sizeof(ipHdr));

更改为

tcpHdr = (struct tcphdr*) packetSt;

因为我已经将 packetSt 移到了 ipHrd->th_hl 前面。我会尝试这个,但仍然希望有人告诉我这是否正确。

最佳答案

我建议使用 this version of the TCP header相反,并使用 TH_OFF(tcpHdr) 获取偏移量(从结构末尾删除 UNALIGNED - 这是 tcpdumpism)。这不太依赖于 1) C 编译器处理位域的方式和 2) BYTE_ORDER 是否设置正确。

关于c - netinet/tcp.h 中的有效负载偏移值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26690892/

相关文章:

java - GC 会在 Android 上自动处理/释放在 jni 中分配的内存吗?

http - 通过 IP 限制对站点的访问

javascript - NodeJS 缓冲不完整的 TCP 流数据

c - 如何在C中调试tcp套接字连接?

network-programming - 网络表 C++

windows - 如何在 Windows 下使用 Perl 发送原始 IP 数据包?

c - QR算法实现3x3定点

c - Atmega168 I2C 作为主机

C语言关于输入输出的printf函数的类型完全相同,但是为什么我看不到输出?