Como posso listar minhas portas de rede abertas com o netstat?


161

Gostaria de listar minhas portas de rede abertas no Terminal com comandos internos. Como eu sei, netstat é o comando para usar. Mas estou lutando para obter qualquer informação útil disso.

Como posso listar minhas portas abertas com netstat? Qualquer sinalizador específico que me ajude neste caso?

Respostas:


245
netstat -ap tcp | grep -i "listen"

Achive Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)   
tcp4       0      0  localhost.25035        *.*                    LISTEN
sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GitHub      850 grgarside   6u   IPv4 0x23c345381d089301      0t0  TCP localhost:25035 (LISTEN)

1
Obrigado! No entanto, a saída é muito difícil de ler, mas lsof foi um pouco melhor, obrigado.
Jonas

10
Você precisa usar sudo lsof .... Sem o sudo, o lsof só pode ver os processos que você possui e, portanto, não mostrará nenhuma porta aberta pelos processos do sistema. Além disso, você pode pular o comando grep, dizendo lsof você só quer ver as portas no estado LISTEN com sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson

1
→ grgarside: cuidado com os efeitos de grep -i "listen" dentro de seus 2 exemplos.
daniel Azuelos

2
Acabei de fazer, acaba o -v bandeira ativa isso. O pid estará na penúltima coluna.
Chris

1
Por quê "listen" e não listen?
user1071847

49

talvez você possa usar o lsof:

lsof -Pn -i4

-i4 significa apenas mostrar endereço e portas ipv4 -P e -n saída rápida

saída como esta

➜  lsof -Pn -i4 | grep LISTEN
QQPlatfor 22767 xxxx   15u  IPv4 0x36c2bfa04e49385d      0t0  TCP *:49969 (LISTEN)
GoAgentX  33377 xxxx    4u  IPv4 0x36c2bfa06e68b12d      0t0  TCP *:56154 (LISTEN)
GoAgentX  33377 xxxx   20u  IPv4 0x36c2bfa04e492f8d      0t0  TCP 127.0.0.1:56155 (LISTEN)

2
O que esse comando faz?
nohillside

3
lsof lista arquivos abertos. Os soquetes de rede contam como arquivos, portanto cada soquete de rede aberto (em escuta ou em uso) será listado em lsof.
Craig Trader

Mostra também o id do processo (netstat não)
lib

lsof -Pn -i6 para IPV6
Jared Burrows

1
Uma minha máquina, pelo menos, esta resposta leva 0,1s, enquanto @ grgarside é 28+ s. A diferença é a -i4 mudar, para apenas olhar para endereços IPv4.
Davor Cubranic

6

O método mais simples é usar netstat:

$ netstat -ap tcp
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  10.0.2.23.58792        17.172.233.109.5223    ESTABLISHED
tcp4      87      0  my_iMac__at_home.55481 stackoverflow.co.http  ESTABLISHED
tcp4     116      0  my_iMac__at_home.55478 stackoverflow.co.http  ESTABLISHED
tcp4      58      0  my_iMac__at_home.63452 stackoverflow.co.http  ESTABLISHED
tcp4      87      0  my_iMac__at_home.63429 stackoverflow.co.http  ESTABLISHED
tcp4       0      0  localhost.63173        localhost.773          ESTABLISHED
tcp4       0      0  localhost.773          localhost.63173        ESTABLISHED
tcp4       0      0  localhost.63173        *.*                    LISTEN     
tcp4       0      0  localhost.63172        *.*                    LISTEN     
tcp4       0      0  localhost.ipp          *.*                    LISTEN     
tcp6       0      0  localhost.ipp          *.*                    LISTEN     

… Sem qualquer filtragem adicional, para obter os cabeçalhos corretos e para ver os dois servidores ouvindo e as conexões já estabelecidas em ambas as direções. Neste exemplo, a primeira linha exibe uma conexão do meu Mac para 17.172.233.109, que um adicional:

whois 17.172.233.109

me ensinou que está localizado na Apple.


0

Primeiro, eu não sou um especialista em BSD, mas como o OP eu queria o equivalente aproximado de executar o seguinte em uma caixa * nix, ou algo próximo:

netstat -tulpn

Eu li outras perguntas / respostas oferecendo lsof * e netstat * no MacOS, e eu ainda queria algo com uma saída mais compacta. Então, isso é o que eu rapidamente faço:

netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print cred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"

É um pouco exagerado, então adicionei cor à saída para uma boa medida. Desde que eu não vou ser capaz de lembrar, ou quero digitar, este gigante. Eu coloquei em uma função bash e, em seguida, apenas chamar isso quando necessário. Aqui está a função bash:

macnst (){
    netstat -Watnlv | grep LISTEN | awk '{"ps -o comm= -p " $9 | getline procname;colred="\033[01;31m";colclr="\033[0m"; print colred "proto: " colclr $1 colred " | addr.port: " colclr $4 colred " | pid: " colclr $9 colred " | name: " colclr procname;  }' | column -t -s "|"
}

Eu tenho uma pequena coleção dessas funções de conveniência em um arquivo que eu origem de ~ / .bash_profile ou ~ / .zshrc. Isso está sendo adicionado à coleção. Seria interessante ver outras oportunidades para tornar isso mais agradável.

Exemplo de saída:

> macns
proto: tcp4     addr.port: 127.0.0.1.9999     pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.35729            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62087            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62070            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp46    addr.port: *.62085            pid: 70078    name:  /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/bin/java
proto: tcp4     addr.port: *.61993            pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
proto: tcp46    addr.port: *.61992            pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.42329    pid: 70065    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.61983    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.63342    pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.6942     pid: 70043    name:  /Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre/bin/java
proto: tcp4     addr.port: 127.0.0.1.3075     pid: 67931    name:  /Applications/electerm.app/Contents/Frameworks/electerm Helper.app/Contents/MacOS/electerm Helper
proto: tcp6     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: *.58640            pid: 320      name:  /usr/libexec/rapportd
proto: tcp4     addr.port: 127.0.0.1.9770     pid: 71       name:  /Applications/Pritunl.app/Contents/Resources/pritunl-service

Por favor, não postar gifs do bot Terminal cole o texto aqui formatado como código. É difícil copiar e também ler se você precisa de fontes grandes
Mark

A imagem não é um gif, é apenas uma tela mostrando a saída. Se você clicar, verá que é um PNG. Hospedado no imgur .. mas é isso que o StackExchange usa como padrão, eu acho. De qualquer forma, se você está procurando por uma imagem diferente, eu posso re-agarrar.
kroolk

OK no meu comentário substituir GIF por tela não importa qual formato. O ponto é que deveria ser texto
Mark
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.