gpt4 book ai didi

c++ - 在不相关的进程之间共享套接字(监听)

转载 作者:行者123 更新时间:2023-11-28 05:31:23 28 4
gpt4 key购买 nike

在 Linux 3.9 内核和更高版本中运行,我有一个应用程序 X,它在特定套接字上监听连接。我想写一个不相关的应用程序 Y,它跟踪尝试连接到此套接字的次数、源 IP 等。

是否可以在 c++ 中(最好通过 Qt 库)共享/监视一个已被无关进程使用的套接字?我发现了几个 StackOverflow 问题,这些问题建议 fork 以共享套接字,但在这种情况下这是不可能的。

最佳答案

可以将文件描述符传输到另一个进程,其行为类似于跨进程 dup(2)。参见 Can I open a socket and pass it to another process in Linux了解详情。但这需要明确地完成,即一个进程发送文件描述符,另一个进程接收它。因此,“不相关”进程必须合作。

但是监听套接字不能用于监听。套接字只能接受一个连接,但无法查看另一个进程是否接受了同一套接字上的连接,无论套接字是通过 fork、线程共享还是通过文件描述符传递共享。

如果有正确的权限和操作系统,您可以使用 ptrace(2) 或类似接口(interface)在系统调用级别监视应用程序的行为。在那里您可以看到应用程序是否使用了 accept 以及它返回的内容。或者像评论中建议的那样,您可以使用数据包捕获(tcpdump、原始套接字)来简单地观察流量并从成功的 TCP 握手中推断出某些(未知)进程必须接受连接。

关于c++ - 在不相关的进程之间共享套接字(监听),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39438063/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com