Requests: Привязка определенного IP

Созданный на 27 янв. 2012  ·  15Комментарии  ·  Источник: psf/requests

Было бы здорово иметь возможность привязать конкретный IP-адрес в качестве исходного адреса (для хостов с несколькими IP-адресами).

Самый полезный комментарий

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()

Если трафик, исходящий от двух исходных IP-адресов, проходит через два разных общедоступных IP-адреса, эти разные общедоступные номера должны быть видны в поле происхождения ответа.

Все 15 Комментарий

Интересно. Как вы оцениваете использование?

^ shazow / urllib3 # 9

Цель состоит в том, чтобы написать поискового робота, используя IP-адрес, связанный с определенной страной. Но я не знаю, как это будет использоваться на уровне API.

Не могли бы вы просто отправить запрос на IP с определенным заголовком Host ?

Нет, потому что в журнале веб-сервера должен быть указан конкретный IP-адрес (который можно вернуть в конкретную страну с помощью таких инструментов, как GeoIP).

Я не слежу.

>>> 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()

Если трафик, исходящий от двух исходных IP-адресов, проходит через два разных общедоступных IP-адреса, эти разные общедоступные номера должны быть видны в поле происхождения ответа.

Я думаю, это выходит за рамки.

Для людей, заинтересованных в этом, вы можете взглянуть на HttpConnectionPool urlib3, в частности, где создаются новые httplib / http.client HttpConnections, чтобы вы могли передать source_address. Если вы это сделаете, вы можете продолжать раскрывать это в модели запроса и использовать ее по своему усмотрению.

Для тех, кто прибывает сюда из Google, вы захотите следовать этому: https://github.com/shazow/urllib3/issues/9#issuecomment -15871420

Его следует снова открыть - это не выходит за рамки и совершенно необходимо при работе с хостами внутри VPN.

В зависимости от специфики адресных пространств текущей и удаленной сети часто приходится отправлять запросы с IP-адреса, привязанного к интерфейсу, установленному VPN. Или внесите изменения в таблицу маршрутизации. Это относится, по крайней мере, к использованию NetExtender на Mac.

Многие сетевые программы, такие как ssh и curl, поддерживают настройку интерфейса на использование / привязку к IP-адресу интерфейса.

@petri Ваше утверждение, что это не выходит за рамки, неверно, учитывая, что объем проекта Requests полностью определяется Кеннетом. знак равно

В частности, мы считаем, что это выходит за рамки основного проекта запросов. Тем не менее, вы все равно можете это сделать, и это даже не очень сложно. В этом обсуждении рассказывается, как это сделать.

Приятно - я не знал о таком механизме в запросах. Спасибо!

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()

Если трафик, исходящий от двух исходных IP-адресов, проходит через два разных общедоступных IP-адреса, эти разные общедоступные номера должны быть видны в поле происхождения ответа.

Просто хотел, чтобы вы знали, я всю жизнь рыскал по Интернету, и это было единственное решение, которое сработало для меня.

https://toolbelt.readthedocs.io/en/latest/adapters.html#sourceaddressadapter существует, и это гораздо меньше взлома

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

cnicodeme picture cnicodeme  ·  3Комментарии

remram44 picture remram44  ·  4Комментарии

avinassh picture avinassh  ·  4Комментарии

NoahCardoza picture NoahCardoza  ·  4Комментарии

justlurking picture justlurking  ·  3Комментарии