programming network httperror example ejemplos python http networking sockets urllib2

network - urllib2 python 3



Suplantar la dirección IP de origen de una solicitud HTTP (5)

Desea 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 ejecuta debe configurarse con las direcciones IP desde las que está realizando la prueba.

Esto solo necesita trabajar en una sola subred y no es para uso malicioso.

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 usa el urllib2 de Python para el transporte. ¿Es posible enviar solicitudes HTTP con direcciones IP falsificadas para los paquetes que componen la solicitud?


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.

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

Ni que decir tiene que si falsifica su dirección IP de origen, nunca pasará de la etapa de sincronización y no se enviará información HTTP (el servidor no puede enviarla a un host legal).

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


Nota rápida, como acabo de enterarme ayer:

Creo que ha indicado que ya lo sabe, pero las respuestas a una solicitud HTTP van a la dirección IP que aparece en el encabezado. 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.


Podrías usar alias de IP en una caja Linux y configurar tantas direcciones IP como quieras. 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.


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 todo un montón de IP secundarias. No se moleste en configurar rutas estáticas en el LB, solo haga que su linux box sea la puerta de enlace predeterminada del LB. dispositivo.