Подтвердить что ты не робот

Подмена IP-адреса источника HTTP-запроса

Это нужно только для работы в одной подсети и не для злонамеренного использования.

У меня есть инструмент тестирования нагрузки, написанный на Python, который в основном взрывает HTTP-запросы по URL-адресу. Мне нужно выполнить тесты производительности с помощью балансировщика нагрузки на основе IP, поэтому запросы должны поступать из нескольких IP-адресов. Большинство коммерческих инструментов производительности предоставляют эту функциональность, но я хочу создать ее в своей собственной.

Инструмент использует Python urllib2 для транспорта. Можно ли отправлять HTTP-запросы с поддельными IP-адресами для пакетов, составляющих запрос?

4b9b3361

Ответ 1

Это непонимание HTTP. Протокол HTTP основан на TCP. Протокол TCP использует трехстороннее рукопожатие для инициализации запросов.

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

Излишне говорить, что если вы обманываете свой исходный IP-адрес, вы никогда не пройдете стадию синхронизации, и никакая информация HTTP не будет отправлена ​​(сервер не может отправить ее на юридический хост).

Если вам нужно протестировать балансировщик нагрузки IP, это не способ сделать это.

Ответ 2

Вы хотите установить адрес источника, используемый для соединения. Googling "urlib2 source address" дает http://bugs.python.org/file9988/urllib2_util.py. Я не пробовал.

Система, на которой вы работаете, должна быть настроена с проверенными вами IP-адресами.

Ответ 3

Быстрая заметка, как я только что узнал об этом вчера:

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

Ответ 4

Вы можете просто использовать IP-псевдонимы в ящике Linux и настроить столько IP-адресов, сколько хотите. Уловка заключается в том, что вы не можете предсказать, какой IP-адрес будет отмечен в заголовке IP, если вы не установите его в другую сеть и не установите явный маршрут для этой сети. т.е. -

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

Повторите для столько подсети, сколько хотите. Перезапустите apache, чтобы установить слушатели на всех новых интерфейсах псевдонимов, и вы выключены и запущены.

Ответ 5

Я предлагаю посмотреть, можете ли вы настроить балансировщик нагрузки, чтобы принять решение на основе заголовка X-Forwarded-For, а не исходного IP-адреса пакета, содержащего HTTP-запрос. Я знаю, что большинство значимых коммерческих балансиров нагрузки имеют эту возможность.

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