web-dev-qa-db-fra.com

adresse IP cURL

J'ai besoin d'envoyer une demande curl avec l'adresse IP de l'utilisateur et non celle du serveur. J'ai essayé sans succès:

curl_setopt( $ch, CURLOPT_INTERFACE, $ip );

Des idées?

Merci!

22
Flatline

Ok, donc il n'y a aucun moyen d'usurper en toute sécurité l'adresse IP d'une demande curl, mais j'ai trouvé un moyen non sûr, cela dépend du script du serveur recevant la demande, mais cela a fonctionné pour moi de tromper l'API que je faisais la demande à:

curl_setopt( $ch, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "HTTP_X_FORWARDED_FOR: $ip"));

Cela ne fonctionnera pas toujours, mais dans ce cas, cela a fonctionné pour moi.

Merci à tous pour l'aide!

39
Flatline

Cela ne fonctionne pas avec curl pour moi, j'ai donc trouvé un moyen de le contourner, je devais juste le faire et tant que l'IP est attribuée à votre serveur, alors:

echo http_socket::download('http://something.com', '55.55.44.33');

final class http_socket
{
    static public function download($url, $bind_ip = false)
    { 
        $components = parse_url($url);
        if(!isset($components['query'])) $components['query'] = false;

        if(!$bind_ip) 
        {
            $bind_ip = $_SERVER['SERVER_ADDR'];
        }

        $header = array();
        $header[] = 'GET ' . $components['path'] . ($components['query'] ?  '?' . $components['query'] : '');
        $header[] = 'Host: ' . $components['Host'];
        $header[] = 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7';
        $header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
        $header[] = 'Accept-Language: en-us,en;q=0.5';
        $header[] = 'Accept-Encoding: gzip,deflate';
        $header[] = 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7';
        $header[] = 'Keep-Alive: 300';
        $header[] = 'Connection: keep-alive';
        $header = implode("\n", $header) . "\n\n";
        $packet = $header;

        //----------------------------------------------------------------------
        // Connect to server
        //----------------------------------------------------------------------
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        socket_bind($socket, $bind_ip);
        socket_connect($socket, $components['Host'], 80);

        //----------------------------------------------------------------------
        // Send First Packet to Server
        //----------------------------------------------------------------------
        socket_write($socket, $packet);
        //----------------------------------------------------------------------
        // Receive First Packet to Server
        //----------------------------------------------------------------------
        $html = '';
        while(1) {
            socket_recv($socket, $packet, 4096, MSG_WAITALL);
            if(empty($packet)) break;
            $html .= $packet;
        }
        socket_close($socket);

        return $html;
    }
}
11
Gorilla3D

Usurper une adresse IP n'est pas quelque chose que cURL peut faire. Il s'agit d'une opération de niveau inférieur nécessitant la manipulation de connexions de socket brutes.

8
Richard Simões

Aucune des solutions supérieures n'a fonctionné pour moi. Cependant, faire une demande via un proxy fonctionne très bien:

$url = 'http://dynupdate.no-ip.com/ip.php';
$proxy = '127.0.0.1:8888'; //put your proxy here
//$proxyauth = 'user:password';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);

echo $result;
7
Sergiu Sandrean

C'est parce que vous êtes censé y mettre l'adresse IP de votre serveur.

Vous ne pouvez pas forger un paquet IP avec une fausse adresse source en utilisant curl.

3
Zed

voici les lignes de code php qui peuvent fonctionner. Vous pouvez utiliser toute autre méthode pour définir l'en-tête "X-Forwarded-For".

$httpClient = new Zend_Http_Client($reqUrl);
$httpClient->setHeaders("X-Forwarded-For","127.0.0.1");  //---this sets the desired ip address
3
Sameer Girolkar

Utilisez-le dans l'en-tête ajouter des balises comme REMOTE_ADDR: majbase HTTP_X_FORWARDED_FOR: codix comme "HTTP_X_REAL_IP: xxx.xxx.xxx.xx"

Utilisez l'en-tête HTTP_X_REAL_IP en plus avec HTTP_X_FORWARDED_FOR et REMOTE_ADDR comme "HTTP_X_REAL_IP: xxx.xxx.xxx.xx"

0
iamnamrud