我知道有些进程正在写入某个unix域套接字(/var/run/asterisk/asterisk.ctl),但我不知道发送方的pid.如何找出谁在写入套接字?我尝试过:
sudo lsof /var/run/asterisk/asterisk.ctl
解决方法
简短的答案是否定的,不容易.
在Linux上,lsof依赖于/ proc / net / unix来检索有关UNIX域套接字的信息.此接口列出了所有绑定套接字,但它不跟踪端点.因此,您可以看到存在哪些套接字,但您无法看到与它们相关的内容.在某处跟踪此信息,必须跟踪它,否则套接字连接将无法工作.我还没有找到任何机制来检索连接信息.
嗅探问题稍微有点儿,但同样令人失望.我的意思是“不容易”,就是没有任何钩子潜入并抓取数据.最接近的模拟是使用tcpdump或Wireshark,两者都使用libpcap来实际进行繁重的工作.虽然网络(AF_INET)和UNIX域(AF_UNIX)都是使用socket()函数调用创建的,但都使用connect()连接,都使用read()和write()来处理数据,它们由不同的内核处理子系统.这有一个令人遗憾的副作用,即libpcap不适用于UNIX域套接字.
这个问题略显暗淡.看一下recv(2)的手册页.这是read()使用的低级系统调用. recv()存在一个名为MSG_PEEK的标志.这将允许您嗅探通过UNIX域套接字的流量.所以这是光明的一面,黑暗的一面是,据我所知,目前没有任何设计用于此目的的应用程序.所以你正在寻找一些开发工作.
我真的希望F’YEAH对你问题的两个部分都有一个很好的简单答案.