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

Linux内核TCP事件追踪:tcp_probe基于IP地址过滤方法求助

基于IP地址过滤tcp_probe事件的方法

问题原因

你之前的命令失败有两个核心原因:

  1. 引号语法错误:嵌套双引号导致shell解析异常,传递给内核的过滤规则格式无效。
  2. 字段类型不匹配:tcp_probe的daddr/saddr字段是32位无符号整数(网络字节序),不能直接使用字符串格式的IP地址,必须转换为对应的数值形式。

解决步骤

1. 将字符串IP转换为网络字节序数值

你需要把目标IP(如172.18.9.46)转换成内核识别的整数格式,以下是两种快速转换方式:

方式一:手动计算十六进制/十进制值

对于IPv4地址a.b.c.d,网络字节序的十六进制格式为0x(a<<24 | b<<16 | c<<8 | d)的大端表示。
以172.18.9.46为例:

  • 十六进制:0xac12092e
  • 十进制:2896698670

方式二:用命令自动转换

执行以下命令直接得到目标IP的十进制数值:

printf "%u\n" $(inet_pton -a 172.18.9.46 | od -An -tu4 -N4)

2. 设置正确的过滤规则

进入tcp_probe事件目录:

cd /sys/kernel/debug/tracing/events/tcp/tcp_probe

然后选择以下任意一种方式设置过滤:

用十进制数值过滤

echo "daddr == 2896698670" > filter

用十六进制数值过滤

echo "daddr == 0xac12092e" > filter

一键转换并设置过滤

无需手动计算,直接执行:

echo "daddr == $(printf "%u" $(inet_pton -a 172.18.9.46 | od -An -tu4 -N4))" > filter

3. 验证与启用

查看当前过滤规则是否生效:

cat filter

启用tcp_probe事件:

echo 1 > enable

扩展:使用trace-cmd简化操作

如果你安装了trace-cmd工具,可以直接用它来设置过滤并启动追踪,无需手动操作sysfs文件:

trace-cmd start -e tcp_probe --filter 'daddr == 0xac12092e'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:21