2011-06-03 19 views
10

¿Hay algún comando que pueda usarse para romper una conexión TCP/IP existente desde algún programa?¿Cómo rompo una conexión TCP/IP arbitraria en Linux?

¿Hay algo en una conexión TCP que el SO conoce, o el SO solo ve la transferencia TCP en los sockets locales y no sabe qué solicitud se sirve a qué socket?

Por ejemplo, si Firefox envía una solicitud al puerto 80 de algún servidor y está esperando la respuesta. ¿Es posible encontrar el puerto de escucha de Firefox y engañar a Firefox para que muestre ERR_CONNECTION_REFUSED o algo similar?

Me gustaría una solución que no evite el flujo de datos y permita que la aplicación maneje esta situación en su camino, sino que cierre el socket o la conexión TCP/IP (que debería ser posible ya que el socket es algo del sistema operativo es responsable de lo que creo? ¿La conexión también es una propiedad del sistema operativo o simplemente algo que la aplicación hace?) por lo que la aplicación reaccionaría de inmediato.

Respuesta

3

Use tcpkill.

+1

Y tener privilegios apropiados. –

+2

Tenga en cuenta que este comando solo agrega entradas a las tablas de firewall. En realidad, no cierra la conexión, pero como FF obtiene un error para el siguiente paquete que intenta enviar/recibir, eso debería funcionar. –

+0

@ Aaron Digulla: Buen punto – vitaut

0

Mi opinión sobre esto es mediante el uso del marco `iproute2.

Crear una tabla de cubetas de enrutamiento blockhole/inalcanzable (en mi tabla de ejemplo ID 33) a través de una regla y darle de alta prio:

# ip rule add from all lookup 33 prio 1 

Ahora se encuentran las conexiones que está tratando de bloquear. En mi caso he utilizado cromo para conectarse a google.com:

# ss -n -e -p | grep "chrom" | grep "173.194.*:443" 
ESTAB  0  0    10.211.55.4:46710   173.194.35.2:443 timer: (keepalive,38sec,0) users:(("chromium-browse",8488,106)) uid:1000 ino:38318 sk:f6a4f800 
ESTAB  0  0    10.211.55.4:49288  173.194.35.18:443 timer:(keepalive,34sec,0) users:(("chromium-browse",8488,109)) uid:1000 ino:38047 sk:f6a4cb00 

Por lo tanto, vamos a añadir 173.194.0.0/16 a la mesa 33 y vaciar la caché:

# ip route add unreachable 173.194.0.0/16 table 33 
# ip route flush cache 

intenta conectarse a google .com ahora en su navegador y obtendrá un ERR_CONNECTION_REFUSED en su navegador.

para levantar el velo de su bloqueo autoimpuesto, que descarga sencillo el cubo:

# ip route flush table 33 

Por supuesto, si usted necesita una distinción más granular, puede utilizar tc y u32 clasificador para marcar el exacto IP:PORT combo (y otros aspectos de paquetes) y añadir una regla de fw a la cubeta (no probado):

# tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \ 
    match ip src 173.194.0.0/16 match ip dport 443 classid :1 
# ip rule add fwmark 1 table 33 prio 1 realms 3/4 
+0

Creo que esta solución también hará que el navegador no se conecte, pero no para cerrar una conexión en la capa TCP, hasta que el navegador intente enviar algo y desencadenar un tiempo de espera. – dronus

Cuestiones relacionadas