ip-адрес cURL

Мне нужно отправить запрос curl с IP-адресом пользователя, а не сервером. Я пробовал это без везения:

curl_setopt( $ch, CURLOPT_INTERFACE, $ip ); 

Есть идеи?

Благодаря!

Итак, нет никакого способа безопасно подделать ip-адрес запроса на завивание, но я нашел небезопасный способ, это зависит от сервера, получающего запрос, но это сработало для меня, чтобы обмануть API, который я делал запрос чтобы:

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

Это не всегда будет работать, но в этом случае это сработало для меня.

Спасибо всем за помощь!

Он не работает с curl для меня, поэтому я нашел способ обойти это, я просто должен был сделать это, и до тех пор, пока 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; } } 

Ни одно из верхних решений не работало для меня. Однако выполнение запроса через прокси работает очень хорошо:

 $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; 

Spoofing IP-адрес не может сделать cURL. Это операция более низкого уровня, требующая манипуляции с соединениями сокетов.

вот строки 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 

Это потому, что вы должны разместить там IP-адрес своего сервера.

Вы не можете подделать IP-пакет с поддельным адресом источника с помощью curl.

Не уверен, если вы спросите об этом, но если вы хотите, чтобы завиток использовал другой IP-адрес с того же сервера, посмотрите на «интерфейс». Значение будет чем-то вроде «eth0: 0» или аналогичным.

Используйте HTTP_X_REAL_IP заголовок в дополнение к HTTP_X_FORWARDED_FOR и REMOTE_ADDR, например, "HTTP_X_REAL_IP: xxx.xxx.xxx.xx"