изменение php ip запроса в сокете - PullRequest
1 голос
/ 21 июня 2010

Я хочу изменить IP-адрес каждого запроса в сокетном соединении в php. (Чтобы хост не блокировал мой ip, если я отправлял большое количество запросов) Я прилагаю свой код ниже

function httpGet( $url, $followRedirects=true ) {
global $final_url;
$url_parsed = parse_url($url);
if ( empty($url_parsed['scheme']) ) {
    $url_parsed = parse_url('http://'.$url);
}
$final_url = $url_parsed;

$port = $url_parsed["port"];
if ( !$port ) {
    $port = 80;
}
$rtn['url']['port'] = $port;

$path = $url_parsed["path"];
if ( empty($path) ) {
    $path="/";
}
if ( !empty($url_parsed["query"]) ) {
    $path .= "?".$url_parsed["query"];
}
$rtn['url']['path'] = $path;

$host = $url_parsed["host"];
$foundBody = false;

$out = "GET $path HTTP/1.0\r\n";
$out .= "Host: $host\r\n";
$out .= "User-Agent:      Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
$out .= "Connection: Close\r\n\r\n";

if ( !$fp = @fsockopen($host, $port, $errno, $errstr, 30) ) {
    $rtn['errornumber'] = $errno;
    $rtn['errorstring'] = $errstr;

}
fwrite($fp, $out);
while (!@feof($fp)) {

    $s = @fgets($fp, 128);
    if ( $s == "\r\n" ) {
        $foundBody = true;
        continue;
    }
    if ( $foundBody ) {
        $body .= $s;
    } else {
        if ( ($followRedirects) && (stristr($s, "location:") != false) ) {
            $redirect = preg_replace("/location:/i", "", $s);
            return httpGet( trim($redirect) );
        }
        $header .= $s;
    }
}

fclose($fp);

return(trim($body));

}

Ответы [ 2 ]

4 голосов
/ 21 июня 2010

Вы не можете изменить (подделать) IP-адрес, с которого вы его отправили.Однако вы можете использовать прокси , например SOCKS4 / 5 или HTTP-прокси с расширением PHP cURL .Это может привести к желаемому эффекту.

Однако учтите, что сначала вы должны собрать больше знаний о том, как работает прокси , прежде чем пытаться с ним что-то случайное (особенно с тем кодом, который вы вставиличто больше не нужно делать с PHP5).

1 голос
/ 21 июня 2010

Когда вы используете TCP, вы не можете изменить IP-адрес отправителя: если вы укажете не принадлежащий вам адрес, все ответы будут направлены на этот IP-адрес и никогда не дойдут до вашего компьютера.

Таким образом, вы можете изменить IP-адрес отправителя, только если не ожидаете любого ответа. С TCP вы должны получить ответ (SYN-ACK) до того, как будет установлено соединение. В любом случае пакеты с IP-адреса, который вам не принадлежит, будут заблокированы большинством, если не интернет-провайдером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...