¿Cómo puedo enumerar mis puertos de red abiertos con netstat?

206

Me gustaría enumerar mis puertos de red abiertos en la Terminal con comandos integrados. Como lo que sé, netstates el comando a usar. Pero estoy luchando para obtener información útil.

¿Cómo puedo enumerar mis puertos abiertos netstat? ¿Alguna bandera específica que me ayude en este caso?

Jonas
fuente

Respuestas:

310
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)
grg
fuente
2
¡Gracias! Sin embargo, la salida es bastante difícil de leer, pero lsoffue un poco mejor, gracias.
Jonas
12
Necesitas usar sudo lsof .... Sin el sudo, lsof solo puede ver los procesos que posee y, por lo tanto, no mostrará ningún puerto abierto por los procesos del sistema. Además, puede omitir el comando grep diciéndole a lsof que solo desea ver los puertos en el estado LISTEN sudo lsof -PiTCP -sTCP:LISTEN.
Gordon Davisson el
1
→ grgarside: ten cuidado con los efectos de grep -i "listen"tus 2 ejemplos.
dan
1
Con GNU netstat, opcionalmente puede enumerar el pid del proceso que abrió cada puerto. ¿Hay alguna forma de obtener ese comportamiento con BSD netstattambién?
Chris
2
Acabo de hacerlo, resulta que la -vbandera enciende eso. El pid estará en la penúltima columna.
Chris
64

tal vez puedas usar lsof:

lsof -Pn -i4

-i4 significa solo mostrar la dirección ipv4 y los puertos -P y -n salida rápida

salida 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)
Strivescript
fuente
2
¿Qué hace este comando?
nohillside
3
lsofEnumera los archivos abiertos. Los zócalos de red cuentan como archivos, por lo que cada zócalo de red abierto (ya sea en escucha o en uso activo) aparecerá en la lista lsof.
Craig Trader
También muestra la identificación del proceso (netstat no)
lib
1
lsof -Pn -i6para IPV6
Jared Burrows
2
Al menos en mi máquina, esta respuesta tarda 0.1s, mientras que @ grgarside es 28+ s. La diferencia es el -i4cambio, para mirar solo las direcciones IPv4.
Davor Cubranic
8

El método más simple es 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     

... sin ningún filtro agregado, para obtener los encabezados correctos, y ver los dos servidores escuchando, y las conexiones ya establecidas en ambas direcciones. En este ejemplo, la primera línea muestra una conexión desde mi Mac hacia 17.172.233.109, que además:

whois 17.172.233.109

me enseñó que se encuentra en Apple.

dan
fuente
6

Primero, no soy un experto en BSD, pero al igual que el OP, quería el equivalente aproximado de ejecutar lo siguiente en un cuadro * nix, o algo parecido:

netstat -tulpn

Leí otras preguntas / respuestas que ofrecen lsof * y netstat * en MacOS, y todavía quería algo con una salida más compacta. Entonces, esto es lo que preparé rápidamente:

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 "|"

Es un poco exagerado, así que agregué color a la salida por si acaso. Como no voy a poder recordar, ni quiero escribir, este gigante. Lo puse en una función bash y luego solo lo llamo cuando es necesario. Aquí se dice la función 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 "|"
}

Tengo una pequeña colección de estas funciones de conveniencia en un archivo que obtengo de ~ / .bash_profile, o ~ / .zshrc. Esto se está agregando a la colección. Sería interesante ver otras oportunidades para hacer esto más agradable / delgado.

Salida de muestra:

> 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
kroolk
fuente
No publique gifs de Terminal bot y pegue el texto aquí formateado como código. Es difícil copiarlo y también es difícil de leer si necesita fuentes grandes
user151019
La imagen no es un gif, es solo una pantalla que muestra el resultado. Si hace clic, verá que es un PNG. Alojado en imgur ... pero supongo que eso es lo que StackExchange predetermina. De todos modos, si estás buscando una captura de pantalla diferente, puedo volver a tomarla.
kroolk
OK en mi comentario reemplazar GIF por captura de pantalla, no importa qué formato. El punto es que debería ser texto
user151019
Desde que eliminó el comando largo de la salida de muestra, en realidad ahora funcionaría mejor como una captura de pantalla, ya que no hay nada que deba copiarse de él, y dado que también puede recortar mejor que antes.
mwfearnley