¿Cómo puede saber qué proceso está escuchando en un puerto TCP o UDP en Windows?

¿Cómo puede saber qué proceso está escuchando en un puerto TCP o UDP en Windows?

preguntado el 07 de septiembre de 08 a las 04:09

Currports es una herramienta que ayuda a buscar + filtrar también nirsoft.net/utils/cports.html -

Me encontré con esto mientras intentaba ejecutar Tomcat en modo de depuración bajo IntelliJ, la mejor solución para mí resultó ser cambiar la configuración de transporte de depuración (Archivo-> Configuración-> Construir / exe / implementar-> Depurador) de "socket" a "memoria compartida". -

netstat -aof | findstr :8080 (Cambie 8080 para cualquier puerto) -

@DavidJesus no muestra el proceso en Windows 10. -

30 Respuestas

Nueva respuesta, powershell

TCP

Get-Process -Id (Get-NetTCPConnection -LocalPort YourPortNumberHere).OwningProcess

UDP

Get-Process -Id (Get-NetUDPEndpoint -LocalPort YourPortNumberHere).OwningProcess

Respuesta anterior, cmd

 C:\> netstat -a -b

(Agregar -n para evitar que intente resolver nombres de host, lo que lo hará mucho más rápido).

Tenga en cuenta la recomendación de Dane para TCPView. ¡Parece muy útil!

-a Muestra todas las conexiones y puertos de escucha.

-b Muestra el ejecutable involucrado en la creación de cada conexión o puerto de escucha. En algunos casos, los ejecutables conocidos albergan varios componentes independientes y, en estos casos, se muestra la secuencia de componentes involucrados en la creación de la conexión o el puerto de escucha. En este caso, el nombre del ejecutable está en [] en la parte inferior, en la parte superior está el componente al que llamó, y así sucesivamente hasta que se alcance TCP / IP. Tenga en cuenta que esta opción puede llevar mucho tiempo y fallará a menos que tenga los permisos necesarios.

-n Muestra direcciones y números de puerto en forma numérica.

-o Muestra el ID del proceso propietario asociado con cada conexión.

respondido 23 nov., 20:10

y taskkill / PID para luego terminar el proceso, usando / F si es apropiado. - BitMask777

Es posible que deba ejecutar su shell de línea de comandos como administrador, de lo contrario, puede recibir un mensaje de error sobre privilegios insuficientes. Utilice la opción "Ejecutar como administrador" al hacer clic con el botón derecho en cmd.exe. - Gruber

Funciona pero requiere un permiso elevado. Mayús + clic derecho en el icono de comando -> ejecutar como administrador - Cristian Bongiorno

Habiendo obtenido el PID, digamos que es 1234 - entonces puedes usar tasklist /fi "pid eq 1234" para averiguar el nombre y otros detalles del proceso. - Steve Cámaras

@RodionSychev El comando de powershell espera que reemplace "portNumber" con el número de puerto que está buscando. El error indica que "portNumber" no es un número. - MattOG

Hay una GUI nativa para Windows:

  • Menú de inicio → todos los programasAccesoriosHerramientas del sistemaMonitor de recursos

Or Corral resmon.exe, o de Administrador de tareas pestaña de rendimiento.

Ingrese la descripción de la imagen aquí

respondido 13 nov., 19:09

También muestra el estado del firewall del enlace (última columna). Muy util. - Rafael

Debe ser administrador (o pertenecer a ese grupo) para ejecutar esto. - KrishPrabakar

@bcorso, ¿Qué vincula a "dirección no especificada"¿significa? - marcapasos

También se puede iniciar desde la pestaña Rendimiento del Administrador de tareas, al menos en Windows 10. (No he verificado otras versiones). Mathieu K.

El comentario de @ user4836454 anterior NO es correcto: Resource Monitor SÍ muestra puertos con oyentes, incluso si no hay conexión de red a estos puertos. Basta con mirar la sección "Puertos de escucha" en lugar de la sección "Conexiones TCP". - Jpsy

Para Windows:

netstat -aon | find /i "listening"

Respondido 09 ago 19, 21:08

+1 Pero tenga en cuenta que si su Windows se ejecuta en un idioma que no sea inglés, tendrá que cambiar "escuchar" al término nativo. P.ej netstat -aon | find /i "abhören" para alemán. - Levita

