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

如何从request_sock获取Socket监听端口?ir_num取值异常排查

问题原因与解决方法

你对ir_num的理解没错,它确实对应TCP监听端口,问题出在字节序未转换。

内核中所有TCP端口均以**网络字节序(大端)**存储,你代码里对远端端口sport调用了ntohs()转换为主机字节序,但本地监听端口dport(即ir_num)漏做了这一步:

  • 真实监听端口8000的十六进制为0x1F40,网络字节序下存储为0x1F 0x40
  • 小端系统直接读取时会解析为0x401F,换算成十进制就是你日志里的16415

修改代码

在读取dport后添加字节序转换:

bpf_probe_read(&dport, sizeof(dport), (void *)&ireq->ir_num);
dport = ntohs(dport); // 新增这一行

修改后重新运行,日志里的dport就会显示正确的监听端口8000了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:41:03