/proc/fdでソケットファイルに関する詳細情報を見つける方法は?

/proc/fdでソケットファイルに関する詳細情報を見つける方法は?

/proc/$mypid/fd/ を見ると、次のファイルが表示されます。

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

コードにアクセスできるので、これらのソケットがTCP接続(一部のシステムではポート5672に接続され、他のシステムではポート3306に接続されている)に接続されていることを知っていますが、どのソケットがどの接続にバインドされているかを知りたいです。どうすればいいですか?

より一般的に言えば、ソケットの反対側の端に何があるのか​​、オペレーティングシステムにどのように尋ねることができますか?

答え1

コマンドの

良い選択は次のとおりですlsof。前述のようman lsofに、関連情報を簡単に入手できますopen files such as Internet sockets or Unix Domain sockets


それを書く

/proc/$PID/fd/まず、リストされたコンセント番号を見てください。
たとえば、socket:[14240]興味があるかもしれません。

その後、lsof -i -a -p $PID使用されているすべてのネットワークファイルのリストを印刷するために使用されます$PID

  • -iユーザーまたはプロセスに属するネットワークファイルのリストの生成

  • -a与えられたパラメータの論理的な組み合わせまたはAND

  • -p $PIDプロセスに関する情報のみを選択してください。

PIDで実行されるブラウザの一般的な出力は2543次のとおりです。

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

そしてより多くの同様のライン。

すごい!次に、列を詳しく見てくださいDEVICE。上記の店舗と一致します/proc/$PID/fd/
このNAME部分から、ソケットの反対側に何があるのか​​がわかります。

実際の世界では多くの出力を得ることができますが、フィルタリングまたはgrep関心のあるソケットに対してのみ出力されます。

すべてのコマンドを組み合わせることが可能であると確信していますが、始めるのにこれだけで十分です。

関連情報