/ 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接続に関連付けられています(1つは一部のマシンのポート5672への接続、もう1つは他のマシンのポート3306への接続です)。 、しかしどのソケットがどの接続に関連付けられているのか知りたいのですが、どうすればいいですか?
より一般的には、ソケットの反対側にあるものをOSにどのように確認できますか?
良いオプションは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
は、プロセスに関する情報のみを選択します
2543
のPIDで実行している私のブラウザーの一般的な出力は次のようになります。
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
するだけです。
私はすべてのコマンドを組み合わせることができると確信していますが、それであなたは始めるのに十分なはずです。