c - 在 C 中观察另一个 linux 进程的网络事件的方法

标签 c linux networking ptrace

我需要在使用我的路由器的 Web 界面时启动一些辅助进程,并在一段时间后关闭它们,如果 webface 中的事件停止(在不使用 webface 时节省 RAM)。

有什么方法(除了 prace() )可以知道另一个进程(服务器)何时接受了任何网络连接?

我尝试解析/proc/net/tcp 以获取位于/proc/pidof httpd/fd 中的套接字 inode,但它非常不可靠,并且只捕获完整的 webface 重新加载,但不捕获导航在上面。

这是我这样写的源代码: https://dl.dropboxusercontent.com/u/100376233/zyxel/nethelperd.tar.bz2

或者:是否有任何方法可以使用 ptrace() 仅捕获 accept() 系统调用,并且如果调用另一个系统调用则不干扰被跟踪的进程?

最佳答案

我建议您将 libpcap 与过滤器一起使用,例如 tcp port X,其中 X 是托管 Web 界面的端口。每当您收到数据包时,您都可以重置计时器。如果计时器在您收到数据包之前触发,您可以关闭服务。您还可以通过不捕获整个数据包来减少开销。 libpcap 允许您指定要捕获每个数据包的最大字节数。

关于c - 在 C 中观察另一个 linux 进程的网络事件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19988269/

相关文章:

c - 为什么这个链表无限期地打印最后一个元素?

linux - WebStorm 找不到文件,在终端打开 WebStorm

linux - 从 bash 切换到 csh 提示符

node.js - 代理 Node 应用程序中的所有 Sentry 请求

java - 读取网络共享上的文件

linux - 如何监控 Linux UDP 缓冲区可用空间?

c - yylval 在 lex 和 yacc 中的作用

c - 多维数组中的指针运算

linux - 在 cpan 之前使用 yum/apt-get 来管理 UNIX 系统范围的 Perl 模块?

c - SHLD/SHRD 指令的 SIMD 版本