Quem está ouvindo em uma determinada porta TCP no Mac OS X?


1382

No Linux, posso usar netstat -pntl | grep $PORTou fuser -n tcp $PORTdescobrir qual processo (PID) está escutando na porta TCP especificada. Como obtenho as mesmas informações no Mac OS X?


27
Desculpe, netstat -p tcp | grep $PORTnão exibe PIDs, pois o netstat no Mac OS X não pode exibir PIDs.
pts

12
netstat -anvExibe a porta no Mac OS X (fonte: solução abaixo por @SeanHamiliton)
Curtis Yallop

Respostas:


2049

No macOS High Sierra e posterior, use este comando:

lsof -nP -iTCP:$PORT | grep LISTEN

ou apenas para ver apenas IPv4:

lsof -nP -i4TCP:$PORT | grep LISTEN

Nas versões mais antigas, use um dos seguintes formulários:

lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN

Substitua $PORTpelo número da porta ou por uma lista de números de porta separados por vírgula.

Anexe antes sudo(seguido de um espaço) se precisar de informações sobre portas abaixo do # 1024.

O -nsinalizador é para exibir endereços IP em vez de nomes de host. Isso faz com que o comando seja executado muito mais rápido, porque as pesquisas de DNS para obter os nomes de host podem ser lentas (vários segundos ou um minuto para muitos hosts).

A -Pbandeira é para a exibição de números brutos de porta em vez de nomes resolvidos como http, ftpou nomes de serviços mais esotéricos como dpserve, socalia.

Veja os comentários para mais opções.

Para ser completo, porque frequentemente usados ​​juntos:

Para matar o PID:

kill -9 <PID>
# kill -9 60401

154
Prefixe isso com sudopara ver processos que você não possui.
Gordon Davisson

30
no leão, trabalhou com uma mudançasudo lsof -i TCP:$PORT | grep LISTEN
dhaval

58
Em Mountain Lion, você não precisa grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu Ching Pong -Asuka Kenji-

16
depois de tantas pesquisas, essa é a melhor. as pessoas que desejam copiar diretamente o comando devem substituir $ PORT pelo número da porta real ou definir a variável PORT e também para várias portas como: export PORT = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh

2
Um não precisa de sudo se a porta para investigar é acima de 1024.
stigkj

626

Desde o Snow Leopard (10.6), até o Mojave (10.14) e Catalina (10,15) , todas as versões do macOS suportam isso:

sudo lsof -iTCP -sTCP:LISTEN -n -P

Pessoalmente, acabei com esta função simples no meu ~/.bash_profile:

