SEM usar linhas de comando de rede no linux, como saber a lista de portas abertas e o processo que as possui?

11

Eu quero saber quais portas são usadas por quais processos no Embedded-Linux. Como é simples o linux incorporado, não há linhas de comando de rede como netstat, lsof. (apenas existem linhas de comando básicas, como cat, cp, eco, etc).

Uma solução parcial parece ser usar as linhas de comando "cat / proc / net / tcp" e "cat / proc / net / udp". No entanto, não tenho certeza de que a lista impressa dessas linhas de comando mostre todas as portas em uso e a lista não mostra qual processo está vinculado a determinada porta .

Quaisquer comentários serão apreciados.

freddy
fonte
Eu acho que esta questão é mais adequado para Unix e Linux

Respostas:

15

Você deve encontrar todas as portas abertas em /proc/net/tcpe /proc/net/udp. Cada um desses arquivos possui uma inodecoluna, que pode ser usada para encontrar o processo que possui esse soquete.

Depois de ter um número de inode, você pode executar um comando ls, ls -l /proc/*/fd/* | grep socket:.$INODEpara encontrar os processos usando esse soquete. Caso um processo tenha sido configurado com descritores de arquivos diferentes para diferentes threads, pode ser necessário estender o comando ls -l /proc/*/task/*/fd/* | grep socket:.$INODEpara encontrar todos eles.

Kasperd
fonte
1
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
Sammitch
0

Para encontrar o INODES para qualquer porta, execute o comando abaixo

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

Use qualquer saída INODE do comando acima para encontrar o PID associado como abaixo

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

aqui $ INODE é o valor de qualquer INODE

Em um comando de linha única, podemos verificar se alguma porta está aberta e associada a qualquer PID conforme abaixo

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}'
Anil Agrawal
fonte