簡體   English   中英

如何在Linux中獲取給定進程的TCP套接字文件描述符?

[英]How to get the file descriptors of TCP socket for a given process in Linux?

我正在嘗試查找給定進程的所有TCP套接字的文件描述符。 給定它的pid,這樣我就可以在另一個進程中獲取socket選項,而無需修改原始進程。

例如,如果我知道文件描述符是fd ,那么我希望調用getsockopt(fd, ...)在另一個進程中檢索選項。 我想知道這可行嗎? 如果是這樣,如何在原始流程之外獲得我需要的fd

我嘗試在創建套接字時打印出返回值,即。 s = socket(...); printf("%d\\n", s); ,保持原始進程運行,並在其他位置調用getsockopt(s, ...) ,但是它不起作用-看來這種返回值取決於進程。

我也找到了使用Unix域套接字的解決方案,但我不想修改原始過程的代碼。

至於直接閱讀\\proc\\<PID>\\fd還是利用lsof ,我想說我不知道​​如何從他們那里找到我需要的東西。 我的直覺是,它們可能是潛在的解決方案。

當然,任何其他想法也都歡迎。 老實說,我對Linux中的文件描述符機制不是很熟悉。

不。您根本無法做您要的事情。

文件描述符只是一個整數,但它在給定進程中引用了一個打開的文件對象。 在另一個進程中,該整數值引用了另一個可能未打開的文件對象。

在不涉及ptrace調試API或遠程代碼注入的情況下,您僅限於內核通過/proc向您公開的內容。

查閱ss手冊頁 如果該實用程序無法向您顯示所需套接字的信息,則無能為力。

暫無
暫無

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

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