2009-07-25 20 views
21

Esto solo necesita trabajar en una única subred y no es para uso malicioso.Suplantar la dirección IP de origen de una solicitud HTTP

Tengo una herramienta de prueba de carga escrita en Python que básicamente explota las solicitudes HTTP en una URL. Necesito ejecutar pruebas de rendimiento contra un equilibrador de carga basado en IP, por lo que las solicitudes deben provenir de un rango de IP. La mayoría de las herramientas de rendimiento comercial proporcionan esta funcionalidad, pero quiero construirla por mi cuenta.

La herramienta utiliza el urllib2 de Python para el transporte. ¿Es posible enviar solicitudes HTTP con direcciones IP falsificadas para los paquetes que componen la solicitud?

+0

hmm ... como dice una de las respuestas a continuación ... ¿cómo ocurriría un apretón de manos TCP si se falsificara la ip de origen? ¿Con qué tipo de configuración de red se ejecutaría una simulación de este tipo? –

Respuesta

5

Quiere establecer la dirección de origen utilizada para la conexión. Buscar en Google "urllib2 source address" da http://bugs.python.org/file9988/urllib2_util.py. No lo he intentado.

El sistema en el que se está ejecutando debe configurarse con las direcciones IP que está probando.

+0

Este es el enfoque correcto: dele a su caja de pruebas muchas direcciones IP y haga que la aplicación de prueba pase por ellas a medida que realiza las conexiones. – caf

5

Nota rápida, como acabo de aprender esto ayer:

Creo que ha insinuado que ya sabe esto, pero cualquier respuesta a una petición HTTP ir a la dirección IP que aparece en la cabecera. Por lo tanto, si desea ver esas respuestas, debe tener el control del enrutador y configurarlo para que las direcciones IP falsificadas se reenvíen a la IP que está utilizando para ver las respuestas.

43

Esto es un malentendido de HTTP. El protocolo HTTP se basa en la parte superior de TCP. El protocolo TCP se basa en un protocolo de enlace de 3 vías para inicializar las solicitudes.

alt text http://upload.wikimedia.org/wikipedia/commons/archive/c/c7/20051221162333!300px-Tcp-handshake.png

hace falta decir que si spoof su dirección IP de origen, nunca superar la fase de sincronización y no hay información HTTP será enviado (el servidor no puede enviarlo a una máquina legal).

Si necesita probar un equilibrador de carga IP, esta no es la manera de hacerlo.

+0

buen punto.no hay ninguna pista de cómo se produciría un apretón de manos tcp si los paquetes que componen esos segmentos tcp tienen encabezados falsos de IP. salirse del tema, pero ¿cómo implementaría una red/programa para probar y IP LB? y ¿cómo hacen herramientas como LoadRunner? –

+8

No tengo idea de qué es LoadRunner, pero supongo que usan un NAT que requiere acceso de bajo nivel a paquetes sin procesar que reescribe paquetes de origen entrantes y paquetes de destino de salida sobre la marcha. Para hacer esto, puede que tenga que instalar PCAP http://en.wikipedia.org/wiki/Pcap. Pero te advierto, no es tan fácil como usar urllib2. En una nota al margen, también es gracioso ver cuántas personas aquí no tienen idea de qué están hablando y me han votado dos veces. – Unknown

+0

Supongo que muchos programadores no tienen idea de cómo funciona la red en un nivel inferior, no se preocupe. – Gert

1

Puede usar el alias de IP en una caja Linux y configurar tantas direcciones IP como desee. El problema es que no se puede predecir qué IP se sellará en el encabezado IP a menos que se establezca en otra red y se establezca una ruta explícita para esa red. es decir -

current client address on eth0 = 192.168.1.10/24 

server-side: 
ifconfig eth0:1 172.16.1.1 netmask 255.255.255.0 

client-side: 
ifconfig eth0:1 172.16.1.2 netmask 255.255.255.0 
route add -net 172.16.1.0/24 gw 172.16.1.1 metric 0 

Repita para tantas subredes como desee. Reinicie Apache para configurar oyentes en todas las nuevas interfaces de alias y estará listo para funcionar.

1

Sugiero ver si puede configurar su equilibrador de carga para tomar su decisión basándose en el encabezado X-Forwarded-For, en lugar de la IP de origen del paquete que contiene la solicitud HTTP. Sé que la mayoría de los balanceadores de carga comerciales importantes tienen esta capacidad.

Si no puede hacer eso, entonces le sugiero que probablemente necesite configurar un linux box con un montón de direcciones IP secundarias; no se moleste en configurar rutas estáticas en el LB, solo haga que su linux box sea el predeterminado puerta de enlace del dispositivo LB.

Cuestiones relacionadas