php 使用curl模拟ip和来源进行访问的实现方法

5年以前  |  阅读数:808 次  |  编程语言:PHP 

对于限制了ip和来源的网站,使用正常的访问方式是无法访问的。本文将介绍一种方法,使用php的curl类实现模拟ip和来源,访问那些限制了ip和来源的网站。

1.设置页面限制ip和来源访问

server.php


    <?php

    $client_ip = getip();
    $referer = getreferer();

    $allow_ip = '192.168.1.100';
    $allow_referer = 'http://www.jb51.net';

    if($client_ip==$allow_ip && strpos($referer, $allow_referer)===0){
      echo 'allow access';
    }else{
      echo 'deny access';
    }


    // 获取访问者ip
    function getip(){
      if(!empty($_SERVER['HTTP_CLIENT_IP'])){
        $cip = $_SERVER['HTTP_CLIENT_IP'];
      }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
        $cip = $_SERVER['HTTP_X_FORWARDED_FOR'];
      }elseif(!empty($_SERVER['REMOTE_ADDR'])){
        $cip = $_SERVER['REMOTE_ADDR'];
      }else{
        $cip = '';
      }
      return $cip;
    }

    // 获取访问者来源
    function getreferer(){
      if(isset($_SERVER['HTTP_REFERER'])){
        return $_SERVER['HTTP_REFERER'];
      }
      return '';
    }

    ?>

2.使用curl正常访问


    <?php
    function doCurl($url, $data=array(), $header=array(), $timeout=30){

      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

      $response = curl_exec($ch);

      if($error=curl_error($ch)){
        die($error);
      }

      curl_close($ch);

      return $response;

    }

    // 调用
    $url = 'http://www.example.com/server.php';
    $response = doCurl($url);

    echo $response;
    ?>


返回 deny access

3.使用curl模拟ip和来源进行访问

模拟来源

curl_setopt($ch, CURLOPT_REFERER, '来源');

模拟ip

curl_setopt($ch, CURLOPT_HTTPHEADER, array('CLIENT-IP: 模拟ip','X-FORWARDED-FOR: 模拟ip'));

完整代码如下:


    <?php
    function doCurl($url, $data=array(), $header=array(), $referer='', $timeout=30){

      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

      // 模拟来源
      curl_setopt($ch, CURLOPT_REFERER, $referer);

      $response = curl_exec($ch);

      if($error=curl_error($ch)){
        die($error);
      }

      curl_close($ch);

      return $response;

    }

    // 调用
    $url = 'http://www.example.com/server.php';
    $data = array();

    // 设置IP
    $header = array(
      'CLIENT-IP: 192.168.1.100',
      'X-FORWARDED-FOR: 192.168.1.100'
    );

    // 设置来源
    $referer = 'http://www.jb51.net/';

    $response = doCurl($url, $data, $header, $referer, 5);

    echo $response;
    ?>

返回 allow access

以上这篇php 使用curl模拟ip和来源进行访问的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例