z0l*_*pka 5 linux socat unix-sockets ss
从那篇文章中,我意识到:
UNIX 域套接字绑定到文件路径。
所以,我需要通过这里socat
提到的来嗅探 DGRAM Unix 套接字。但是当我为此尝试检索路径时,我发现目标应用程序使用了一个没有文件路径的套接字。
该ss -apex
命令显示带有和不带有文件路径的结果,例如:
u_dgr UNCONN 0 0 /var/lib/samba/private/msg.sock/32222 1345285 * 0 users:(("nmbd",pid=32222,fd=7))
u_dgr UNCONN 0 0 * 8567674 * 0 users:(("gnome-shell",pid=16368,fd=23))
Run Code Online (Sandbox Code Playgroud)
从ss 手册页我找不到,例如* 8567674
没有文件路径是什么意思。
所以,两个问题:
socat
没有文件路径的情况下嗅探 unix DGRAM 套接字?Q1:从 ss 手册页我找不到它是什么意思,例如 * 8567674 没有文件路径。
从文档中它解释了地址:端口列,如下所示:
摘抄ADDRESS_PATTERN的格式和语义取决于地址族。
- inet - ADDRESS_PATTERN由 IP 前缀组成,后面可以选择冒号和端口。如果前缀或端口部分缺失或替换为 *,则表示通配符匹配。
- inet6 - 与inet相同,只是前缀指的是 IPv6 地址。与inet不同,冒号变得不明确,因此 ss 允许使用方案,就像在 URL 中使用的那样,其中地址由 [ ... ] 支持。
- unix - ADDRESS_PATTERN是 shell 样式的通配符。
- 数据包格式类似于inet,仅保留接口索引而不是端口,并且保留链路层协议 ID 而不是地址。
- netlink - 格式看起来像inet,只有套接字 pid 保留而不是端口,netlink 通道而不是地址。
PORT在语法上是带有通配符地址部分的ADDRESS_PATTERN。当然,对于 UNIX 套接字来说它是未定义的。
最后一句话就是你的答案。
Q2:为什么在某些情况下没有到unix套接字的文件路径?
请参阅标题为:如何在不创建套接字文件的情况下使用 unix 域套接字的SO 问答。
摘抄您可以使用“抽象套接字地址”创建 unix 域套接字。只需将传递给 bind 的
sun_path
字符串的第一个字符设置为 即可。在这个首字母之后,将一个字符串写入其余部分并将其填充为with (或其他任何内容)。sockaddr_un
'\0'
NUL
sun_path
UNIX_PATH_MAX
NULs
以这种方式创建的套接字将不会有任何文件系统条目,......
Q3:如何在没有文件路径的情况下通过socat嗅探unix DGRAM套接字?
一旦您知道这些东西的名称,请再次进行更多谷歌搜索:socat docs。
摘抄
- 摘要-听:
- 摘要-发送至:
- 摘要-RECVFROM:
- 摘要-RECV:
- 摘要-客户: >
抽象地址几乎与相关的 UNIX 地址相同,只是它们不寻址基于文件系统的套接字,而是寻址备用 UNIX 域地址空间。为了存档这个,套接字地址字符串在内部以“\0”为前缀。此功能(仅?)在 Linux 上可用。选项组与相关 UNIX 地址相同,但 ABSTRACT 地址不是 NAMED 组的成员。