移动 unix 域套接字如何使 socat 能够监控流量?

Mat*_*t R 12 socket socat

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