¿Cómo puede averiguar qué proceso está escuchando en un puerto en Windows?
windows
networking
port
Solo lectura
fuente
fuente
Respuestas:
Nueva respuesta, powershell
Antigua respuesta, cmd
(Agregue -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 . ¡Se ve 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 múltiples 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 alcanzó TCP / IP. Tenga en cuenta que esta opción puede llevar mucho tiempo y fallará a menos que tenga permisos suficientes.
-n Muestra direcciones y números de puerto en forma numérica.
-o Muestra el ID del proceso propietario asociado con cada conexión.
fuente
1234
, puede usarlotasklist /fi "pid eq 1234"
para averiguar el nombre y otros detalles del proceso.Hay una GUI nativa para Windows:
O Ejecutar
resmon.exe
, o desde la pestaña de rendimiento del Administrador de tareas .fuente
Use TCPView si desea una GUI para esto. Es la antigua aplicación Sysinternals que Microsoft compró.
fuente
Para ventanas:
fuente
netstat -aon | find /i "abhören"
para alemán.FIND: Parameter format not correct
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)
Encuentra el nombre del proceso pid
fuente
Puede obtener más información si ejecuta el siguiente comando:
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/i
ignorar mayúsculas y minúsculas; de lo contrario, escriba find "LISTENING".| find "port"
limitará los resultados solo 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.fuente
FIND: Parameter format not correct
. Debe agregar un espacio después de los criterios de búsqueda. Esto te dejará connetstat -aon | find /i "listening" | find "1234 "
.{back tick}
" listening{back tick}
"" | find "{back tick}
" port{back tick}
" "(<- tenga en cuenta las citas escapadas - disculpe el términoback tick
ya que no puedo agregar el carácter real, ya que cree que es un recorte)Abra una ventana de símbolo del sistema (como Administrador) Desde "Inicio \ Cuadro de búsqueda" Ingrese "cmd", luego haga clic derecho en "cmd.exe" y seleccione "Ejecutar como administrador"
Ingresa el siguiente texto y luego presiona 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 múltiples 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 alcanzó TCP / IP. Tenga en cuenta que esta opción puede llevar mucho tiempo y fallará a menos que tenga permisos suficientes.
-n Muestra direcciones y números de puerto en forma numérica.
-o Muestra el ID del proceso propietario asociado con cada conexión.
Encuentra el puerto que estás escuchando en "Dirección local"
Mire el nombre del proceso directamente debajo de eso.
NOTA: Para encontrar el proceso en el Administrador de tareas
Tenga en cuenta el PID (identificador de proceso) junto al puerto que está viendo.
Abra el Administrador de tareas de Windows.
Seleccione la pestaña Procesos.
Busque el PID que anotó cuando realizó el netstat en el paso 1.
Si no ve una columna PID, haga clic en Ver / Seleccionar columnas. Seleccione PID.
Asegúrese de que esté seleccionado "Mostrar procesos de todos los usuarios".
fuente
Obtener PID y nombre de imagen
Use solo un comando:
dónde
9000
debe ser reemplazado por su número de puerto.La salida contendrá algo como esto:
Explicación:
itera a través de cada línea desde la salida del siguiente comando:
de cada línea,
%a
se extrae el PID ( el nombre no es importante aquí) (PID es el elemento5
th en esa línea) y se pasa al siguiente comandoSi desea omitir el encabezado y el retorno del símbolo del sistema , puede usar:
Salida:
fuente
findstr :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).Primero encontramos la identificación del proceso de esa tarea en particular que debemos eliminar para liberar el puerto:
Tipo
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. Supongamos que esto es 3312.
Ahora escribe
Ahora puede realizar una verificación cruzada escribiendo el
netstat
comando.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 derecho en el símbolo del sistema, y ejecutar como administrador)
fuente
Para obtener una lista de todos los ID de proceso de propiedad asociados con cada conexión:
Si desea matar algún proceso, tenga la ID y use este comando, de modo que el puerto quede libre
fuente
Es muy simple obtener el número de puerto de un PID en Windows.
Los siguientes son los pasos:
Vaya a ejecutar → escriba cmd → presione Enter.
Escribe el siguiente comando ...
(Nota: no incluya corchetes).
Presione Enter...
Luego, cmd le dará los detalles del servicio que se ejecuta en ese puerto junto con el PID.
Abra el Administrador de tareas y presione la pestaña de servicio y combine el PID con el del cmd, y listo.
fuente
Simplemente abra un shell de comandos y escriba (diciendo que su puerto es 123456):
Verás todo lo que necesitas.
Los encabezados son:
Esto es como se menciona aquí .
fuente
findstr 123456
(sin comillas) ofind "123456"
(con comillas). (@Josh)Para averiguar qué proceso específico (PID) está utilizando qué puerto:
Donde 1234 es el PID de su proceso. [Vaya a la pestaña Administrador de tareas → Servicios / Procesos para averiguar el PID de su aplicación.]
fuente
-n
bandera se configure dos veces.-ano
es suficiente.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 algún motivo y es un poco confuso. Sin embargo, siempre puede obtenerlo formateando la salida. La propiedad que busca esOwningProcess
.Si desea averiguar la ID del proceso que está escuchando en el puerto 443, ejecute este comando:
Formatee el resultado en una tabla con las propiedades que busca:
Si desea encontrar un nombre del proceso, ejecute este comando:
fuente
Si desea utilizar una herramienta GUI para hacer esto, está TCPView de Sysinternals .
fuente
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 .
fuente
Netstat:
-o proceso de propiedad
La herramienta Currports ayuda a buscar y filtrar
fuente
Abra el símbolo del sistema: inicio → Ejecutar →
cmd
, o menú de inicio → Todos los programas → Accesorios → Símbolo del sistema .Tipo
Reemplace
[port_number]
con el número de puerto real que desea verificar y presione Enter.Tipo
Reemplace el
[PID]
con el número del paso anterior y presione Enter.fuente
netstat -ao
ynetstat -ab
dirá la aplicación, pero si no es administrador del sistema, obtendrá "La operación solicitada requiere elevación".No es lo ideal, pero si usa el Explorador de procesos de Sysinternals puede ir a las propiedades de los procesos específicos y mirar la pestaña TCP para ver si están usando el puerto que le interesa. Es un poco como una aguja y un pajar cosa, pero tal vez ayude a alguien ...
fuente
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 hacerlo en TCPView). Esto a menudo soluciona los problemas de conectividad que tengo con Outlook y Lync después de cambiar las VPN. Con CurrPorts, también puede cerrar conexiones desde la línea de comandos con el parámetro "/ close".
fuente
Una solución de una sola línea que me ayuda es esta. Simplemente sustituya 3000 con su puerto:
Editar: cambiado
kill
aStop-Process
más lenguaje similar a PowerShellfuente
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
Siga estas herramientas: Desde cmd :
C:\> netstat -anob
con privilegios de administrador .Explorador de procesos
Descarga de proceso
Monitor de puerto
Todo de sysinternals.com.
Si solo desea conocer el proceso en ejecución y los subprocesos en 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:
El comando anterior mostrará una lista de todos los procesos en breve cada 5 segundos. Para saber más, simplemente puede ir con el
/?
comando de Windows, por ejemplo,Y así sucesivamente y así sucesivamente. :)
fuente
Utilizar:
Esto muestra el PID del proceso que se ejecuta en un puerto en particular.
Tenga en cuenta la ID del proceso y vaya al Administrador de tareas y 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.
fuente
Para aquellos que usan PowerShell, intente
Get-NetworkStatistics
:fuente
Programáticamente, necesita cosas de iphlpapi.h , por ejemplo GetTcpTable2 (). Las estructuras como MIB_TCP6ROW2 contienen el PID del propietario.
fuente
Usando PowerShell ... ... este sería su amigo (reemplace 8080 con su número de puerto):
Salida de muestra
Entonces, en este ejemplo, tnslsnr.exe (base de datos OracleXE) está escuchando en el puerto 8080.
Explicacion rapida
Select-String
se usa para filtrar la salida larga denetstat
las líneas relevantes.-Pattern
prueba cada línea contra una expresión regular.-Context 0,1
generará 0 líneas iniciales y 1 línea posterior para cada coincidencia de patrón.fuente
Para Windows, si desea encontrar cosas escuchando o conectado al puerto 1234, ejecute lo siguiente en el indicador de cmd:
fuente
Utilice el siguiente script por lotes que toma el nombre de un proceso como argumento y proporciona
netstat
resultados para el proceso.fuente
Basado en respuestas con información y kill , para mí es útil combinarlas en un solo comando . Y puede ejecutar esto desde cmd para obtener información sobre el proceso que escucha en un puerto determinado (ejemplo 8080):
O si quieres matarlo:
También puede poner esos comandos en un archivo bat (serán ligeramente diferentes, reemplácelos
%i
por%%i
):Expediente
portInfo.bat
Expediente
portKill.bat
Entonces usted desde cmd puede hacer esto:
portInfo.bat 8080
o
portKill.bat 8080
fuente
.\portInfo.bat 800
en PowerShell le dan algo como esto:C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
portInfo.bat
en un terminal de PowerShell , luego lo ejecuté.\portInfo.bat 8080
. El resultado fue solo el contenido del archivo por lotes. Muy bien, estoy pasando por alto algo. Tenga en cuenta que estoy usando PowerShell 6.2.3 en Windows 10. También lo probé en un símbolo del sistema normal, pero el resultado fue el mismo: salida del contenido del script. Estoy seguro de que me falta una información crucial para que esto funcione./nh
:@tasklist /nh /fi "pid eq %i"
? Y precisamente la puerta:Findstr ":8080"
En mi caso, el puerto (3000) no se utilizó en absoluto y no es visible en netstat. ¡Pero! El desinstalador Docker para Windows ha resuelto el problema.
fuente