8

ユーザー空間またはカーネルで C を使用して、Linux で開いているすべてのソケット (ソケット アドレスまたはソケット記述子) のリストを取得する方法はありますか?

ありがとうございました

4

4 に答える 4

19

以下を開いて読んでください。

/proc/net/tcp- 開いている TCP ソケットのリスト

/proc/net/udp- 開いている UDP ソケットのリスト

/proc/net/raw- すべての「生の」ソケットのリスト

これらは、ファイルハンドルで開いて読み取る「通常の」ファイルのようなもので、各ソケットについて必要になる可能性のあるすべての情報を提供します。

于 2009-05-08T20:52:10.580 に答える
4

このプログラムは役に立つかもしれません。 /net/proc/* ファイルの解析方法を示しています

于 2009-05-08T21:25:33.840 に答える
3

ディレクトリ /proc/self/fd には、開いているすべてのファイル記述子を提供する偽のシンボリックリンクがあります-ソケットは次のようなものを提供します:

lrwx------ 1 root root 64 2009-05-08 07:45 4 -> socket:[4921]
lrwx------ 1 root root 64 2009-05-08 07:45 5 -> socket:[4918]
lrwx------ 1 root root 64 2009-05-08 07:45 6 -> socket:[5395]

opendir、readdir() を使用してそれらを反復し、次に readlink() を使用して問い合わせます

FD 4 がソケットであることがわかっている場合は、それに対して getsockname() を呼び出して、バインドされている場合はローカル アドレス ファミリやアドレスなどを取得できます。

于 2009-05-08T20:54:47.300 に答える
0

生データは、/proc/net/tcp、/proc/net/udp などにあります。(簡潔な) 説明については、最初の行のヘッダーを参照してください。

于 2009-05-08T20:53:14.917 に答える