嗅探UNIX域套接字


9

我知道某个进程正在写入某个Unix域套接字(/var/run/asterisk/asterisk.ctl),但是我不知道发送方的pid。我如何找出谁在写套接字?我尝试过:

sudo lsof /var/run/asterisk/asterisk.ctl

但它只是列出套接字的所有者。我想知道谁在向这个套接字写/读,我也想嗅探数据。这可能吗?

Answers:


4

简短的答案是否定的,也不容易。

在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的一个不错的简单回答你的问题的两个部分。



4

我知道这不能回答主要问题,但是我到这里为止了,只是在嗅探套接字上的通信。我决定为像我这样的其他人发帖。这是我的做法:

$> sudo socat -t100 -x -v UNIX-LISTEN:/var/run/php5-fpm.sock.socat,mode=777,reuseaddr,fork UNIX-CONNECT:/var/run/php5-fpm.sock

您可以删除-x并仅保留-v进行ascii通信。希望能对某人有所帮助。


完美工作
JSmyth '16

-1

socat -t100 UNIX-LISTEN:/tmp/file.sock,mode=777,reuseaddr,fork STDOUT

没有输出重复,没有循环输出。先前的注释“ .sock.socat”错误


2
尽管这可能是一个有用的命令,但请添加一些解释/说明(这与该答案有什么不同?)
HBruijn

对不起。没有输出重复,没有循环输出。先前评论“ .sock.socat”的错误
srvf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.