如何在没有文件路径的情况下嗅探 unix dgram 套接字?

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没有文件路径是什么意思。

所以,两个问题:

  1. 为什么在某些情况下没有 unix socket 的文件路径?
  2. 如何在socat没有文件路径的情况下嗅探 unix DGRAM 套接字?

slm*_*slm 4

问题#1

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 套接字来说它是未定义的。

最后一句话就是你的答案。

问题2

Q2:为什么在某些情况下没有到unix套接字的文件路径?

请参阅标题为:如何在不创建套接字文件的情况下使用 unix 域套接字的SO 问答。

摘抄

您可以使用“抽象套接字地址”创建 unix 域套接字。只需将传递给 bind 的sun_path字符串的第一个字符设置为 即可。在这个首字母之后,将一个字符串写入其余部分并将其填充为with (或其他任何内容)。sockaddr_un'\0'NULsun_pathUNIX_PATH_MAXNULs

以这种方式创建的套接字将不会有任何文件系统条目,......

问题#3

Q3:如何在没有文件路径的情况下通过socat嗅探unix DGRAM套接字?

一旦您知道这些东西的名称,请再次进行更多谷歌搜索:socat docs

摘抄
  • 摘要-听:
  • 摘要-发送至:
  • 摘要-RECVFROM:
  • 摘要-RECV:
  • 摘要-客户: >

    抽象地址几乎与相关的 UNIX 地址相同,只是它们不寻址基于文件系统的套接字,而是寻址备用 UNIX 域地址空间。为了存档这个,套接字地址字符串在内部以“\0”为前缀。此功能(仅?)在 Linux 上可用。选项组与相关 UNIX 地址相同,但 ABSTRACT 地址不是 NAMED 组的成员。