En mi caso no funcionó tal vez debido al signo de comillas, pero la solución netstat -aon | findtr LISTENING funciona perfectamente! - El Padrino

Esto funciona sin requerir privilegios elevados por lo que se votó a favor. - Vlad Schnakovszki

Recibo un error al intentar ejecutar este comando en W10 15063.729 con PowerShell: FIND: Parameter format not correct - Nicke Manarín

¿Qué importancia tiene esta respuesta para "averiguar qué proceso [nombre] está escuchando en un puerto de Windows?" - Pawel Cioch

Utiliza TCPView si quieres una GUI para esto. Es el viejo sysinternals aplicación que compró Microsoft.

respondido 13 nov., 19:09

En mi opinión, esta es la mejor opción, especialmente porque todos los procesos están en la misma lista y puede cerrar los procesos directamente haciendo clic derecho en ellos. - andreas lundgren

Además, ¡esto no requiere privilegios de administrador! - Janac Meena

El modificador -b mencionado en la mayoría de las respuestas requiere que tenga privilegios administrativos en la máquina. ¡Realmente no necesita derechos elevados para obtener el nombre del proceso!

Encuentre el pid del proceso que se ejecuta en el número de puerto (por ejemplo, 8080)

netstat -ano | findStr "8080"

Encuentra el nombre del proceso por pid

tasklist /fi "pid eq 2216"

buscar proceso por puerto TCP / IP

Respondido 19 Jul 18, 12:07

Puede obtener más información si ejecuta el siguiente comando:

netstat -aon | find /i "listening" |find "port"

el uso del comando 'Buscar' le permite filtrar los resultados. find /i "listening" mostrará solo los puertos que están 'escuchando'. Tenga en cuenta que necesita el /i para ignorar las mayúsculas y minúsculas, de lo contrario, debería escribir find "LISTENING". | find "port" limitará los resultados a aquellos que contengan el número de puerto específico. Tenga en cuenta que en esto también filtrará los resultados que tengan el número de puerto en cualquier lugar de la cadena de respuesta.

respondido 13 nov., 19:09

FWIW al intentar ejecutar esto en PowerShell v2.0 produce un error FIND: Parameter format not correct. Debe agregar un espacio después de los criterios de búsqueda. Esto te dejará con netstat -aon | find /i "listening" | find "1234 ". - uno mismo.

Reemplace "puerto" arriba con su puerto, ex "5000" - jbooker

@uno mismo. Sigo recibiendo ese error con PS 5.1, incluso después de agregar el espacio después de la tubería. ¿Sabes lo que está pasando? - Nicke Manarín

@NickeManarinin & @self primero cambian de powershell a cmd (simplemente escriba cmd y presione enter y luego rehaga el comando) o en powershell use este comando en su lugar: netstat -aon | find / i "{back tick}"escuchando{back tick}"" | buscar "{back tick}"Puerto{back tick}"" (<- observe las comillas de escape - disculpe el término back tick ya que no puedo agregar el personaje real ya que cree que es un recorte) - Tristán van Dam

  1. Abra una ventana del símbolo del sistema (como administrador) Desde "Inicio \ Cuadro de búsqueda" Ingrese "cmd", luego haga clic con el botón derecho en "cmd.exe" y seleccione "Ejecutar como administrador"

  2. Ingrese el siguiente texto y luego presione Enter.

    netstat -abno

    -a Muestra todas las conexiones y puertos de escucha.

    -b Muestra el ejecutable involucrado en la creación de cada conexión o puerto de escucha. En algunos casos, los ejecutables conocidos albergan varios componentes independientes y, en estos casos, se muestra la secuencia de componentes involucrados en la creación de la conexión o el puerto de escucha. En este caso, el nombre del ejecutable está en [] en la parte inferior, en la parte superior está el componente al que llamó, y así sucesivamente hasta que se alcance TCP / IP. Tenga en cuenta que esta opción puede llevar mucho tiempo y fallará a menos que tenga los permisos necesarios.

    -n Muestra direcciones y números de puerto en forma numérica.

    -o Muestra el ID del proceso propietario asociado con cada conexión.

  3. Busque el puerto en el que está escuchando en "Dirección local"

  4. Mire el nombre del proceso directamente debajo de eso.

