web-dev-qa-db-ja.com

Linuxでネットワークコマンドラインを使用せずに、開いているポートのリストとそれらを所有するプロセスを知る方法は?

Embedded-linuxのどのプロセスがどのポートを使用しているかを知りたい。これは単純なembedded-linuxなので、netstat、lsofなどのネットワークコマンドラインはありません。 (cat、cp、echoなどの基本的なコマンドラインのみが存在します)。

部分的な解決策は、「cat/proc/net/tcp」および「cat/proc/net/udp」コマンドラインを使用することです。ただし、これらのコマンドラインから出力されたリストに使用中のすべてのポートが表示されるかどうかはわかりません、およびリストには特定のポートにバインドされているプロセスが表示されません

コメントをいただければ幸いです。

11
freddy

/proc/net/tcpおよび/proc/net/udpで開いているすべてのポートを見つけることができるはずです。これらの各ファイルにはinode列があり、そのソケットを所有するプロセスを見つけるために使用できます。

Iノード番号を取得したら、ls -l /proc/*/fd/* | grep socket:.$INODEなどのlsコマンドを実行して、そのソケットを使用しているプロセスを見つけることができます。プロセスがスレッドごとに異なるファイル記述子で設定されている場合、それらすべてを見つけるために、コマンドをls -l /proc/*/task/*/fd/* | grep socket:.$INODEに拡張する必要がある場合があります。

15
kasperd