Listar portas em que o PID do processo está ouvindo (de preferência usando as ferramentas iproute2)?

68

Eu estou olhando para listar todas as portas que um PID está escutando.

Como você recomendaria que eu obtivesse esse tipo de dados sobre um processo?

ThorSummoner
fonte
Estranho o suficiente ssnão ter filtragem no PID, exceto nos soquetes netlink.
poige

Respostas:

56

Você pode usar sso pacote iproute2 (que é semelhante a netstat):

ss -l -p -n | grep "pid=1234,"

ou (para a versão mais antiga do iproute2):

ss -l -p -n | grep ",1234,"

Substitua 1234 pelo PID do programa.

jofel
fonte
3
Também existe -uou apenas -tpara udb ou tcp. : +1: E tudo isso pode ser empilhado da seguinte forma ss -tlnpss -tlnp | cat
:,
11
Eu adquiri o hábito ss -nlp | cat, isso é aproximadamente, me mostrar os processos de escuta (-l), seus números de porta (-n) e suas informações de processo (-p), e não tente ajustar a saída ao meu shell | cat( ou menos ou o que for). Só me levou dois anos para se acostumar com isso: D
ThorSummoner
Não funcionou para mim (no Debian 9). Lá você precisa grep para ", pid = 1234,"
ofrommel
@ofrommel obrigado pela dica - eu adaptei a resposta.
Jofel
Além disso, este só funciona com permissões de root :)
ofrommel
57

Não conheço uma maneira de usar iproute2ferramentas. Mas, como alternativa, você pode tentar este.

lsof -Pan -p PID -i

deve fornecer as informações que você está procurando.


Resultado

lsof -Pan -p 27808 -i
COMMAND   PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
httpd   27808 apache    5u  IPv6 112811294      0t0  TCP *:80 (LISTEN)
httpd   27808 apache    7u  IPv6 112811298      0t0  TCP *:8443 (LISTEN)
httpd   27808 apache    9u  IPv6 112811303      0t0  TCP *:443 (LISTEN)

Eu recebi esse comando a partir daqui, mas não tenho certeza do link exato, pois todos eles foram anotados no caderno. Mas você pode conferir a partir daí também.

Ramesh
fonte
13

Você pode usar netstatisso para descobrir pid de cada processo de escuta.

netstat - Imprima conexões de rede, tabelas de roteamento, estatísticas de interface, conexões mascaradas e associações multicast

-a, --all Mostra os soquetes de escuta e não escuta (para TCP, isso significa conexões estabelecidas). Com a opção --interfaces, mostre interfaces que não estão marcadas

--numeric, -n Mostra endereços numéricos em vez de tentar determinar nomes simbólicos de host, porta ou usuário.

-p, --program Mostra o PID e o nome do programa ao qual cada soquete pertence.

Aqui está um exemplo:

# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1507/rpcbind
tcp        0      0 0.0.0.0:51188               0.0.0.0:*                   LISTEN      1651/rpc.statd
tcp        0      0 0.0.0.0:1013                0.0.0.0:*                   LISTEN      1680/ypbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1975/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1763/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2081/master
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      2119/mongod
tcp        0     48 172.16.33.73:22             172.16.127.110:51850        ESTABLISHED 25473/sshd
tcp        0      0 172.16.33.73:22             172.16.127.110:51214        ESTABLISHED 24699/sshd
tcp        0      0 :::111                      :::*                        LISTEN      1507/rpcbind
tcp        0      0 :::9200                     :::*                        LISTEN      1994/java
tcp        0      0 :::9300                     :::*                        LISTEN      1994/java
tcp        0      0 :::22                       :::*                        LISTEN      1975/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      1763/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      2081/master
tcp        0      0 :::59162                    :::*                        LISTEN      1651/rpc.statd
Raza
fonte
11
Obrigado, apesar de ter sido informado que netstatfoi preterido pelas ferramentas do iproute2 e pretendo evitá-lo.
ThorSummoner
12

A resposta do @ jofel mostra a ferramenta apropriada para usar ss, aqui estão as substituições das outras ferramentas de rede do iproute2.

Os comandos descontinuados e seus equivalentes iproute2 são os seguintes:

deprecated      replacement(s)
==========      ==============
- arp           ip n (ip neighbor)
- ifconfig      ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel      ip tunnel
- iwconfig      iw
- nameif        ip link, ifrename
- netstat       ss, ip route (for netstat-r), ip -s link (for netstat -i), 
                ip maddr (for netstat-g)

- route         ip r (ip route)

A lista básica também está aqui na Wikipedia: http://en.wikipedia.org/wiki/Iproute2 .

Referências

slm
fonte
1

Outro método para lsofse você não conhece o PID, mas apenas o nome do Programa:

lsof -Pa -p $(pgrep [programName]) -i
cryptoboy
fonte
não funciona com lsof4.89 no ubuntu 16.04
palik
11
Esse será o caso se o programa gerou vários processos. Nesse caso, você precisará especificar o PID específico ao executar o comando lsof que eu dei. pgrep <program name>depois escolha o PID necessário para o comando acima. substituindo $(pgrep [programName])pelo PID #
cryptoboy 12/12
0

Você já tentou, isso também faz o mesmo

netstat -plnt | grep 27071

sucesso

O Exorcista
fonte