NOTA: Para encontrar el proceso en el Administrador de tareas

  1. Tenga en cuenta el PID (identificador de proceso) junto al puerto que está mirando.

  2. Abra el Administrador de tareas de Windows.

  3. Seleccione la pestaña Procesos.

  4. Busque el PID que anotó cuando hizo el netstat en el paso 1.

    • Si no ve una columna PID, haga clic en Ver / Seleccionar columnas. Seleccione PID.

    • Asegúrese de que la opción "Mostrar procesos de todos los usuarios" esté seleccionada.

contestado el 15 de mayo de 17 a las 03:05

Obtener PID y nombre de imagen

Use solo un comando:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

sin que importe 9000 debe ser reemplazado por su número de puerto.

La salida contendrá algo como esto:

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

Explicación:

  • itera a través de cada línea desde la salida del siguiente comando:

    netstat -aon | findstr 9000
    
  • de cada línea, el PID (%a - el nombre no es importante aquí) se extrae (PID es el 5th elemento en esa línea) y pasado al siguiente comando

    tasklist /FI "PID eq 5312"
    

Si deseas omitir el encabezamiento y el regreso de la símbolo del sistema, puedes usar:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

Salida:

java.exe                      5312 Services                   0    130,768 K

Respondido 10 Feb 16, 17:02

Buena respuesta, pero deberías cambiarla afindstr :9000 de lo contrario, incluso encontrará aplicaciones que contengan el número (por ejemplo, cuando busque "80", también encontrará aplicaciones en el puerto 80, 800, 8000). - Radón8472

Primero encontramos el ID de proceso de esa tarea en particular que necesitamos eliminar para liberar el puerto:

Tipo

netstat -n -a -o

Después de ejecutar este comando en la línea de comandos de Windows (cmd), seleccione el pid que creo que es la última columna. Suponga que es 3312.

Ahora escribe

taskkill /F /PID 3312

Ahora puede realizar una verificación cruzada escribiendo el netstat mando.

NOTA: a veces Windows no le permite ejecutar este comando directamente en CMD, por lo que primero debe seguir estos pasos:

Desde el menú de inicio -> símbolo del sistema (haga clic con el botón derecho en el símbolo del sistema y ejecútelo como administrador)

respondido 13 nov., 19:09

Para obtener una lista de todos los ID de proceso de propiedad asociados con cada conexión:

netstat -ao |find /i "listening"

Si desea matar algún proceso, tenga la ID y use este comando, para que el puerto quede libre

Taskkill /F /IM PID of a process

respondido 13 nov., 19:09

esto no tiene en cuenta los puertos UDP de escucha - Evandrix

Es muy sencillo obtener el número de puerto de un PID en Windows.

Los siguientes son los pasos:

  1. Vaya a ejecutar → escriba cmd → presione Enviar.

  2. Escribe el siguiente comando ...

    netstat -aon | findstr [port number]
    

    (Nota: no incluya corchetes).

  3. Prensa Enviar...

  4. Luego, cmd le dará los detalles del servicio que se ejecuta en ese puerto junto con el PID.

  5. Abra el Administrador de tareas y presione la pestaña de servicio y haga coincidir el PID con el del cmd, y eso es todo.

respondido 13 nov., 19:09

Para saber qué proceso específico (PID) está usando qué puerto:

netstat -anon | findstr 1234

Donde 1234 es el PID de su proceso. [Vaya a Administrador de tareas → pestaña Servicios / Procesos para averiguar el PID de su aplicación].

respondido 13 nov., 19:09

Cabe señalar que no necesita el -n bandera colocada dos veces. -ano es suficiente. - mwieczorek

Con PowerShell 5 en Windows 10 o Windows Server 2016, ejecute Get-NetTCPConnection cmdlet. Supongo que también debería funcionar en versiones anteriores de Windows.

