Sto usando PHP CURL per inviare una richiesta a un server. Cosa devo fare affinché la risposta dal server includa l'indirizzo IP del server?PHP Curl, recupero indirizzo IP server
risposta
Questo può essere fatto con arricciatura,, con il vantaggio di non avere altro traffico di rete oltre alla richiesta/risposta di arricciatura. Le richieste DNS sono fatte da arricciatura per ottenere gli indirizzi IP, che possono essere trovati nel rapporto dettagliato. Quindi:
- Attiva CURLOPT_VERBOSE.
- Diretto CURLOPT_STDERR a "php: // temp" risorsa wrapper stream.
- Utilizzo di preg_match_all(), analizzare il contenuto di stringa della risorsa per gli indirizzi ip .
- Gli indirizzi del server di risposta saranno nel sottoarray a chiave zero della serie di corrispondenze.
- L'indirizzo del server consegna il contenuto (assumendo un richiesta riuscita) può essere recuperato con end(). Tutti gli indirizzi dei server che intervengono saranno anch'essi nel sottoarray , nell'ordine.
Demo:
$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 non è possibile forzare il server a inviare il proprio indirizzo IP nella risposta. Perché non cercare direttamente? (Controllare this question/answers for how to do that from php)
Non penso che ci sia un modo per ottenere quell'indirizzo IP direttamente dall'arricciatura.
Ma qualcosa di simile potrebbe fare il trucco:
primo luogo, fare la richiesta ricciolo, e utilizzare curl_getinfo
per ottenere l'URL "reale" che è stata scaricata - questo è perché il primo URL può reindirizzare ad un altro, e si desidera che quella finale:
$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/
Quindi, utilizzare parse_url
per estrarre la parte "host" da questo URL finale:
$host = parse_url($real_url, PHP_URL_HOST);
var_dump($host); // www.google.fr
e, infine, utilizzare gethostbyname
t o ottenere l'indirizzo IP che corrisponde a quello host:
$ip = gethostbyname($host);
var_dump($ip); // 209.85.227.99
Beh ...
Questo è una soluzione ^^ Dovrebbe funzionare nella maggior parte dei casi, suppongo - anche se non sono sicuro che si sarebbe sempre ottenere il "corretto" risultato se v'è una sorta di Meccanismo di bilanciamento del carico ...
echo '<pre>';
print_r(gethostbynamel($host));
echo '</pre>';
che vi darà tutti gli indirizzi IP associati con il dato nome host.
Ho usato questo
<?
$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.";
}
?>
da qui: http://php.net/manual/en/function.gethostbynamel.php
penso che si dovrebbe essere in grado di ottenere l'indirizzo IP dal server 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. indirizzo IP cURL
- 2. PHP display server Indirizzo IP
- 3. indirizzo IP firmato cloudfront indirizzo IP
- 4. Posizione geografica basata su indirizzo IP - PHP
- 5. indirizzo IP assetto ottetto
- 6. Python: Ottieni indirizzo IP locale utilizzato per inviare dati IP a uno specifico indirizzo IP remoto
- 7. Ottenere il mio indirizzo IP
- 8. Facebook API: Indirizzo IP blocco dei server Heroku
- 9. Geocode un indirizzo IP?
- 10. Genera indirizzo IP casuale
- 11. Indirizzo IP Converter
- 12. indirizzo IP Domain Name
- 13. indirizzo IP client
- 14. Indirizzo IP in Silverlight
- 15. Indirizzo IP da sk_buff
- 16. indirizzo IP non instradabile
- 17. Errore PHP CURL: "Risposta vuota dal server"
- 18. Intrecciato: come associare un server a un indirizzo IP specificato?
- 19. Come ottenere l'esatto indirizzo IP del server Restify in ascolto?
- 20. Binding indirizzo IP esterno al server di coniglio MQ
- 21. Ottieni indirizzo IP server da JSP Richiesta/oggetto sessione
- 22. Come eseguire il meteor server su un indirizzo IP diverso?
- 23. Pingare un indirizzo IP usando PHP e riecheggiando il risultato
- 24. Ottieni il proprio indirizzo IP
- 25. LetsEncrypt SSL su indirizzo IP
- 26. Docker-machine - indirizzo IP conflitto
- 27. Parser indirizzo IP in Javascript
- 28. C++ Indirizzo IP forma leggibile
- 29. Utilizzare cURL con SNI (indicazione nome server)
- 30. Ascolto di un diverso indirizzo IP
il server è costituito da più istanze in esecuzione, quindi ho bisogno di sapere esattamente a quale server mi sono collegato e ho risposto per una particolare richiesta CURL. – Beier