如何使用 ftrace 进行 tcp 探测?

How to use ftrace for tcp probe?

我正在尝试做一个作业(来自另一个大学的课程页面),它在起始代码中有一行(Python with mininet)as

os.system("rmmod tcp_probe; modprobe tcp_probe full=1")

Popen("cat /proc/net/tcpprobe > %s" % (outfile), shell=True)

给出一个错误,指出 tcp_probe 已被禁用。

我通过谷歌搜索发现 tcp_probe 在 linux 内核中已经 deprecated。然而它只是要求我'do the same using ftrace'。我试过在线搜索,但找不到如何使用 ftrace 来实现相同的目的。

感谢任何帮助。

tldr;

不幸的是,我找不到任何方法让 TCP 跟踪点在 Mininet 中工作,而这正是 ftrace 所使用的。这是因为 mininet 的 /sys/kern/debug 目录是空的,即无法启用跟踪。

选项:

1.使用 mininet-tracing(不推荐)

可能有一种方法可以让内核包含这个,或者你可以使用 https://github.com/mininet/mininet-tracing 这可能会得到你需要的东西,但我看到报告说它很慢,并且已经更新 9多年前...

2。写一个新的内核模块(我已经测试过了,它可以工作)

我找到的解决方案是强制打印我想到的 TCP,然后以这种方式查看结果。为了实现这一点,您基本上需要扩展 TCP 的某些行为并(很可能)重用您想到的 TCP 模块。并创建一个新的内核模块。

Here 我提供了一个示例供您使用。它在每个 ACK​​ 上记录套接字信息。我还包含了一个 Makefile 和一个 load/unload 内核模块的脚本。启用该模块并让一些流量流动后(假设您使用的是基于 debian 的 linux),您应该能够在 /var/log/kern.log.

中找到您的 TCP 日志

注: 这是解决该问题的一种 hacky 方法,但足以满足我的需求,希望也能帮助其他人。