Como saber quais portas são ouvidas por determinado PID?

10

Eu tenho um PID de determinado processo ouvindo algumas portas no meu OS X e preciso saber qual porta (s) é ouvida por este processo. Como posso fazer isso?

Eu sei que posso usar lsof para saber qual processo está escutando alguma porta, mas preciso executar uma operação inversa.

Obrigado.

UPD

OS X usa utilitários BSD, então eu tenho BSD netstat não Linux netstat . Linux netstat tem -p opção para mostrar PIDs, BSD netstat usa -p para especificar porta e não tem opção para mostrar PID.

    
por shau-kote 22.04.2016 / 20:00

4 respostas

8

Eu encontrei uma solução por conta própria lendo em profundidade man lsof . (Sim, RT * M ainda ajuda.) Obrigado @Gilles por mirar.

Aqui está a solução: lsof -aPi -p 555 (555 é o PID).

Explicação:

  1. -p para especificar o número do PID;
  2. -i para exibir apenas dispositivos de rede;
  3. -a para AND duas condições acima (caso contrário serão ORed);
  4. -P para exibir números de porta (em vez disso, nomes de portas por padrão).

Além disso, é possível usar lsof -aPi4 -p 555 ou lsof -aPi6 -p 55 apenas para endereços IPv4 ou IP6.

Se a saída for analisada por outro programa, a opção -Fn poderá ser útil. Com essa opção, lsof produzirá "saída para outro programa" em vez de uma saída formatada. lsof -aPi4 -Fn -p 555 produzirá algo assim:

p554
nlocalhost:4321

PS Tudo isso eu testei no meu OS X El Capitan, mas como eu posso ver, deve funcionar no Linux também.

    
por 23.04.2016 / 04:55
4

lsof fornece informações sobre arquivos abertos por processos, incluindo portas de rede. Está disponível em praticamente todos os sistemas unix, incluindo o OSX .

A Rosetta Stone para Unix não lista nenhuma outra ferramenta para “processo de correspondência para arquivo ou porta” no OSX.

Para listar processos ouvindo em uma porta TCP, você pode usar

lsof -iTCP -sTCP:LISTEN

lsof -iUDP lista processos que possuem um soquete UDP aberto. lsof -i lista todos os sockets de rede abertos (clientes TCP, servidores TCP e outros protocolos IP).

    
por 23.04.2016 / 01:43
0

No FreeBSD, você pode usar sockstat para esta informação. Não tenho certeza se o OS X tem sockstat , pois não tenho um Mac.

Por exemplo, para ver todas as conexões TCPv4:

sockstat -4

    
por 22.04.2016 / 23:09
-1

se você quiser saber qual porta está ouvindo, você pode usar a opção -p do netstat. você precisa ser o superusuário:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

Se você quiser saber mais sobre isso, tente este link

    
por 22.04.2016 / 21:03