socat
可用于监控 Unix 域套接字上的流量:
sudo mv /path/to/sock /path/to/sock.original
sudo socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original
我不太明白这个机制是如何运作的,希望有人能解释一下。特别是,如果进程已经在侦听套接字文件,那么移动套接字文件如何工作?另外,移动后:既不lsof /path/to/sock
也不/path/to/sock.original
返回任何结果。
答案1
当您要监视的服务器当前正在侦听时,必须运行这些命令/path/to/sock
。然后,如果您重命名/path/to/sock
,服务器将不会受到影响。
该socat
命令插入中间人。它监听/path/to/socks
客户端的所有流量并将其转发到/path/to/socks.original
(并将其记录在进程中-v
)。
这只适用于溪流插座类型(使用UNIX-RECVFROM
/UNIX-RECV
用于数据报套接字),并且仅当客户端仅read/write/send/recv
使用这些套接字时,而不是sendmsg()
使用辅助数据和其他花哨的东西。
lsof
只会报告侦听进程(socat
以及侦听和接受套接字的服务器)。一般情况下是无法链接的连接的客户端上的套接字到套接字的路径。
如果你这样做前启动服务器,那么这将不起作用,因为服务器会尝试听开启/path/to/socks
并失败,因为socat
已经在监听了。或者您需要告诉服务器进行监听/path/to/sock.original
。