Tengo una conexión inactiva en una aplicación que está en estado suspendido si la máquina del cliente está inactiva.
->192.168.1.214:49029 (ESTABLISHED)
¿Hay alguna manera de terminar esta opción desde la línea de comandos de Linux sin reiniciar el servidor?
Después de la búsqueda, encontré una solución llamada tcpkill. Pero no funcionará para mí. Como bloquea permanentemente esa ip.
ss
comando es mucho más fácil y más general que las demás.Respuestas:
Originalmente de: http://rtomaszewski.blogspot.sk/2012/11/how-to-forcibly-kill-established-tcp.html
Para "matar" un socket, debe enviar un paquete de restablecimiento de TCP. Para enviarlo (y ser aceptado por el otro lado), debe conocer el número de secuencia TCP real.
1) El
tcpkill
método ya mencionado aprende el número SEQ olisqueando pasivamente en la red y esperando que lleguen los paquetes válidos de esta conexión. Luego usa el número SEQ aprendido para enviar paquetes RSET a ambos lados. Sin embargo, si la conexión está inactiva / colgada y no fluyen datos, no hará nada y esperará para siempre.2) Otro método usa el script perl llamado
killcx
( enlace a Sourceforge ). Esto envía activamente paquetes SYN falsificados y aprende el número SEQ de la respuesta. Luego envía paquetes RSET de la misma manera quetcpkill
.Alternativamente, el enfoque (basado en lo que desea lograr) es usar el
gdb
depurador para adjuntar a un proceso que posee este socket / conexión y emitirclose()
syscall en su nombre, como se detalla en esta respuesta .Si desea lidiar solo con conexiones colgadas (el otro lado está muerto), hay varios tiempos de espera (TCP keepalive, por ejemplo), que deberían cerrar automáticamente dichas conexiones si se configuran correctamente en el sistema.
fuente
tcpkill
podría hacerlo por ti. En Ubuntu está en eldsniff
paquete.Algo como:
(o alguna otra
tcpdump
expresión similar para saber qué conexión matar).fuente
En linux kernel> = 4.9 puede usar el
ss
comando de iproute2 con clave-K
el kernel debe compilarse con la
CONFIG_INET_DIAG_DESTROY
opción habilitada.fuente
tcpkill
no podría funcionar). Sin embargo, admito que no lo he inspeccionado,killcx
pero parece que mucho software de seguridad evitará que funcione a menos que modifique sus iptables para permitir que pasen estos paquetes falsificados.sudo ss -K ....
Ubuntu Bionic 18.04 LTS. Tuve untmux
proceso que estaba atascado en un tamaño de pantalla pequeño debido a una conexión remota, pero inactiva, pero no expirada. ¡Todo arreglado!Do - como root
netstat -tunp|grep 49029
. La última columna de la salida debería mostrarle el PID y el nombre del programa responsable del proceso de esa conexión.Si tiene suerte, solo hay un proceso para esa conexión.
Si tiene mala suerte, se vuelve más complicado (el PID es responsable de más que solo esa conexión). ¿Qué tipo de servicio es esto?
¿Por qué quieres terminar esa sesión?
fuente
tcpkill
no puede cerrar una conexión muerta (colgada). Está basadolibpcap
, construye un paquete aFIN
paquete enviado . Si la conexión ya está inactiva, no puede obtener el número de secuencia correcto.La única forma es cerrar el proceso, por lo que hace que todos los lugares NO sean SPOF.
fuente