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
Run Code Online (Sandbox Code Playgroud)
我不太明白这个机制是如何工作的,希望有人能解释一下。特别是,如果进程已经在侦听套接字文件,移动套接字文件如何工作?此外,在移动之后:既不lsof /path/to/sock也不/path/to/sock.original返回任何结果。
Sté*_*las 11
当您要监视的服务器当前正在侦听时,必须运行这些命令/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。