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 que tcpkill
.
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 emitir close()
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.
ss
comando es mucho más fácil y más general que las demás.