Socket

誰打開了文件描述符?(插座)

  • June 6, 2015

我正在使用strace跟踪程序。在這一行:

recvfrom(7, "\0\260R\0\0\1\364\6\215\r\257\330\210\341\0\270\240\0\260R\0\0\0\0\0\0\0\0\0\0\0\0"..., 3000, 0, {sa_family=AF_PACKET, proto=0x88e1, if4, pkttype=PACKET_OUTGOING, addr(6)={1, f4068d0dafd8}, [18]) = 60

前七個是用於讀取的文件描述符(見此處)。

我能查出是誰打開了那個套接字嗎?我知道程序保存在 /proc (我認為?)他們的打開文件列表中。那麼,我可以在所有程序列表中找到打開該 fd 或類似內容的所有程序嗎?

謝謝

您無法發現誰打開了套接字,但程序無法在另一個程序中打開文件,因此套接字要麼是由您正在跟踪的程序(或後來分叉的祖先之一)打開的,要麼已經打開當您呼叫程序時(如果這是程序使用的套接字,則不太可能)。

因此,在跟踪中進一步查找,直到找到導致打開文件描述符 7 的系統呼叫。對於套接字,這可能是connect該程序是客戶端還是accept伺服器。該呼叫也可以是對文件描述符進行洗牌的呼叫,例如dup2,在這種情況下,您將需要跟踪被複製的描述符。

如果您想知道套接字正在與哪些其他程序通信,請參閱誰擁有這個 unix 套接字對的另一端?

引用自:https://unix.stackexchange.com/questions/207749