You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下基于libpcap获取TCP包信息:tcphdr结构体适配疑问

Linux struct tcphdr 与 macOS struct tcphdr 字段映射说明

Linux 和 macOS 的 TCP 头部结构体定义逻辑不同:Linux 将数据偏移、保留位和所有 TCP 标志位打包在一个 16 位位域中,macOS 则拆分出单独的偏移字段和标志字节,以下是具体字段对应关系:

字段对应表

Linux 字段名macOS 对应方式说明
sourceth_sport源端口
destth_dport目的端口
seqth_seq序列号
ack_seqth_ack确认序列号
res1th_x2未使用的保留位
doffth_offTCP 头部数据偏移(单位:32 位字,转字节数需 ×4)
finth_flags & TH_FINFIN 标志位,结果非 0 表示置位
synth_flags & TH_SYNSYN 标志位,结果非 0 表示置位
rstth_flags & TH_RSTRST 标志位,结果非 0 表示置位
pshth_flags & TH_PUSHPSH 标志位,结果非 0 表示置位
ackth_flags & TH_ACKACK 标志位,结果非 0 表示置位
urgth_flags & TH_URGURG 标志位,结果非 0 表示置位
eceth_flags & TH_ECEECE 标志位,结果非 0 表示置位
cwrth_flags & TH_CWRCWR 标志位,结果非 0 表示置位
windowth_win窗口大小
checkth_sum校验和
urg_ptrth_urp紧急指针

代码适配示例

比如原来 Linux 中判断 ACK 标志的代码:

if (linux_tcp->ack) {
    // 处理ACK逻辑
}

在 macOS 中要改为:

if (macos_tcp->th_flags & TH_ACK) {
    // 处理ACK逻辑
}

再比如获取 TCP 头部长度:
Linux 中:

int tcp_header_len = linux_tcp->doff * 4;

macOS 中:

int tcp_header_len = macos_tcp->th_off * 4;

内容的提问来源于stack exchange,提问作者Makik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:30:56