我在一个嵌入式平台(mipsel体系结构,Linux 2.6内核)上,我需要在两个闭源进程(路由器固件)之间监视IPC,以便对某个事件做出反应(由于DSL重新连接,动态IP更改) . 到目前为止,我通过strace发现的是,无论何时IP发生变化,DSL守护进程都会将特殊消息写入绑定到特定文件名的UNIX域套接字 . 该消息由另一个守护程序使用 .
现在这是我的要求:我想监视通过该特定UNIX域套接字的数据流,并在检测到某个消息时触发事件(调用shell脚本) . 我尝试使用inotify监视文件名,但它不适用于套接字文件 . 我知道我可以一直运行strace,过滤其输出并对过滤后的日志文件中的更改做出反应,但这样做太重了,因为strace确实会降低系统速度 . 我也知道我可以通过cron轮询IP地址,但是我想要一个看门狗,而不是一个轮询解决方案 . 我有兴趣了解是否有一个工具可以专门监视UNIX域套接字并对预定义方向流动的特定消息做出反应 . 我想象类似于inotifywait的东西,即工具应该等待某个事件,然后退出,这样我就可以对事件作出反应并循环回到再次启动工具,等待同一类型的下一个事件 .
是否有任何现有的Linux工具能够做到这一点?或者是否有一些简单的C代码用于独立二进制文件,我可以在我的平台上编译(uClibc,而不是glibc)?我不是C专家,但能够运行makefile . 使用shell中的二进制文件没问题,我对shell编程了解得足够多 .
2 回答
自从我处理这个话题以来已经有一段时间了,实际上并没有开始测试我的熟人,Busybox的维护者几个月前提出的解决方案 . 因为我刚刚在StackOverflow上查看了我的帐户并再次看到了这个问题,让我与您分享他的见解 . 也许这对某人有帮助:
这类似于 Celada 也回答了 . 还要感谢他!不过,丹尼斯的回答更为具体 .
我回答说:
丹尼斯再次回答:
我认为没有任何东西可以让你干净利落地查看UNIX套接字流量 . 以下是一些选项:
安排发件人进程连接到 you 正在侦听的其他套接字 . 还可以作为客户端连接到原始套接字 . 收到数据后,请注意您要注意的数据,并将所有内容传递给原始套接字 .
使用netlink套接字(
RTM_NEWADDR
,RTM_NEWLINK
等)自行监控系统的IP地址变化 .将
ip monitor
作为外部进程运行,并在其标准输出上写入有关添加和删除的IP地址的消息时执行操作 .