我正在尝试做一个作业(来自另一个univ的教程),它在初学者代码中有一行代码(Python和mininet)
os.system("rmmod tcp_probe; modprobe tcp_probe full=1")
Popen("cat /proc/net/tcpprobe > %s" % (outfile), shell=True)
这会产生一个错误,说明tcp_probe已被禁用。
我在googling中发现tcp_probe是linux内核中的已弃用。然而,它只是要求我‘使用ftrace做同样的’。我试过在网上搜索,但无法找到如何使用ftrace来实现同样的目标。
任何帮助都是非常感谢的。
发布于 2021-02-15 16:10:49
tldr;
不幸的是,我找不到任何方法让TCP跟踪点在Mininet中工作,这正是ftrace所使用的。其原因是mininet的/sys/kern/debug目录为空,即无法启用跟踪。
选项:
1.使用迷你跟踪(不推荐)
也许有一种方法可以让内核包含这个,或者您可以使用https://github.com/mininet/mininet-tracing来获得您所需要的东西,但是我已经看到一些报告说它很慢,并且在9年前已经更新了.
2.编写一个新的内核模块(我已经测试了这个模块,它可以工作)
相反,我发现的解决方案是强制打印我想要的TCP,然后以这种方式查看结果。为了实现这一点,您本质上需要扩展TCP的一些行为,并且(很可能)重用您所想到的TCP模块。并创建一个新的内核模块。
这里我提供了一个您可以使用的示例。它记录每个ACK上的套接字信息。我还包括一个Makefile和一个加载/卸载内核模块的脚本。在启用模块并允许一些流量(假设您使用的是基于debian的linux)之后,您应该能够在/var/log/kern.log中找到您的TCP日志。
注:这是一个棘手的问题,但足以满足我的需要,希望也能帮助别人。
https://stackoverflow.com/questions/65868476
复制相似问题