cURL con PHP, ¿es posible determinar la dirección IP que usará cURL?

¿Es posible determinar de forma programática qué dirección IP está usando cURL cuando se conecta a un servidor remoto? Tengo un servidor compartido en el que estoy usando cURL y necesito enviar la dirección IP como parte de la solicitud.

El servidor con el que estoy hablando requiere una cadena de autenticación que combine la dirección IP de conexión y un código de acceso rotativo (p. Ej. Mi $ code = SHA1 ($ _ SERVER [‘SERVER_ADDR’]. $ Passcode) se compara en su extremo con SHA1 ($ _ SERVER [‘REMOTE_ADDR’]. $ Código de acceso)). Esto funcionó bien cuando la conexión saliente de cURL estaba usando la misma IP que está almacenada en $ _SERVER [‘SERVER_ADDR’], sin embargo, la dirección IP utilizada por cURL ahora es diferente y rota periódicamente.

Puede hacer esto para obtener su IP pública antes de llamar:

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

Sin embargo:

  • Si su IP pública a veces cambia entre sesiones de cURL, no hay nada que decir que no cambiará entre la sesión anterior y la siguiente para la que realmente necesita estos datos.
  • Se basa en whatismyip.org (o servicio similar) que realmente se está ejecutando.

Puede forzar la IP que utiliza Curl, en lugar de detectarla.

Use la opción CURLOPT_INTERFACE para curl_setopt() : curl_setopt() en la IP que desea usar.

Si está utilizando un servidor, como un servidor de nubes, con un grupo de IP, entonces es aconsejable seleccionar la interfaz que se utilizará, si es importante detectar eso en el otro lado, por razones de seguridad.

Personalmente, tuve que usar la función para transferencias de datos de pago con tarjeta a través de cURL, cuando el IP está restringido.

Hay un sitio web llamado whatismyip.com. Tienen una API disponible públicamente que puede usar siempre y cuando no exceda su límite (que es algo así como cinco solicitudes por hora). No duele intentarlo, ¿eh?

Suponiendo que curl se ejecuta siempre desde el mismo servidor, incluso si tiene varias NIC, no debería importar si le dices a curl qué IP usar.

Usaría el truco de DaveRandom para obtener la IP que está usando actualmente, luego lo configuro para la próxima llamada usando

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

Suponiendo que las dos llamadas están lo suficientemente cerca, hay una gran probabilidad de que la IP aún esté ligada a una interfaz y al configurarla le está diciendo a curl que use esa, en lugar de la que quiera usar el equilibrador de carga.