/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
関心のあるソケットに対してのみ出力されます。
すべてのコマンドを組み合わせることが可能であると確信していますが、始めるのにこれだけで十分です。