识别 Unix 域套接字连接的另一端

2023-12-20

我试图找出哪个进程正在持有 unix 域套接字的另一端。在一些strace输出 我已经识别出一个给定的文件描述符,该文件描述符涉及我当前正在调试的问题,并且我想知道哪个进程位于该描述符的另一端。由于该套接字有多个连接,因此仅通过路径名是行不通的。

lsof为我提供以下信息:

dbus-daem  4175  mvg   10u  unix 0xffff8803e256d9c0      0t0  12828 @/tmp/dbus-LyGToFzlcG

所以我知道一些地址(“内核地址”?),我知道一些套接字号,并且我知道路径。我可以在其他地方找到相同的信息:

$ netstat -n | grep 12828
unix  3      [ ]         STREAM     CONNECTED     12828    @/tmp/dbus-LyGToFzlcG
$ grep -E '12828|ffff8803e256d9c0' /proc/net/unix
ffff8803e256d9c0: 00000003 00000000 00000000 0001 03 12828 @/tmp/dbus-LyGToFzlcG
$ ls -l /proc/*/fd/* 2>/dev/null | grep 12828
lrwx------ 1 mvg users 64 10. Aug 09:08 /proc/4175/fd/10 -> socket:[12828]

然而,这些都没有告诉我什么other我的套接字连接结束了。我如何知道哪个进程正在持有另一端?


类似的问题已被问到服务器故障 https://serverfault.com/q/252723/129921 and Unix 和 Linux https://unix.stackexchange.com/q/16300/20807。公认的答案是 Linux 上的用户空间无法可靠地获得此信息。

一个常见的建议是查看相邻的套接字编号,但是ls -l /proc/*/fd/* 2>/dev/null | grep 1282[79]这里没有给出结果。也许输出中的相邻行netstat可以使用。似乎存在一种带有或不带有关联套接字名称的连接模式。但我想要某种确定性,而不仅仅是猜测。

一个答案 https://unix.stackexchange.com/a/16447/20807建议使用一种工具,它似乎能够通过挖掘内核结构来解决这个问题。使用该选项需要内核的调试信息,由CONFIG_DEBUG_INFO选项并由某些发行版作为单独的包提供。根据该答案,使用提供的地址lsof,以下解决方案对我有用:

# gdb /usr/src/linux/vmlinux /proc/kcore
(gdb) p ((struct unix_sock*)0xffff8803e256d9c0)->peer

这将打印连接另一端的地址。格雷平lsof -U对于该编号将提供进程 ID 和文件描述符编号等详细信息。

如果调试信息不​​可用,则might通过了解对等成员在 unix_sock 结构中的偏移量,可以访问所需的信息。就我而言,在 x86_64 的 Linux 3.5.0 上,可以使用以下代码来计算相同的地址,而无需依赖调试符号:

(gdb) p ((void**)0xffff8803e256d9c0)[0x52]

我不会对该解决方案的可移植性做出任何保证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

识别 Unix 域套接字连接的另一端 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it

随机推荐

  • 将 Scala Stream 转换为新 Stream,它是当前元素与前一个元素的总和

    如何转换整数的 Scala Stream 以便我们拥有一个新的 Stream 其中元素是该元素与前一个元素的总和 例如 如果输入流是 1 2 3 4 则输出流是 1 3 5 7 还有第二个问题 如何使总和使用输出流中的前一个 以便输出为 1
  • Python 多处理应用程序陷入 docker 容器中

    我正在尝试运行一个多处理 Python 应用程序来加速和并行我的任务 我的应用程序使用简单的多处理Pool并在资源有限的 docker 容器中运行 我注意到我的应用程序有时会卡住 它永远不会结束 终止 但没有任何移动 任务停止运行 没有日志
  • JSON解析swift,数组在NSURLSession之外没有值

    我正在尝试使用以下代码快速调用 json webservice 并将其显示在tableview在快速的IOS中 declared as global var IdDEc String string array declared global
  • TinyMCE UTF-8 保存到 MySQL 数据库

    我将 TinyMCE 输入发送到 POST 一个 php 文件 然后将其保存在 MySQL 数据库中 输入具有 UTF 8 土耳其字符 所以当我输入时T rk e在 TinyMCE 输入中并将其发送到 post PHP 后端收到此字符串 p
  • 枚举是否应该具有未初始化的值。

    我们正在争论枚举是否应该具有未初始化的值 例如 我们有 public enum TimeOfDayType Morning Afternoon Evening or public enum TimeOfDayType None Mornin
  • Logstash 文件输入插件

    目前 我正在使用文件输入插件来检查我的日志存档 但文件输入插件对我来说不是正确的解决方案 因为文件输入插件本质上期望该文件是事件流而不是静态文件 现在 这给我带来了很大的问题 因为我的日志存档有 100 000 多个日志文件 而我的 Log
  • 查找访问令牌的过期时间

    有什么方法可以使用图形 api 来查明页面访问令牌或应用程序令牌何时过期 Update 有一个新的 API 端点用于访问有关访问令牌的信息 您可以在这里找到信息 调试访问令牌和处理错误 https developers facebook c
  • 为什么 JavaScript 中带小数的最大位数只有 16

    不久前我在测试一些 HTML 表单时遇到了这个问题 JavaScript 中带小数点的数字的最大位数仅为 16 我尝试过以下方法 var x 12345678912345 6789 x 是 12345678912345 68 仅 16 位数
  • 使用 Conditional 属性标记仅返回任务的异步方法?

    The System Diagnostics ConditionalAttribute对于分割调试代码片段而不需要使用编译器指令确实很有用 但它只与返回的方法兼容void 有没有办法将它 或等效的东西 用于返回 a 的异步方法Task No
  • 请求取消不会传播到云运行容器

    当发送到云运行服务的 HTTP 请求被发起服务取消时 取消 关闭的连接不会传播到云运行容器内正在服务的请求 示例代码 package main import log net http os time func main port os Ge
  • bash:mkvirtualenv:找不到命令

    按照以下说明进行操作后道格 海尔曼的virtualenvwrapper post https doughellmann com posts virtualenvwrapper 我仍然无法启动测试环境 mpenning tsunami mkv
  • COM 互操作传递错误的指针,只有一个字节的数据

    我在使用 COM 将指针传递给本机代码时遇到问题 我想在托管 C 代码中构建一个字节数组 并将该数组传递给本机 C 代码 我正在处理托管代码方面 我的同事负责本机方面 请注意 我在托管方面更强大 并且我几乎一直在使用所写的 COM 对象 C
  • 如果已选择,则单击时取消选择 GridView.Item

    我知道这看起来很简单 我也是这么想的 但实际上并非如此 我有一个 GridView SelectionMode Single 我想通过单击来简单地取消选择选定的项目 问题是 当您选择已选择的项目时 SelectionChanged 不会触发
  • 分钟变化时不调用 TIME_TICK

    我面临的问题是 当时间更改时 TIME TICK 仅在应用程序运行时调用 但我希望即使应用程序正在运行或不使用广播接收器也能调用它 主要活动 public class MainActivity extends Activity Overri
  • 如何在一个命令中执行多个 lein 任务?

    我是莱宁根的新手 当我尝试执行以下操作时 lein clean jar I got Wrong number of arguments to clean task Expected 如何在一个命令中执行多个任务 是的 可以执行多个莱宁根通过
  • Delphi Xe2 VCL 样式和网页浏览器

    Win7 x64 Delphi Xe2 更新2 Prompt 新项目编译为x32 在项目选项中应用视觉 vcl 样式 默认选择一种 在表单上的button1和WebBrowser1 在按钮中我们编写WebBrowser1 Navigate
  • 点击事件在 Chrome 中不起作用,但当我们从控制台手动执行它时,事件会触发

    从几个小时开始 我就试图找到一个棘手的客户问题的根本原因 感谢帮助 客户端 Chrome 浏览器中没有任何点击事件被触发 但是当我们从控制台调用 JavaScript 方法时 它就会触发 在附图中 您可以看到我如何触发该事件 尝试删除 da
  • 具有多个变量的 Sass @each

    我刚刚开始使用 Sass 和 Compass 我很喜欢它 我想做的就是利用 each简化重复性任务的功能 然而 我只看到过这样的例子 each插入一个变量 并且我希望能够使用多个变量 标准方式 从Sass 参考 http sass lang
  • jQuery 全局事件和性能?

    我正在寻找一种使用 jQuery 显示状态指示器的方法 我在 jQuery Cookbook 中找到了一个解决方案 它显示了这个解决方案 function document ready function ajaxStatus ajaxSta
  • 识别 Unix 域套接字连接的另一端

    我试图找出哪个进程正在持有 unix 域套接字的另一端 在一些strace输出 我已经识别出一个给定的文件描述符 该文件描述符涉及我当前正在调试的问题 并且我想知道哪个进程位于该描述符的另一端 由于该套接字有多个连接 因此仅通过路径名是行不