Estoy usando PHP CURL para enviar una solicitud a un servidor. ¿Qué debo hacer para que la respuesta del servidor incluya la dirección IP del servidor?PHP Curl, recuperación de la dirección IP del servidor
Respuesta
Este puede hacerse con curl, con la ventaja de no tener otro tráfico de red además de la solicitud/respuesta de curl. Las solicitudes DNS se realizan mediante curl para obtener las direcciones IP, que se pueden encontrar en el informe detallado. Entonces:
- Encienda el CURLOPT_VERBOSE.
- Directo CURLOPT_STDERR a "php: // temp" recurso contendor de secuencia.
- Usando preg_match_all(), analice el contenido de la cadena del recurso para las direcciones ip .
- Las direcciones del servidor que responde serán en el subarreglo cero de la matriz de coincidencias.
- La dirección del servidor de entrega de el contenido (suponiendo una exitosa solicitud ) se puede recuperar con end(). Las direcciones de los servidores intermedios también estarán en el subcampo , en orden.
Demostración:
$url = 'http://google.com';
$wrapper = fopen('php://temp', 'r+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $wrapper);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$ips = get_curl_remote_ips($wrapper);
fclose($wrapper);
echo end($ips); // 208.69.36.231
function get_curl_remote_ips($fp)
{
rewind($fp);
$str = fread($fp, 8192);
$regex = '/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/';
if (preg_match_all($regex, $str, $matches)) {
return array_unique($matches[0]); // Array([0] => 74.125.45.100 [2] => 208.69.36.231)
} else {
return false;
}
}
AFAIK no puede 'forzar' al servidor a que le envíe su dirección IP en la respuesta. ¿Por qué no buscarlo directamente? (Verifique this question/answers for how to do that from php)
No creo que haya una manera de obtener esa dirección IP directamente de curl.
Pero algo como esto podría hacer el truco:
En primer lugar, hacer la solicitud rizo, y el uso de curl_getinfo
para obtener la URL "real" que ha sido exagerado - esto es debido a que la primera URL puede redirigir a otro, y quiere la final:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
$real_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
var_dump($real_url); // http://www.google.fr/
a continuación, utilice parse_url
para extraer la parte "host" de que la URL final:
$host = parse_url($real_url, PHP_URL_HOST);
var_dump($host); // www.google.fr
y, por último, utilizar gethostbyname
t O obtener la dirección IP que corresponde a ese host:
$ip = gethostbyname($host);
var_dump($ip); // 209.85.227.99
Bueno
...
Eso es una solución ^^ Se debe trabajar en la mayoría de los casos, supongo - aunque no estoy seguro de que siempre se obtendría la "correcta" número si hay algún tipo de MECANISMO de balanceo de carga ...
echo '<pre>';
print_r(gethostbynamel($host));
echo '</pre>';
qué le dará todas las direcciones IP asociadas con el nombre de host determinado.
que utilizan éste
<?
$hosts = gethostbynamel($hostname);
if (is_array($hosts)) {
echo "Host ".$hostname." resolves to:<br><br>";
foreach ($hosts as $ip) {
echo "IP: ".$ip."<br>";
}
} else {
echo "Host ".$hostname." is not tied to any IP.";
}
?>
desde aquí: http://php.net/manual/en/function.gethostbynamel.php
Creo que debería ser capaz de obtener la dirección IP desde el servidor con:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://stackoverflow.com");
curl_exec($ch);
$ip = curl_getinfo($ch,CURLINFO_PRIMARY_IP);
curl_close($ch);
echo $ip; // 151.101.129.69
- 1. cURL dirección IP
- 2. ¿Cómo obtengo la dirección IP local del servidor usando PHP?
- 3. Servidor de pantalla PHP Dirección IP
- 4. ¿Cómo obtener la dirección IP del servidor?
- 5. ¿Cómo usar una IP de servidor diferente con PHP/cURL?
- 6. ¿Cómo puedo falsificar la dirección IP del remitente utilizando curl?
- 7. Detección de la dirección IP del cliente y del servidor
- 8. Simplemente encontrar la dirección IP del servidor de
- 9. ¿Cómo encontrar la dirección IP del cliente conectado al servidor?
- 10. ¿Cómo obtener la dirección IP del servidor en ASP.NET?
- 11. Error PHP cURL: "Respuesta vacía del servidor"
- 12. Cómo establecer el nombre de host utilizando php curl para una dirección IP específica
- 13. seleccionar la IP saliente para solicitar curl
- 14. Búsqueda de la dirección IP del usuario
- 15. manera definitiva para obtener la dirección IP del usuario php
- 16. Rieles: obtenga la dirección IP del cliente
- 17. Recuperación de encabezado único en php a través de curl
- 18. Obtener la dirección IP del usuario
- 19. Obtenga la dirección IP de la máquina
- 20. ¿Cómo puedo probar una conexión a un servidor con C# dada la dirección IP del servidor?
- 21. ¿Es posible ocultar la dirección IP en una conexión PHP?
- 22. ¿Cómo compararías la dirección IP?
- 23. Recuperación de IP/Puerto del Descriptor de Socket
- 24. ¿Cómo obtener la dirección IP del cliente de escritorio remoto?
- 25. recuperación de la ip y el puerto de un sockaddr_storage
- 26. ¿Cómo puedo encontrar la dirección IP de mi servidor en PHP (CLI)
- 27. recortar dirección IP octeto
- 28. Cómo rastrear la dirección IP real detrás del proxy
- 29. Obtener mi dirección de IP
- 30. Obtener el país de la dirección IP con PHP
el servidor consta de varias instancias en ejecución, por lo que debo averiguar exactamente a qué servidor me he conectado y respondido para una solicitud CURL particular. – Beier