/ proc / fdのソケットファイルの詳細を調べるにはどうすればよいですか?


33

/ 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への接続)に結び付けられていることは知っていますが、どのソケットがどの接続に関連付けられています。どうやってやるの?

より一般的には、ソケットのもう一方の端にあるものをOSに尋ねるにはどうすればよいですか?


1
使用socat....
heemayl

回答:


40

コマンドlsof

良いオプションがありますlsofman 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、目的のソケットを使用します。

すべてのコマンドを組み合わせることができると確信していますが、それで十分です。


ありがとうございました!賛成して受け入れられました lsofに「unix 0xffff88002704d380 0t0 1423733559ソケット」と表示されているソケットがありますが、0xffff88002704d380の詳細を調べるにはどうすればよいですか?
ベンス

1
「unix 0xfff ...」は、unix_sock構造体のカーネルメモリアドレスのようです。この構造には、ソケットエンドポイントへのポインターが含まれています。を見てくださいgrep -rni ffff88002704d380 /proc。/ proc /の下に答えがありcat、ファイルgrepが見つかりました。しかし、これに私を固定しないでください...ここで恐ろしい間違っているかもしれません。
ピディ

lsofソケットに関するその他の情報を読み込み/proc/net/tcp/proc/net/tcp6/proc/net/udp、などソケットの種類に応じてオン。
ジェシン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.