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

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

那篇文章, 我意识到:

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没有文件路径。

那么,两个问题:

  1. 为什么在某些情况下没有 unix 套接字的文件路径?
  2. 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'NULsun_pathUNIX_PATH_MAXNULs

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

问题#3

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

一旦你知道这些东西叫什么,就再次进行更多的谷歌搜索:socat文档

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

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

相关内容