lunes, enero 04, 2010

Revisar Puertos

Como revisar los puertos TCP/IP abiertos por aplicaciones o servicios
September 14th, 2007
Goto comments Leave a comment

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:


Tomado de:
http://blog.cardila.com/2007/09/14/como-revisar-los-puertos-tcpip-abiertos-por-aplicaciones-o-servicios/

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.





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



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.

No hay comentarios: