Como revisar los puertos TCP/IP abiertos por aplicaciones o servicios

Esta es una pregunta que constantemente me hacen y es en verdad muy sencillo. Es una situación típica que al instalar una nueva aplicación, esta no suba porque un puerto que necesita abrir esta siendo usada por otra aplicación pero como hago para saber cual puerto y cual aplicación para cambiarlos.

La primero que se le ocurre a muchos es mirar el Task Manager, pero este solo muestra los procesos activos pero no da ninguna indicación de los puertos abiertos por dichos procesos. Una forma muy sencilla y sin requerir software adicional es usar el comando netstat y combinarlo con la información que muestra el Task Manager. Primero veamos el comando netstat, para mostrar las ayudas en una ventana de comando ejecutamos netstat /? y esto es lo que conseguimos:

Displays protocol statistics and current TCP/IP network connections.

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]

-a Displays all connections and listening ports.
-b Displays the executable involved in creating each connection or
listening port. In some cases well-known executables host
multiple independent components, and in these cases the
sequence of components involved in creating the connection
or listening port is displayed. In this case the executable
name is in [] at the bottom, on top is the component it called,
and so forth until TCP/IP was reached. Note that this option
can be time-consuming and will fail unless you have sufficient
permissions.
-e Displays Ethernet statistics. This may be combined with the -s
option.
-f Displays Fully Qualified Domain Names (FQDN) for foreign
addresses.
-n Displays addresses and port numbers in numerical form.
-o Displays the owning process ID associated with each connection.
-p proto Shows connections for the protocol specified by proto; proto
may be any of: TCP, UDP, TCPv6, or UDPv6. If used with the -s
option to display per-protocol statistics, proto may be any of:
IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP, or UDPv6.
-r Displays the routing table.
-s Displays per-protocol statistics. By default, statistics are
shown for IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP, and UDPv6;
the -p option may be used to specify a subset of the default.
-t Displays the current connection offload state.
interval Redisplays selected statistics, pausing interval seconds
between each display. Press CTRL+C to stop redisplaying
statistics. If omitted, netstat will print the current
configuration information once.

Algo curioso es que en las ayudas de microsoft la opción -b no se presenta, creo que fue agregada en un service pack. Antes de la opción -b lo que yo hacia era ejecutar el comando netstat con las opciones -noa así:

netstat -noa

Con estas tres banderas los datos que nos aparecen son estos:

Netstat01

Protocolo (TCP o UDP), Dirección IP local, Dirección IP Remota, estado y PID (Process ID). Este último nos indica cual es el identificado del proceso que esta abriendo el puerto. Pero con el identificador del proceso todavia no sabemos el nombre del proceso y es aqui donde entra el Task Manager. Si abrimos el Task Manager (Control + Alt + Del), vemos la lista de los procesos y tambien podemos ver el PID. Por defecto esta columna (PID) no aparece en la lista así que debemos agregarla, para ello hacermos clic en el tab Processes y entramos a View | Select Columns en el menú. Seleccionamos la columna PID (Process Identifier) y hacemos clic en OK.

Netstat02

Ahora podemos asociar el PID de nuestro comando netstat con el PID de la ventana Task Manager y ya tenemos el nombre del proceso.

Podemos tambien usar la opción -b y no necesitamos al Task Manager pero requerimos ejecutar la ventana de comandos con usuario administrador, si es que estamos usando Windows Vista como nuestro sistema operativo, el comando netstat con la opción -b requiere elevación. Nuestro comando sería:

netstat -bnoa

Netstat03

Este comando nos muestra además de la información que ya habiamos mencionado, el nombre del proceso, bastante mas rápido y directo que con el Task Manager pero requiere elevación en Vista.

