从那篇文章, 我意识到:
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))
来自SS 手册页我不知道这是什么意思,例如* 8567674
没有文件路径。
那么,两个问题:
- 为什么在某些情况下没有 unix 套接字的文件路径?
socat
如何在没有文件路径的情况下嗅探 unix DGRAM 套接字?
答案1
问题#1
Q1:从 ss 手册页我找不到它是什么意思,例如 * 8567674 没有文件路径。
从它解释的文档地址:端口列如下:
摘抄的格式和语义地址模式取决于地址族。
- 内网-地址模式由 IP 前缀组成,后面可以选择冒号和端口。如果前缀或端口部分缺失或替换为 *,则表示通配符匹配。
- 内网6- 与相同内网,只有前缀指的是 IPv6 地址。不像内网冒号变得不明确,因此 ss 允许使用方案,就像在 URL 中使用的那样,其中地址由 [ ... ] 支持。
- UNIX-地址模式是 shell 风格的通配符。
- 包- 格式如下内网,仅保留接口索引,而不保留端口,仅保留链路层协议 ID,而不保留地址。
- 网络链接- 格式如下内网,仅保留套接字 pid,而不保留端口,仅保留 netlink 通道,而不保留地址。
港口语法上是地址模式带有通配符地址部分。当然,对于 UNIX 套接字来说它是未定义的。
最后一句话就是你的答案。
问题2
Q2:为什么在某些情况下没有到unix套接字的文件路径?
请参阅标题为这样的问答:如何在不创建套接字文件的情况下使用unix域套接字。
摘抄您可以使用“抽象套接字地址”创建 unix 域套接字。只需将传递给 bind 的
sun_path
字符串的第一个字符设置为 即可。在这个首字母之后,将一个字符串写入其余部分并将其填充为with (或其他任何内容)。sockaddr_un
'\0'
NUL
sun_path
UNIX_PATH_MAX
NULs
以这种方式创建的套接字将不会有任何文件系统条目,......
问题#3
Q3:如何在没有文件路径的情况下通过socat嗅探unix DGRAM套接字?
一旦你知道这些东西叫什么,就再次进行更多的谷歌搜索:socat文档。
摘抄
- 摘要-听:
- 摘要-发送至:
- 摘要-RECVFROM:
- 摘要-RECV:
- 摘要-客户: >
抽象地址几乎与相关的 UNIX 地址相同,只是它们不寻址基于文件系统的套接字,而是寻址备用 UNIX 域地址空间。为了存档这个,套接字地址字符串在内部以“\0”为前缀。此功能(仅?)在 Linux 上可用。选项组与相关 UNIX 地址相同,但 ABSTRACT 地址不是 NAMED 组的成员。