Как клиент-машина / браузер обрабатывает незапрошенный HTTP-ответ? - PullRequest
0 голосов
/ 18 января 2010

Представьте себе следующее:

  • Пользователь переходит к сценарию (http://sample.org/test.php),

  • Скрипт отправляет HTTP-запрос на другую страницу (http://google.com/). Для этого примера мы скажем, используя curl.

  • Сценарий устанавливает IP-адрес запроса на IP-адрес пользователя через CURLOPT_INTERFACE.

Я уже знаю, что запрашивающий скрипт не получит ответ, так как удаленный хост отправит любые ответы на IP-адрес, указанный в запросе.

Что мне интересно, что происходит с этим ответом? Предполагая, что клиент находится в локальной сети с одним внешним адресом и что весь трафик, отправляемый на этот IP-адрес, обрабатывается маршрутизатором, действующим в качестве DHCP-сервера, будет ли ответ возвращаться на компьютер пользователя? Если это так, будет ли какой-нибудь способ гарантировать, что он обрабатывается браузером пользователя? И если да, то как бы браузер справился с этим, как правило? Будет ли это открыть новое окно с Google в нем?

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

Ответы [ 2 ]

4 голосов
/ 18 января 2010
  • Скрипт устанавливает IP-адрес запроса в IP-адрес пользователя через CURLOPT_INTERFACE.

Обычно это не сработает. Ваш Интернет-провайдер знает, какой IP-адрес у вас должен быть, и не будет перенаправлять трафик, исходящий от «поддельных» IP-адресов.

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

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

Если ПК пользователя имеет внутренний IP-адрес и использует NAT, маршрутизатор не будет знать, на какой компьютер локальной сети направить пакет (поскольку он не видел ни одного исходящего запроса, которому он мог бы соответствовать ответ). Поэтому ответ будет опущен.

Даже , если , вы можете получить ответ, чтобы связаться с клиентом:

Если это так, будет ли какой-либо способ гарантировать, что он обрабатывается браузером пользователя?

Нет. Как указано выше, TCP-запрос состоит из трехстороннего рукопожатия. Это рукопожатие не было завершено, поэтому операционная система просто отбросила пакет.

2 голосов
/ 18 января 2010

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

Ответ будет возвращен по тому же TCP-соединению, что и запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...