¿Alguien sabe cómo cerrar un socket TCP o UDP para una sola conexión a través de la línea de comandos de Windows?
Buscando en Google sobre esto, vi a algunas personas preguntando lo mismo. Pero las respuestas parecían una página manual de comandos netstat o netsh centrados en cómo monitorear los puertos. No quiero respuestas sobre cómo monitorearlos (ya lo hago). Quiero cerrarlos / matarlos.
EDITAR, para aclarar: supongamos que mi servidor escucha el puerto TCP 80. Un cliente realiza una conexión y se le asigna el puerto 56789. Luego, descubro que esta conexión no es deseada (por ejemplo, este usuario está haciendo cosas malas, les pedimos que se detuvieran, pero la conexión no se cortó en algún momento). Normalmente, agregaría un firewall para hacer el trabajo, pero esto llevaría algún tiempo y estaba en una situación de emergencia. Eliminar el proceso que posee la conexión es realmente una mala idea aquí porque esto eliminaría el servidor (todos los usuarios perderían la funcionalidad cuando solo deseamos desconectar selectivamente y temporalmente esta conexión).
fuente
Respuestas:
Si, esto es posible. No tiene que ser el proceso actual que posee el socket para cerrarlo. Considere por un momento que la máquina remota, la tarjeta de red, el cable de red y su sistema operativo pueden hacer que se cierre el zócalo.
Tenga en cuenta también que el software Fiddler y Desktop VPN pueden insertarse en la pila de la red y mostrarle todo su tráfico o redirigir todo su tráfico.
Entonces, todo lo que realmente necesita es que Windows proporcione una API que lo permita directamente, o que alguien haya escrito un programa que funcione de manera similar a una VPN o Fiddler y le brinde una forma de cerrar los enchufes que lo atraviesan.
Hay al menos un programa ( CurrPorts ) que hace exactamente esto y lo usé hoy con el fin de cerrar sockets específicos en un proceso que se inició antes de que se iniciara CurrPorts. Para hacer esto, debe ejecutarlo como administrador, por supuesto.
Tenga en cuenta que probablemente no sea posible hacer que un programa no escuche en un puerto (bueno, es posible, pero esa capacidad se conoce como firewall ...), pero no creo que se haya preguntado aquí. Creo que la pregunta es "¿cómo cierro selectivamente una conexión activa (socket) al puerto en el que mi programa está escuchando?". La redacción de la pregunta está un poco apagada porque se proporciona un número de puerto para la conexión de cliente entrante no deseada y se la denominó "puerto", pero está bastante claro que era una referencia a ese socket y no al puerto de escucha.
fuente
abierto
cmd
escribir
netstat -a -n -o
encontrar
TCP [the IP address]:[port number] .... #[target_PID]#
(lo mismo para UDP)(Por cierto,
kill [target_PID]
no funcionó para mí)CTRL + ALT + SUPRIMIR y elija "iniciar administrador de tareas"
Haga clic en la pestaña "Procesos"
Habilite la columna "PID" yendo a: Ver> Seleccionar columnas> Marque la casilla para PID
Encuentre el PID de interés y "FINALIZAR PROCESO"
Ahora puede volver a ejecutar el servidor en [la dirección IP]: [número de puerto] sin problemas
fuente
System
proceso que maneja las conexiones de red de Windows.taskkill /pid 6168 /f
6168 es el pidPor ejemplo, desea liberar el puerto 8080 Luego, siga estos comandos.
¡Hecho!
fuente
Si conoce el puerto que desea liberar, puede ordenar su lista de netstat buscando el puerto específico como este:
Entonces el pid aparecerá en el derecho que puedes matar con taskkill.
También es posible que desee ver esta pregunta que es específicamente para localhost, pero creo que es relevante:
fuente
Utilice TCPView: http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx
o CurrPorts: https://www.nirsoft.net/utils/cports.html
Alternativamente, si no desea utilizar SOFTWARE EXTERNO (por cierto, estas herramientas no requieren instalación), simplemente puede ejecutar PRIMERO el comando netstat (preferiblemente netstat -b) y luego configurar la Política de seguridad local para bloquear la IP dirección de la máquina del usuario en cuestión, eso es lo que he estado haciendo con conexiones no deseadas o incluso desconocidas, que le permite hacer todo SIN NINGÚN SOFTWARE EXTERNO (todo viene con Windows) ...
fuente
Pruebe las herramientas TCPView (GUI) y Tcpvcon (línea de comando) de Sysinternals / Microsoft.
https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview
fuente
No puede cerrar sockets sin cerrar el proceso que posee esos sockets. Los sockets son propiedad del proceso que los abrió. Entonces, para encontrar el ID de proceso (PID) para Unix / Linux. Use netstat así:
Eso imprimirá algo como:
Donde -a imprime todos los sockets, -n muestra el número de puerto, -p muestra el PID, -l muestra solo lo que está escuchando (esto es opcional dependiendo de lo que esté buscando).
La información real que quieres es PID. Ahora podemos cerrar ese proceso haciendo:
Si está cerrando un servicio, es mejor usar:
Kill literalmente mata solo ese proceso y a todos los niños que posee. El uso del comando de servicio ejecuta el script de apagado registrado en el directorio init.d. Si usa kill en un servicio, es posible que no se inicie correctamente porque no lo cerró correctamente. Solo depende del servicio.
Desafortunadamente, Mac es diferente de Linux / Unix a este respecto. No puedes usar netstat. Lea este tutorial si está interesado en Mac:
http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open/
Y si está en Windows, use TaskManager para eliminar procesos y servicios de interfaz de usuario para cerrar servicios. Puede usar netstat en Windows al igual que Linux / Unix para identificar el PID.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true
fuente
Utilice CurrPorts (es gratuito y no se instala): http://www.nirsoft.net/utils/cports.html
/close <Local Address> <Local Port> <Remote Address> <Remote Port> {Process Name}
Ejemplos:
También tiene una buena GUI con funciones de búsqueda y filtro.
Nota: Esta respuesta es la respuesta y el comentario de Huntharo y JasonXA juntos y simplificados para que sea más fácil para los lectores. Los ejemplos provienen de la página web de CurrPorts.
fuente
No puede cerrar los sockets en su servidor sin poseer esos sockets, por lo tanto, no puede cerrar el socket sin tener el código ejecutándose en el proceso que posee el socket del servidor.
Sin embargo, hay otra opción que le dice al cliente que cierre su socket. Enviar un paquete TCP RST al puerto al que se conecta el cliente hará que el cliente pierda su conexión. Puede hacerlo con el escaneo RST usando nmap.
http://nmap.org/
fuente
Encontré la respuesta correcta a esta. Pruebe TCPView de Sysinternals, ahora propiedad de Microsoft. Puede encontrarlo en http://technet.microsoft.com/en-us/sysinternals/bb897437
fuente
wkillcx es una herramienta confiable de línea de comandos de Windows para eliminar conexiones TCP desde la línea de comandos que no se ha mencionado. Sin embargo, a veces tiene problemas con servidores con una gran cantidad de conexiones. A veces uso tcpview para asesinatos interactivos, pero wkillcx se puede usar en scripts.
fuente
Para cerrar el puerto , puede identificar el proceso que está escuchando en este puerto y eliminar este proceso.
fuente
puedes usar programas como tcpview de sysinternal. Supongo que puede ayudarte mucho tanto en el monitoreo como en la eliminación de conexiones no deseadas.
fuente
CurrPorts no funcionó para nosotros y solo pudimos acceder al servidor a través de ssh, por lo que tampoco TCPView. No pudimos matar el proceso tampoco, para no dejar caer otras conexiones. Lo que terminamos haciendo y aún no se sugirió fue bloquear la conexión en el Firewall de Windows. Sí, esto bloqueará todas las conexiones que se ajusten a la regla, pero en nuestro caso había una sola conexión (la que nos interesaba):
Reemplace la IP por la que necesita y agregue otras reglas si es necesario.
fuente
respuesta instantánea / factible / parcial : https://stackoverflow.com/a/20130959/2584794 a
diferencia de la respuesta anterior, donde se usó netstat -a -o -n, se debe buscar una lista increíblemente larga sin el nombre de la aplicación que usa puertos
fuente
Sí, es posible cerrar el puerto TCP o UDP, hay un comando en DOS
Espero que esto funcione para tí
fuente
Si está ejecutando en Windows 8, `Windows Server 2012 o superior con PowerShell v4 de arriba instalado, puede usar el siguiente script. Esto encuentra los procesos asociados con el puerto y los termina.
Código
Documentación:
NetStat
equivalente de PowerShellTaskKill
equivalente de PowerShellfuente