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

时间:2016-09-11 16:07:07

标签: c++ qt sockets networking listen

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

是否有可能在c ++(理想情况下通过Qt库)共享/监控已经被不相关进程使用的套接字?我发现了几个StackOverflow问题,建议分享插槽,但在这种情况下这是不可能的。

1 个答案:

答案 0 :(得分:1)

可以将文件描述符传输到另一个进程,该进程的行为类似于跨进程dup(2)。有关详细信息,请参阅Can I open a socket and pass it to another process in Linux。但是这需要明确地完成,即一个进程发送文件描述符而另一个进程接收它。因此"无关"过程必须合作。

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

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