Tags: , ,

  • BUENA TARDE, ESTA SUPER EXCELENTE EL TUTORIAL SOBRE EL NETSTAT. MI INQUIETUD CARLOS ES: HABRIA UNA POSIBILIDAD DE LIBERAR LOS PUERTOS QUE APARECEN Y UNA PC CUALQUIERA O EN MI CASO CON SO WIN2000 PROFESSIONAL, O CAMBIAR EL ESTADO DEL PUERTO PARA QUE ESTE LIBRE PARA OTRA APLICACION. SERIA DE MUY BUENA AYUDA ESE DATO, YA QUE EN MI CASO MANEJO 13APLICATIVOS A LA VEZ EN EJECUCION QUE SE CONECTAN A UNA BASE DE DATOS EXTERNA, Y LLEGA UN MOMENTO EN QUE SE PIERDE LA CONEXION Y CUANDO VOY A EJECUTAR NUEVAMENTE EL APLICATIVO ME ARROJA, “SERVIDOR NO DISPONIBLE O BASE DE DATOS INCORRECTA”, Y LO QUE ES PEOR, CUANDO DESEO INGRESAR A MI RED LOCAL, NO ME PERMITE HACERLO. FINALMENTE DESPUES DE TODO ME TOCA REINICIAR LA MAQUINA, Y CUANDO VUELVO A EJECUTAR LAS APLICACIONES, TODAS RESPONDEN CORRECTAMENTE. ESTABA INDAGANDO POR ESTE TEMA PARA LOGRAN ENCONTRAR UNA SOLUCION.
    MUCHAS GRACIAS Y EN ESPERA DE TUS COMENTARIOS. VIA CORREO

  • Hola Daniel, no habia contestado antest porque andaba de vacaciones. En realidad quienes usan los puertos son las aplicaciones y debes decirle a cada aplicación (si es posible) que puerto usar o apagar la aplicación si es que necesitas el puerto libre para otra cosa. Lo de liberar los puertos entonces depende de las aplicaciones y no creo que exista algo para liberar puertos porque si.

  • Miguel Angel

    Excelente tip.
    Pojala puedas seguir publicando mas cosas utilez del viejo Windows. Saludos desde Mexico

  • Miguel Angel, esa es la idea, el problema es el tiempo pero seguire intentando. Saludos

  • Ing. Carlos
    Necestio liberar el puerto 443 y segun su procedimiento quien utiliza ese puerto es: System
    Como puedo liberar puertos de System?

    Saludos

  • Victor, 443 es el puerto utilizado normalmente para comunicaciones HTTPS o RPC over HTTP, asi que es posible que se deba a que tienes un servidor web (IIS) que esta configurado para usar ssl o SharePoint Portal Server o tal vez Exchange Server, todos estos servicios servidores usan este puerto. Tienes algunos de estos paquetes instalado en tu maquina? Saludos

  • ed

    Hola Carlos,

    Estoy tratando de montar un servidor FTP con una aplicacion llamada 3CDaemon, cada vez que abro la aplicacion me sale un mensaje el cual dice:

    FTP Server: Couldn´t bind socket: Winsock error 10048
    Perhaps another FTP server is running?

    ya aplique el proceso anteriormente mencionado pero no puede ver o encontrar la aplicacion o servicio que me este utilizando el puerto de FTP (21) al igual que otros puertos los cuales deberian de estar disponibles y a los que hace referencia ese error de ´Winsock error 10048´ , 119 (for news)25
    (SMTP)110 (POP.

    Creo que es importante mencionarte que yo tenia configurado el servicio FTP desde servicios y aplicaciones/ servicios de internet information server / sitios FTP / sitios FTP predeterminados , este lo borre (es decir borre el sitio FTP que previamente habia configurado aqui) y procedi a instalar el 3CDaemon. Cualquier ayuda para poder utilizar el FTP de este software eliminando ese error, o cualquier informacion alternativa de poder ver que otra aplicacion hace uso del puerto 21, estaria infinitamente agradecido,

    Saludos cordiales,

  • Ed, la verdad es que no se como ayudarte. Con el procedimeinto que explique deberias ver quien usa alguno de los puertos usados por tu aplicación 3CDaemon. Otra cosa que podrias intentar es cambiar en tu aplicación los puertos que usa, lo puedes hacer uno por uno y asi ver cual es el puerto que tiene conflictos. Cordial Saludo

  • Tovarich

    Hola a todos,

    para poder tatar la info que nos dá “netstat -bnoa” yo creo un archivo “c:puertos.txt” de esta forma:

    netstat -bnoa > c:\puertos.txt

    luego teneis que abrir el archivo txt para tratarlo, imprimirlo, etc.

    Saludos.

  • Muchas gracias, me sacó de un apuro y muy interesante.