ユーザー空間またはカーネルで C を使用して、Linux で開いているすべてのソケット (ソケット アドレスまたはソケット記述子) のリストを取得する方法はありますか?
ありがとうございました
ユーザー空間またはカーネルで C を使用して、Linux で開いているすべてのソケット (ソケット アドレスまたはソケット記述子) のリストを取得する方法はありますか?
ありがとうございました
以下を開いて読んでください。
/proc/net/tcp
- 開いている TCP ソケットのリスト
/proc/net/udp
- 開いている UDP ソケットのリスト
/proc/net/raw
- すべての「生の」ソケットのリスト
これらは、ファイルハンドルで開いて読み取る「通常の」ファイルのようなもので、各ソケットについて必要になる可能性のあるすべての情報を提供します。
このプログラムは役に立つかもしれません。 /net/proc/* ファイルの解析方法を示しています
ディレクトリ /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() を呼び出して、バインドされている場合はローカル アドレス ファミリやアドレスなどを取得できます。
生データは、/proc/net/tcp、/proc/net/udp などにあります。(簡潔な) 説明については、最初の行のヘッダーを参照してください。