2009-08-19 22 views
20

サーバーのIPアドレスではなくユーザーのIPアドレスを使用してカール要求を送信する必要があります。私は運がないとこれを試した:cURL ip address

curl_setopt($ch, CURLOPT_INTERFACE, $ip); 

アイデア?

ありがとうございます!

+0

あなたはIPアドレスを偽装したいです?これはPHPでは行われていません。私はあなたが問題を再考し、別の解決策を見つける必要があると思います。 – OIS

+0

IPアドレスを偽装したいのですか?それはうまくいかないでしょう。 – Greg

答えて

32

カール要求のIPアドレスを安全にスプーフィングする方法はありませんが、安全ではない方法を見つけました。リクエストを受信したサーバースクリプトによって異なりますが、

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

これは必ずしも機能しませんが、この場合は私のために働いています。

ありがとうございました。

+3

これは技術的にはIPアドレスを偽装しているわけではなく、単にHTTPヘッダーを偽装しているだけです。これは、HTTPヘッダーの妥当性に頼ることができない理由の一例です。 – zombat

+2

うん、私は知っているが、時にはその目的に役立つかもしれない。 – Flatline

+0

+1しかし主にこのタイプの問題は可視性を得る。 HTTP_X_FORWARDED_FORで問題が発生した可能性があります.HTML_X_FORWARDED_FORは、通常、ロードバランサによってIPを実際のサーバーに送信するために使用されます。正常に動作するサーバーは、常に実際のIPでREMOTE_ADDRを自動的に埋める必要があります。しかし、X_FORWARDED_FORはカスタムフィールドなので、サーバーは実際にそれをチェックすることはできません。ロードバランサでチェックする必要があります。 – eglasius

2

これは、あなたのサーバーのIPアドレスをそこに置くことになっているからです。

curlを使用して、偽の送信元アドレスを持つIPパケットを偽造することはできません。

6

IPアドレスのなりすましは、cURLが行うことはできません。これは、ローソケット接続の操作を必要とする低レベルの操作です。

10

それは私のためにカールでは動作しませんので、私はちょうどその限り、IPがサーバーに割り当てられているとして、これを行うとしていた、それを回避する方法を見つけた:ここ

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; 
    } 
} 
3

ですPHPコードの行が動作する可能性があります。 「X-Forwarded-For」ヘッダーを設定する他の方法を使用することができます。

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

これを聞いても、同じサーバーの異なるIPアドレスを使用する場合は、「interface」オプションを調べてください。値は "eth0:0"などの値になります。

7

いずれの上位ソリューションも私のために働いていません。しかし、プロキシ経由でリクエストを作ることは非常にうまく機能:

$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; 
HTTP_X_FORWARDED_FORとREMOTE_ADDR 等とのほかに
0

使用HTTP_X_REAL_IPヘッダー「HTTP_X_REAL_IP:xxx.xxx.xxx.xx」

関連する問題