La salida predeterminada de Get-NetTCPConnection no incluye ID de proceso por alguna razón y es un poco confuso. Sin embargo, siempre puede obtenerlo formateando la salida. La propiedad que busca es OwningProcess.

  • Si desea averiguar el ID del proceso que está escuchando en el puerto 443, ejecute este comando:

      PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
    
      LocalAddress   : ::
      LocalPort      : 443
      RemoteAddress  : ::
      RemotePort     : 0
      State          : Listen
      AppliedSetting :
      OwningProcess  : 4572
      CreationTime   : 02.11.2016 21:55:43
      OffloadState   : InHost
    
  • Formatee la salida en una tabla con las propiedades que busca:

      PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
    
      LocalAddress LocalPort  State OwningProcess
      ------------ ---------  ----- -------------
      ::                 443 Listen          4572
      0.0.0.0            443 Listen          4572
    
  • Si desea averiguar el nombre del proceso, ejecute este comando:

      PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
    
      Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
      -------  ------    -----      -----     ------     --  -- -----------
      143      15     3448      11024              4572   0 VisualSVNServer
    

Respondido el 04 de Septiembre de 20 a las 11:09

Simplemente abra un shell de comandos y escriba (diciendo que su puerto es 123456):

netstat -a -n -o | find "123456"

Verás todo lo que necesitas.

Los encabezados son:

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

Esto es como se mencionó aquí.

respondido 13 nov., 19:09

FYI / para cualquier persona interesada: es findstr 123456 (sin comillas) o find "123456" (con comillas). (@Josh) - kevin cruijssen

Si desea utilizar una herramienta GUI para hacer esto, hay TCPView de Sysinternals.

respondido 13 nov., 19:09

Netstat:

  • -a muestra todos los puertos de conexión y escucha
  • -b muestra ejecutables
  • -n dejar de resolver nombres de host (forma numérica)
  • -o proceso de propiedad

    netstat -bano | findstr "7002"
    
    netstat -ano > ano.txt 
    

La Pasarelas ayuda a buscar y filtrar

respondido 13 nov., 19:09

  1. Abra el símbolo del sistema - Inicio → Corralcmd, o menú de inicio → todos los programasAccesoriosSímbolo del sistema.

  2. Tipo

    netstat -aon | findstr '[port_number]'
    

Vuelva a colocar la [port_number] con el número de puerto real que desea verificar y presione Enviar.

  1. Si alguna aplicación está utilizando el puerto, se mostrará el detalle de esa aplicación. El número, que se muestra en la última columna de la lista, es el PID (ID de proceso) de esa aplicación. Toma nota de esto.
  2. Tipo

    tasklist | findstr '[PID]'
    

Vuelva a colocar la [PID] con el número del paso anterior y presione Enviar.

  1. Se le mostrará el nombre de la aplicación que está usando su número de puerto.

respondido 13 nov., 19:09

En Win 10: su comando en el paso 2 y el paso 4 no funciona a menos que reemplace comillas simples por comillas dobles. Debería decir netstat -aon | Findstr "[número_puerto]" - Leonardo lopez

Esta solución no requiere un permiso elevado. ¡Tks! - totalmente

Escribe el comando: netstat -aon | findstr :DESIRED_PORT_NUMBER

Por ejemplo, si quiero encontrar el puerto 80: netstat -aon | findstr :80

Esta respuesta se publicó originalmente en esta pregunta.

respondido 13 nov., 19:09

netstat -ao y netstat -ab le indicará la aplicación, pero si no es un administrador del sistema, obtendrá "La operación solicitada requiere elevación".

No es ideal, pero si usa Sysinternals ' Process Explorer puede ir a las propiedades de procesos específicos y mirar la pestaña TCP para ver si están usando el puerto que le interesa. Es una especie de aguja y pajar, pero tal vez ayude a alguien ...

respondido 13 nov., 19:09

Si no es un administrador, no podrá usar el Explorador de procesos (o incluso el Administrador de tareas de Windows> Administrador de recursos) para obtener esta información de cualquier proceso que no sea suyo para empezar. - Abel

Recomiendo CurrPorts de NirSoft.

CurrPorts puede filtrar los resultados mostrados. TCPView no tiene esta característica.

Nota: Puede hacer clic con el botón derecho en la conexión de socket de un proceso y seleccionar "Cerrar conexiones TCP seleccionadas" (también puede hacer esto en TCPView). Esto a menudo soluciona problemas de conectividad que tengo con Outlook y Lync después de cambiar de VPN. Con CurrPorts, también puede cerrar conexiones desde la línea de comando con el parámetro "/ close".

respondido 02 nov., 17:17

Una solución de una sola línea que me ayuda es esta. Simplemente sustituya 3000 con su puerto:

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id

