Requests: Vincular una IP en particular

Creado en 27 ene. 2012  ·  15Comentarios  ·  Fuente: psf/requests

Sería genial poder vincular una IP en particular como la dirección de origen (para hosts con varias direcciones IP).

Comentario más útil

import socket
import urllib2
true_socket = socket.socket

def make_bound_socket(source_ip):
    def bound_socket(*a, **k):
        sock = true_socket(*a, **k)
        sock.bind((source_ip, 0))
        return sock
    return bound_socket

socket.socket = make_bound_socket('<some source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

socket.socket = make_bound_socket('<some other source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

Si el tráfico que sale de los dos números de IP de origen sale a través de dos números de IP públicos diferentes, uno debería ver estos números públicos diferentes en el campo de origen de la respuesta.

Todos 15 comentarios

Interesante. ¿Cómo imagina el uso?

^ shazow / urllib3 # 9

El objetivo es escribir un rastreador utilizando una IP asociada a un país en particular. Pero no sé cómo se usaría a nivel de API.

¿No podría simplemente enviar una solicitud a una IP con un encabezado Host ?

No, porque es tener la IP específica en el registro del servidor web (para revertir a un país en particular usando herramientas como GeoIP).

Yo no sigo.

>>> requests.get('http://184.106.67.239', headers={'host': 'ci.kennethreitz.com'})
<Response [200]>
import socket
import urllib2
true_socket = socket.socket

def make_bound_socket(source_ip):
    def bound_socket(*a, **k):
        sock = true_socket(*a, **k)
        sock.bind((source_ip, 0))
        return sock
    return bound_socket

socket.socket = make_bound_socket('<some source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

socket.socket = make_bound_socket('<some other source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

Si el tráfico que sale de los dos números de IP de origen sale a través de dos números de IP públicos diferentes, uno debería ver estos números públicos diferentes en el campo de origen de la respuesta.

Creo que esto está fuera de alcance.

Para las personas interesadas en esto todavía, es posible que desee echar un vistazo a HttpConnectionPool de urlib3, en particular, donde se activan las nuevas http.client HttpConnections / http.client para que pueda pasar source_address. Si lo hace, puede seguir exponiendo esto en el modelo de Solicitud de la solicitud y usarlo como desee.

Para aquellos que lleguen aquí desde Google, querrán seguir esto: https://github.com/shazow/urllib3/issues/9#issuecomment -15871420

Esto debería reabrirse, no está fuera de alcance y es bastante necesario cuando se trabaja con hosts dentro de una VPN.

Dependiendo de las especificaciones de los espacios de direcciones de la red actual y remota, a menudo uno tiene que enviar solicitudes desde la IP vinculada a la interfaz configurada por la VPN. O realice cambios en la tabla de enrutamiento. Esto se aplica al menos al uso de NetExtender en una Mac.

Muchos programas de red como ssh y curl admiten la configuración de la interfaz para usar / vincularse a la IP de una interfaz.

@petri Su afirmación de que esto no está fuera de alcance es incorrecta, dado que el alcance del proyecto Requests lo define en su totalidad Kenneth. =)

Específicamente, lo consideramos fuera del alcance del proyecto de solicitudes principales. Sin embargo, aún puedes hacerlo, y ni siquiera es muy difícil. Esta discusión cubre cómo hacerlo.

Bien, no conocía ese tipo de mecanismo en las solicitudes. ¡Gracias!

import socket
import urllib2
true_socket = socket.socket

def make_bound_socket(source_ip):
    def bound_socket(*a, **k):
        sock = true_socket(*a, **k)
        sock.bind((source_ip, 0))
        return sock
    return bound_socket

socket.socket = make_bound_socket('<some source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

socket.socket = make_bound_socket('<some other source ip>')
print urllib2.urlopen('http://httpbin.org/ip').read()

Si el tráfico que sale de los dos números de IP de origen sale a través de dos números de IP públicos diferentes, uno debería ver estos números públicos diferentes en el campo de origen de la respuesta.

Solo quería que supieras que he estado buscando en Internet desde siempre y que esta fue la única solución que funcionó para mí.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

avinassh picture avinassh  ·  4Comentarios

cnicodeme picture cnicodeme  ·  3Comentarios

thadeusb picture thadeusb  ·  3Comentarios

justlurking picture justlurking  ·  3Comentarios

JimHokanson picture JimHokanson  ·  3Comentarios