Tenho um PID de determinado processo que escuta algumas portas no meu OS X e preciso saber quais portas são ouvidas por esse processo. Como eu 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
O OS X usa utilitários BSD, então eu tenho BSD e netstat
não Linux netstat
. O Linux netstat
tem -p
opção para mostrar PIDs, o BSD netstat
usa -p
para especificar a porta e não tem opção para mostrar PID.
networking
osx
bsd
shau-kote
fonte
fonte
netstat
pode fazer isso por você. Você podegrep
sobre o PID se você quiser filtrar a saída denetstat
lsof
uso não é apenas uma maneira. você pode fazer algo parecidolsof|grep ${PID}
. que despeja tudo grosseiramente egrep
seleciona as linhas com PID. Em uma chance, que poderia listar uma linha irrelevante, devido ao número PID erroneamente combinando algum outro valor, mas as chances são quase nulasnetstat
não pode exibir PIDs.Respostas:
Eu encontrei uma solução sozinha lendo profundamente
man lsof
. (Sim, RT * M ainda ajuda.) Obrigado @Gilles por apontar.Aqui está a solução:
lsof -aPi -p 555
(555 é o PID).Explicação:
-p
especificar o número do PID;-i
exibir apenas dispositivos de rede;-a
para AND duas condições acima (caso contrário, elas serão ORed);-P
para exibir números de porta (em vez disso, nomes de porta por padrão).Além disso, pode-se usar
lsof -aPi4 -p 555
oulsof -aPi6 -p 55
para endereços IPv4 ou IP6 apenas de acordo.Se a saída for analisada por outra
-Fn
opção de programa, pode ser útil. Com esta opçãolsof
irá produzir "saída para outro programa" em vez de saída formatada agradável.lsof -aPi4 -Fn -p 555
irá produzir algo como isto:PS Tudo que eu testei no meu OS X El Capitan, mas como posso ver, também deve funcionar no Linux.
fonte
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 .O Rosetta Stone para Unix não lista nenhuma outra ferramenta para "combinar o processo ao arquivo ou porta" no OSX.
Para listar processos ouvindo em uma porta TCP, você pode usar
lsof -iUDP
lista os processos que têm um soquete UDP aberto.lsof -i
lista todos os soquetes de rede abertos (clientes TCP, servidores TCP e outros protocolos IP).fonte
se você quiser saber qual porta está escutando, use a opção -p do netstat. você precisa ser o superusuário:
se você quiser saber mais sobre isso, tente este link
fonte
netstat
, eu tenho o OS X e, portanto, uso o BSDnetstat
. Ele usa-p
para especificar a porta TCP / IP, e não tem opção para exibir o PID.No FreeBSD, você pode usar
sockstat
para esta informação. Não tenho certeza se o OS X possuisockstat
, pois não tenho um Mac.Por exemplo, para ver todas as conexões TCPv4:
sockstat -4
fonte
sockstat
comando no meu Mac. :(Você pode concatenar o netstat com grep, awk e sed para mostrar portas com seus pids correspondentes no Linux e Cygwin:
Mais detalhes
fonte