微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 ftrace 进行 tcp 探测?

如何解决如何使用 ftrace 进行 tcp 探测?

我正在尝试做一个作业(来自另一个大学的课程页面),其中在入门代码(Python 和 mininet)中有一行作为

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。然而,它只是要求我“使用 ftrace 做同样的事情”。我试过在线搜索,但找不到如何使用 ftrace 来实现相同的效果

感谢任何帮助。

解决方法

tldr;

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

选项:

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。