簡體   English   中英

在不相關的進程之間共享套接字(監聽)

[英]Share socket (listen) between unrelated processes

運行在Linux 3.9內核及更高版本中,我有一個應用程序X,它在特定的套接字上偵聽連接。 我想編寫一個不相關的應用程序Y,該應用程序跟蹤連接到此套接字的嘗試次數,源IP等。

是否可以在c ++中(最好是通過Qt庫)共享/監視不相關進程已使用的套接字? 我發現了幾個StackOverflow問題,建議分叉共享套接字,但是在這種情況下是不可能的。

可以將文件描述符傳輸到另一個進程,其行為類似於跨進程dup(2)。 有關詳細信息,請參見我可以打開套接字並將其傳遞給Linux中的另一個進程 但這需要明確地完成,即一個進程發送文件描述符,另一個進程接收它。 因此,“無關”的過程必須合作。

但是,偵聽套接字不能用於監視。 套接字只能接受連接,但是無論套接字是通過fork,線程共享還是通過文件描述符傳遞來共享,都無法查看另一個進程是否在同一套接字上接受了連接。

有了正確的權限和操作系統,您可以使用ptrace(2)或類似接口在syscall級別監視應用程序的行為。 在那里,您可以看到應用程序是否使用accept及其返回值。 或者像注釋中所建議的那樣,您可以使用數據包捕獲(tcpdump,原始套接字)來監視流量,並從成功的TCP握手中扣除某些(未知)進程必須已接受連接的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM