組み込みLinuxでは、どのプロセスがどのポートを使用しているかを知りたいです。単純な組み込みLinuxなので、netstat、lsofなどのネットワークコマンドラインはありません。 (cat、cp、echoなどの基本的なコマンドラインのみが存在します。)
解決策の一部は、「cat /proc/net/tcp」および「cat /proc/net/udp」コマンドラインを使用するようです。しかし、このコマンドラインの印刷リストに使用されているすべてのポートが表示されるかどうかはわかりません。とリストには、どのプロセスが特定のポートにバインドされているかは表示されません。。
どんなアドバイスも本当にありがとうございます。
答え1
/proc/net/tcp
とで開いているすべてのポートを見つけることができるはずです/proc/net/udp
。各ファイルには、inode
そのソケットを所有するプロセスを見つけるために使用できる列があります。
inode 番号がある場合は、ls コマンドを実行してls -l /proc/*/fd/* | grep socket:.$INODE
そのソケットを使用するプロセスを見つけることができます。プロセスに異なるスレッドに設定された異なるファイル記述子がある場合は、コマンドを展開してすべてのls -l /proc/*/task/*/fd/* | grep socket:.$INODE
ファイル記述子を見つける必要があります。
答え2
ポートの 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}'