Отправка HTTP-запросов с разными исходными IP-адресами с использованием запросов - PullRequest
0 голосов
/ 03 марта 2019

У меня есть сетевой интерфейс, которому я назначил все адреса IPv6, скажем, из подсети 2a00:3344:2000:1300::30/56.

Теперь я хочу выдать n HTTP-запросов с использованием requests, и исходный IP-адрес каждого запроса варьируется в пределах этой подсети /56.Реализация этого с использованием специального транспортного адаптера, такого как

import requests
from urllib3.poolmanager import PoolManager


class SourceIPManager(requests.adapters.HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(
            num_pools=connections, maxsize=maxsize,
            block=block, source_address=('2a00:f48:2000:1300::30', 710))


s = requests.Session()
a = SourceIPManager()
s.mount('http://', a)

r = s.get('http://www.google.de')

, работает, только если я установил source_address на 2a00:f48:2000:1300::30 (если это основной IP-адрес, который показывает ip addr show dev eth0).Указание 2a00:f48:2000:1300::31 приводит к следующей ошибке:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='www.google.de', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbf23601a20>: Failed to establish a new connection: [Errno -9] Address family for hostname not supported',))

, даже если интерфейсу также назначен этот IP-адрес.

Что я делаю не так и как мне добиться отправки разных запросов с разными адресами источника, используя requests?

...