cURL с PHP, возможно определить IP-адрес, который будет использовать cURL? - PullRequest
3 голосов
/ 15 сентября 2011

Можно ли программно определить, какой IP-адрес использует cURL при подключении к удаленному серверу? У меня есть общий сервер, на котором я использую cURL, и мне нужно отправить IP-адрес как часть запроса.

Сервер, с которым я разговариваю, требует строку аутентификации, которая объединяет IP-адрес соединения и вращающийся код доступа (например, мой $ code = SHA1 ($ _ SERVER ['SERVER_ADDR']. $ Passcode) сравнивается по их окончании с SHA1 ($ _SERVER ['REMOTE_ADDR']. $ Код доступа)). Это работало нормально, когда исходящее соединение от cURL использовало тот же IP-адрес, который хранится в $ _SERVER ['SERVER_ADDR'], однако IP-адрес, используемый cURL, теперь отличается и периодически меняется.

Ответы [ 4 ]

3 голосов
/ 15 сентября 2011

Вы можете сделать это, чтобы получить свой публичный IP-адрес, прежде чем позвонить:

$ch = curl_init('http://whatismyip.org/');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
$myIp = curl_exec($ch);

Однако:

  • Если ваш публичный IP-адрес иногда меняется между сеансами cURL, ничего не нужноскажем, что он не изменится между предыдущим сеансом и следующим сеансом, для которого вам на самом деле нужны эти данные.
  • Он зависит от фактического запуска whatismyip.org (или аналогичного сервиса).
3 голосов
/ 15 сентября 2011

Вы можете принудительно использовать IP-адрес, который использует curl, в отличие от его обнаружения.

Используйте параметр CURLOPT_INTERFACE для curl_setopt() - установите для него IP-адрес, который вы хотите использовать.

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

Лично мне пришлось использовать эту функцию для передачи данных платежных карт через cURL, когда IP-адрес ограничен.

1 голос
/ 15 сентября 2011

Предполагая, что curl всегда запускается с одного и того же сервера, даже если он имеет несколько сетевых карт, не имеет значения, если вы укажете curl, какой IP использовать.

Я бы использовал хитрость DaveRandom, чтобы узнать, какой IP вы используете в данный момент, а затем установить его для следующего вызова, используя

curl_setopt($ch, CURLOPT_INTERFACE, "XXX.XXX.XXX.XXX");

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

1 голос
/ 15 сентября 2011

Существует веб-сайт whatismyip.com.У них есть общедоступный API, который вы можете использовать до тех пор, пока вы не превысите их лимит (что-то вроде пяти запросов в час ??).Не повредит ли ему сделать укол, а?

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