2011-04-23 27 views
5

Tengo un pequeño proyecto en el que he estado trabajando en C++, y debido a la naturaleza de lo que hace, necesito insertar paquetes en una transmisión TCP en vivo. (El propósito es lo suficientemente inocente, http://ee.forumify.com/viewtopic.php?id=3299 si DEBE saber) Estoy creando un editor de niveles para un juego, y debido a la naturaleza de los apretones de manos, no puedo simplemente establecer una nueva conexión con una biblioteca de alto nivel como WinSock. Hasta ahora, confió en Winsock Packet Editor para hacer el trabajo sucio, pero si dejara que la aplicación lo manejara todo, haría felices a todos.Secuestro de conexión TCP

Así que mi pregunta es esta: ¿Hay alguna API en alguna parte que me permita tomar el control de una transmisión TCP en vivo, y preferiblemente una que la mantenga válida después de que termine? Y preferiría no tener que inyectar ninguna DLL. Además, Detours es un no-no ya que estoy usando GCC/Mingw.

He jugado con WinPCap y tengo un código de trabajo (puedo recoger un paquete, y de eso generar un paquete apropiado para enviar) pero como funciona a un nivel tan bajo, no puedo anticipar todo el protocolos potenciales que el usuario final podría usar. Sí, es probable que utilicen IPv4 a través de Ethernet, pero ¿qué ocurre con las personas que todavía usan PPP o algún otro protocolo oscuro? Además, la aplicación del cliente deja de conectarse después de que la mía finaliza, ya que los últimos valores de ID en los paquetes han cambiado y el cliente asume que se ha desconectado.

Por lo tanto, si alguien pudiera proporcionar un manipulador de flujo TCP de alto nivel, estaría muy feliz. Si no, continuaré jugando con WinPCap y les diré a todos los usuarios de acceso telefónico que obtengan una mejor conexión a Internet.

Plataforma de destino: Microsoft Windows XP a través de Windows 7

+0

Debería leer [Hackish C++: Bromas y trucos] (http://www.amazon.com/Hackish-Pranks-Tricks-Michael-Flenov/dp/1931769389) de Michael Flenov. Suena como un libro de bromas pero orientado a la computadora, pero tiene muchos buenos ejemplos de redes que se aplicarían a este proyecto. –

+0

¿Hay algún lugar donde pueda leer en línea de forma gratuita? Mi sistema de biblioteca local no tiene una copia de eso, lamentablemente. – Kaslai

+0

no lo sé ... tal vez podrías encontrar algo con google. He escrito algo de ese código en alguna parte, si encuentro el archivo relevante publicaré algún código –

Respuesta

0

No creo que haya ninguna API sensata que le permitirá a secuestrar un flujo TCP. Tal cosa sería, inherentemente, un problema de seguridad.

¿Puede insertar su programa como un proxy para la conexión en cuestión? Es decir, obtenga el programa que abre la conexión para abrirlo en su programa, luego haga que su programa abra la conexión al objetivo real.

La idea es que si todos los paquetes pasan a través de su programa de todos modos, entonces la modificación de la secuencia TCP se vuelve relativamente trivial.

+0

Sí, puedo usar WinPCap como un sniffer que me permite modificar directamente la secuencia de bits hacia y desde la tarjeta de red, pero como soy bastante inexperto en esas cosas, no será tan compatible como me gustaría. ser. – Kaslai

+0

@Aslai - lo que estoy diciendo es que no hay 'api' más compatible para interceptar y manipular las transmisiones TCP. No es algo 'normal' querer hacer. La forma "normal" de hacerlo es ser un proxy explícito, de modo que no hay dudas sobre lo que está sucediendo y no hay necesidad de rarezas de bajo nivel. –

2

Cree un proceso separado para enlazar a un puerto local. Cuando se crea la secuencia de tcp inicial, delegue a través de ese proceso, que luego puede reenviarlo a la red. Cuando necesite 'inyectar' en la transmisión, puede hacer que este proceso de proxy lo haga. Solo un pensamiento.

+0

Una forma simple de hacer esto es usar un proxy SOCKS, que básicamente tiene un preámbulo para decirle al servidor a qué puerto de destino conectarse y espera a que el proxy realice la conexión, luego "simplemente copia los paquetes del servidor al cliente" y cliente a servidor ". Sin embargo, no hay ninguna razón por la cual el proxy deba simplemente copiar paquetes. Puede realizar un seguimiento de la negociación del protocolo y comenzar a modificar los datos cuando se completa el protocolo de enlace inicial. En Windows, una herramienta como ProxyCap es útil para redirigir las conexiones TCP. Proxy de OWASP en el lado del servidor. –

Cuestiones relacionadas