354 votos

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

Me gustaría listar mis puertos de red abiertos en Terminal con comandos incorporados. Como lo que sé, netstat es el comando a utilizar. Pero estoy luchando para obtener cualquier información útil de ella.

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

503voto

siva Puntos 23

netstat -anvp tcp | awk 'NR<3 || /LISTEN/'

Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)     rhiwat shiwat    pid   epid  state    options
tcp46      0      0  *.62981                *.*                    LISTEN      131072 131072  34548      0 0x0100 0x00000006
…

sudo lsof -PiTCP -sTCP:LISTEN

COMMAND     PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
BetterTou 34548 grgarside   20u  IPv4 0xa42a1d0ade5d3585      0t0  TCP *:62981 (LISTEN)
BetterTou 34548 grgarside   21u  IPv6 0xa42a1d0ad67f7a5d      0t0  TCP *:62981 (LISTEN)
…

2 votos

lsof liner es maravilloso ya que también revela los metadatos del proceso y del usuario y podría ser ejecutado sin sudo para reducir el alcance.

115voto

strivescript Puntos 21

tal vez puedas usar lsof:

lsof -Pn -i4

-i4 significa que sólo muestra 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)

4 votos

lsof lista los archivos abiertos. Los sockets de red cuentan como archivos, por lo que cada socket de red abierto (ya sea en escucha o en uso activo) será listado en lsof .

25voto

virtualadrian Puntos 211

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

netstat -tulpn

Leí otras preguntas/respuestas que ofrecían lsof* y netstat* en MacOS, y todavía quería algo con una salida más compacta. Por lo tanto, esto es lo que yo rápido reunido:

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 he añadido color a la salida por si acaso. Como no voy a ser capaz de recordar, o querer escribir, este behemoth. Lo puse en una función de bash y luego sólo llamar a que cuando sea necesario. Aquí está dicha 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 añade a la colección. Sería interesante ver otras oportunidades para hacer esto más agradable/limpio.

Muestra de salida:

> 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

13voto

Rich Puntos 2429

El método más sencillo es utilizar 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 añadido, para obtener las cabeceras correctas, y para ver ambos 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 una más:

whois 17.172.233.109

me enseñó que se encuentra en Apple.

1 votos

Esta respuesta es idéntica a la ya aceptada

0 votos

Si no entiendes la diferencia clave solo tienes que probarlo en un caso real de ataque y verás cuál es el mejor para tu defensa.

1 votos

Entiendo la diferencia clave, que es que la respuesta aceptada filtra sólo los puertos de escucha, y que es una mejor respuesta para esta pregunta "¿cómo puedo listar mis puertos abiertos?" Mirar todas las conexiones tiene valor en otros casos (como un ataque) pero eso no es lo que se está discutiendo aquí.

6voto

muelleth Puntos 11

Basado en la gran respuesta de @kroolk, yo sugeriría esta línea única:

netstat -Watnlv | grep LISTEN | awk '{"ps -ww -o args= -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 "|"

...que no truncará la salida de ps (al menos en mi mac) y dar el comando completo incluyendo los argumentos :-)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X