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


11

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

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

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


私はこの質問を良くするのに適していると思うのUnixとLinux

回答:


15

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

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


1
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
サミッチ2014年

0

ポートのINODESを見つけるには、以下のコマンドを実行します

PORT=8080;cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | awk -F ":" '{print "PORT=" $2 ", INODE=" $3 }'

上記のコマンド出力からINODEを使用して、以下のように関連するPIDを検索します

find /proc -lname "socket:\[$INODE\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'

ここで$ INODEはINODEの値です

1行のコマンドで、ポートが開いていて、以下のようにPIDに関連付けられているかどうかを確認できます。

PORT=8080;find /proc -lname "socket:\[$(cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | head -n 1 | awk -F ":" '{print $3}')\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.