Editar: cambiado kill a Stop-Process para más lenguaje similar a PowerShell

Respondido el 16 de diciembre de 19 a las 21:12

Probablemente no desee eliminar el proceso automáticamente. Separaría ese comando de matar y lo explicaría. No quiero que un usuario pobre copie y pegue eso sin pensarlo detenidamente. - TinkerTenorSoftwareChico

Y si opta por la solución completa de PowerShell, cambie kill a Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process - CubanoX

Siga estas herramientas: Desde cmd: C:\> netstat -anob con Administrador privilegios.

Process Explorer

Volcado de proceso

Monitor de puerto

Todo de sysinternals.com.

Si solo desea conocer el proceso en ejecución y los subprocesos de cada proceso, le recomiendo aprender sobre wmic. Es una maravillosa herramienta de línea de comandos, que le brinda mucho más de lo que puede saber.

Ejemplo:

c:\> wmic process list brief /every:5

El comando anterior mostrará una lista de todos los procesos en breve cada 5 segundos. Para saber más, puedes ir con /? comando de windows, por ejemplo,

c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?

Y así sucesivamente y así sucesivamente. :)

Respondido 26 ago 20, 20:08

PortMon (el enlace detrás de Port Monitor) es para monitorear de serie y paralelo puertos, no puertos de red. - James

Uso:

netstat -a -o

Esto muestra el PID del proceso que se ejecuta en un puerto en particular.

Tenga en cuenta el ID del proceso y vaya al Administrador de tareas y a la pestaña de servicios o detalles y finalice el proceso que tiene el mismo PID.

Por lo tanto, puede matar un proceso que se ejecuta en un puerto en particular en Windows.

respondido 13 nov., 19:09

Para aquellos que usan PowerShell, intente Get-NetworkStatistics:

> Get-NetworkStatistics | where Localport -eq 8000


ComputerName  : DESKTOP-JL59SC6
Protocol      : TCP
LocalAddress  : 0.0.0.0
LocalPort     : 8000
RemoteAddress : 0.0.0.0
RemotePort    : 0
State         : LISTENING
ProcessName   : node
PID           : 11552

respondido 13 nov., 19:09

Programáticamente, necesitas cosas de iphlpapi.h, Por ejemplo ObtenerTcpTable2(). Estructuras como MIB_TCP6ROW2 contienen el PID del propietario.

respondido 05 nov., 18:18

Uso de PowerShell ... ... este sería su amigo (reemplace 8080 con su número de puerto):

 netstat -abno | Select-String -Context 0,1 -Pattern 8080

Salida de muestra

>   TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING         2920
   [tnslsnr.exe]
>   TCP    [::]:8080              [::]:0                 LISTENING         2920
   [tnslsnr.exe]

Entonces, en este ejemplo, tnslsnr.exe (base de datos OracleXE) está escuchando en el puerto 8080.

Explicacion rapida

  • Select-String se utiliza para filtrar la salida larga de netstat para las líneas relevantes.
  • -Pattern prueba cada línea con una expresión regular.
  • -Context 0,1 generará 0 líneas iniciales y 1 línea final para cada coincidencia de patrón.

respondido 13 nov., 19:09

Para encontrar pid que usa el puerto 8000

netstat -aon | findstr '8000'

Para matar ese proceso en Windows

taskkill /pid pid /f

donde pid es la identificación del proceso que obtienes desde el primer comando

Respondido 14 Jul 20, 07:07

netstat -aon | Findstr 8000. No es necesario el signo de comillas. - Ali Rasouli

PID es el valor devuelto por el primer comando en la última columna. - Pran Kumar Sarkar

Para Windows, si desea encontrar cosas escuchando o conectadas al puerto 1234, ejecute lo siguiente en el indicador de cmd:

netstat -na | find "1234"

Respondido el 24 de enero de 17 a las 21:01

En caso de que alguien necesite un equivalente para macOS como yo, aquí está:

lsof -i tcp:8080

Después de obtener el PID del proceso, puede matarlo con:

kill -9 <PID>

Respondido el 30 de enero de 21 a las 02:01

Utilice el siguiente script por lotes que toma un nombre de proceso como argumento y proporciona netstat salida para el proceso.

@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End

:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------

netstat -ano |findstr %z%
goto :eof

:End

respondido 13 nov., 19:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.