listening() {
    if [ $# -eq 0 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P
    elif [ $# -eq 1 ]; then
        sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
    else
        echo "Usage: listening [pattern]"
    fi
}

O listeningcomando Then fornece uma lista de processos que estão ouvindo em alguma porta e a listening smthcumprimenta por algum padrão.

Tendo isso, é muito fácil perguntar sobre um processo específico, por exemplo listening dropbox, ou porta, por exemplo listening 22.

lsofO comando tem algumas opções especializadas para perguntar sobre porta, protocolo, processo etc. mas, pessoalmente, achei as funções acima muito mais úteis, pois não preciso me lembrar de todas essas opções de baixo nível. lsofé uma ferramenta bastante poderosa, mas infelizmente não é tão confortável de usar.


7
Isso está acontecendo nos meus arquivos de ponto. Eu procuro a cada poucos meses e sempre encontro essa resposta.
Danemacmillan

1
Eu acho que essa resposta deve ser aceita, como o OP disse -pntl, o que listaria todos os serviços. A resposta aceita solicita que um ou mais números de porta sejam especificados, o que não é remotamente o mesmo.
seeafish

440

Você também pode usar:

sudo lsof -i -n -P | grep TCP

Isso funciona no Mavericks.


3
A -iopção torna significativamente mais rápido. 0,02 segundos vs 2 segundos. Na minha aplicação, isso fez a diferença.
Eric Boehs

o que esses sinalizadores específicos fazem -i, -n, -P. Não consigo encontrar em qualquer lugar que eles querem dizer exatamente
Chad Watkins

sudo lsof -i -n -P | TCP grep | grep $ PORT -
Criei

Eu sugeriria adicionar "| grep $ PORT" ou "| grep LISTEN"
KC Baltz

Ótimo! Funciona também no Mojave.
Gefilte Fish

291

Atualização de janeiro de 2016

Realmente surpreso, ninguém sugeriu:

lsof -i :PORT_NUMBER

para obter as informações básicas necessárias. Por exemplo, verificando na porta 1337:

lsof -i :1337

Outras variações, dependendo das circunstâncias:

sudo lsof -i :1337
lsof -i tcp:1337

Você pode facilmente criar isso para extrair o próprio PID. Por exemplo:

lsof -t -i :1337

que também é equivalente (no resultado) a este comando:

lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID

Ilustração rápida:

insira a descrição da imagem aqui

Para ser completo, porque frequentemente usados ​​juntos:

Para matar o PID:

kill -9 <PID>
# kill -9 60401

ou como um forro:

kill -9 $(lsof -t -i :1337)

2
Este comando também exibe PIDs que não são do ouvinte e as perguntas explicitamente solicitadas apenas para ouvintes.
pts

3
Você também pode executar lsof -t -i :1338. -tretornará a identificação do processo, assim você não terá que despertar / cabeça.
KFunk

Nada funcionou, exceto kill -9 $(lsof -t -i :5000)em el capitan
Goksel

Isso é ótimo. Eu prefiro saber o que está lá antes de matá-lo, então (baseado neste) Eu só acrescentou ao meu bashrc: whatsonport() { ps -ef | grep `lsof -t -i :$1` }, então:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried

1
Obrigado, lsof -i :PORT_NUMBERfez um trabalho para mim.
marika.daboja


48

Para as portas LISTEN, ESTABELECIDAS e FECHADAS

sudo lsof -n -i -P | grep TCP

Apenas para as portas LISTEN

sudo lsof -n -i -P | grep LISTEN

Para uma porta LISTEN específica, por exemplo: porta 80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

Ou se você quiser apenas um resumo compacto [nenhum serviço / aplicativo descrito], vá em NETSTAT. O lado bom aqui é que não é necessário sudo

netstat -a -n | grep 'LISTEN '

Explicando os itens usados:

-n suprime o nome do host

-i para protocolos IPv4 e IPv6

-P omite nomes de porta

-a [over netstat] para todos os soquetes

-n [over netstat] não resolve nomes, mostra endereços de rede como números

Testado em High Sierra 10.13.3 e Mojave 10.14.3

  • a última sintaxe netstat também funciona no linux

As explicações detalhadas são realmente muito úteis para iniciantes como eu. Obrigado @PYK
Tomaz Wang

46

no OS X, você pode usar a opção -v para o netstat para fornecer o pid associado.

tipo:

netstat -anv | grep [.]PORT

a saída ficará assim:

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

O PID é o número antes da última coluna, 3105 para este caso


Você também precisa adicionar grep LISTENpara mostrar apenas os ouvintes.
pts

3
Era disso que eu precisava! lsofNão foi possível encontrar a porta. mas netstatmostrou que estava aberto. -vfoi o molho secreto que me faltava.
Aaron McMillin 29/11

32

No macOS, eis uma maneira fácil de obter o ID do processo que está escutando em uma porta específica com o netstat . Este exemplo procura um processo que serve conteúdo na porta 80:

encontre o servidor em execução na porta 80

netstat -anv | egrep -w [.]80.*LISTEN

saída de amostra

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

O segundo da última coluna é o PID. Acima, são 715 .

opções

-a - mostra todas as portas, incluindo aquelas usadas pelos servidores

-n- mostre números, não procure nomes. Isso torna o comando muito mais rápido

-v - saída detalhada, para obter os IDs do processo

-w- procure palavras. Caso contrário, o comando retornará informações para as portas 8000 e 8001, não apenas "80"

LISTEN - forneça informações apenas para portas no modo LISTEN, ou seja, servidores


2
o sinalizador -v tornou
user9869932

18

Na versão mais recente do macOS, você pode usar este comando:

lsof -nP -i4TCP:$PORT | grep LISTEN

Se você acha difícil lembrar, talvez crie uma bashfunção e exporte-a com um nome mais amigável como esse

vi ~/.bash_profile

e adicione as seguintes linhas a esse arquivo e salve-o.

function listening_on() {
    lsof -nP -i4TCP:"$1" | grep LISTEN
}

Agora você pode digitar listening_on 80seu terminal e ver qual processo está escutando na porta 80.


13

No Snow Leopard (OS X 10.6.8), a execução de 'man lsof' gera:

lsof -i 4 -a

(a entrada manual real é 'lsof -i 4 -a -p 1234')

As respostas anteriores não funcionaram no Snow Leopard, mas eu estava tentando usar 'netstat -nlp' até ver o uso de 'lsof' na resposta por pts.


10

Eu sou um cara do Linux. No Linux, é extremamente fácil com netstat -ltpnou qualquer combinação dessas letras. Mas no Mac OS X netstat -an | grep LISTENé o mais humano. Outros são muito feios e muito difíceis de lembrar ao solucionar problemas.


2
A pergunta solicitou explicitamente uma porta TCP específica e seus comandos mostram ouvintes em todas as portas.
pts

7
lsof -n -i | awk '{ print $1,$9; }' | sort -u

Isso mostra quem está fazendo o quê. Remova -n para ver os nomes de host (um pouco mais lento).


1
Sua resposta não é ruim, mas está em uma pergunta com várias respostas altamente votadas e aceita, de vários anos atrás. No futuro, tente se concentrar em perguntas mais recentes, especialmente aquelas que ainda não foram respondidas.

Este comando exibe portas não TCP também e não ouvintes também? A pergunta solicita explicitamente ouvintes apenas nas portas TCP.
pts

De acordo com a página do manual lsof (8): If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Misha Tavkhelidze

@Misha Tavkhelidze: Por isso, também exibe os não ouvintes, por isso não responde à pergunta.
pts

Adicionar -sTCP:LISTENalsof
Misha Tavkhelidze

3

Isso fez o que eu precisava.

ps -eaf | grep `lsof -t -i:$PORT`

1

Fiz um pequeno roteiro para ver não apenas quem está ouvindo onde, mas também exibir conexões estabelecidas e com quais países. Funciona no OSX Siera

#!/bin/bash
printf "\nchecking established connections\n\n"
for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 | 
grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do
    printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName | 
cut -d ">" -f2 | cut -d"<" -f1
done

printf "\ndisplaying listening ports\n\n"

sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35

#EOF

Sample output
checking established connections

107.178.244.155 : United States
17.188.136.186 : United States
17.252.76.19 : United States
17.252.76.19 : United States
17.188.136.186 : United States
5.45.62.118 : Netherlands
40.101.42.66 : Ireland
151.101.1.69 : United States
173.194.69.188 : United States
104.25.170.11 : United States
5.45.62.49 : Netherlands
198.252.206.25 : United States
151.101.1.69 : United States
34.198.53.220 : United States
198.252.206.25 : United States
151.101.129.69 : United States
91.225.248.133 : Ireland
216.58.212.234 : United States

displaying listening ports

mysqld TCP *:3306 (LISTEN)
com.avast TCP 127.0.0.1:12080 (LISTEN)
com.avast TCP [::1]:12080 (LISTEN)
com.avast TCP 127.0.0.1:12110 (LISTEN)
com.avast TCP [::1]:12110 (LISTEN)
com.avast TCP 127.0.0.1:12143 (LISTEN)
com.avast TCP [::1]:12143 (LISTEN)
com.avast TCP 127.0.0.1:12995 (LISTEN)
com.avast [::1]:12995 (LISTEN)
com.avast 127.0.0.1:12993 (LISTEN)
com.avast [::1]:12993 (LISTEN)
Google TCP 127.0.0.1:34013 (LISTEN)

Isso pode ser útil para verificar se você está conectado à Coréia do Norte! ;-)


0

Esta é uma boa maneira no macOS High Sierra:

netstat -an |grep -i listen

Isso mesmo! A resposta aceita é realmente o caminho certo ... O netstat no mac os x não mostra o pid para o mapeamento de portas.
tr4nc3

0

Inspirado pelo usuário Brent Self:

lsof -i 4 -a | grep LISTEN


0

Para o macOS, uso dois comandos juntos para mostrar informações sobre os processos que estão ouvindo na máquina e sobre o processo de conexão com servidores remotos. Em outras palavras, para verificar as portas de atendimento e as conexões atuais (TCP) em um host, você pode usar os dois comandos a seguir juntos

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

Pensei em acrescentar minha opinião, espero que possa acabar ajudando alguém.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.