浏览模式: 标准 | 列表 | 订阅

PHP用CURL伪造IP和来源

作者:ciniao 时间:2011-09-06 分类:php 18 Comments

发起请求的页面:
$ch = curl_init();   
curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php");   
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));  //构造IP   
curl_setopt($ch, CURLOPT_REFERER, "http://www.gosoa.com.cn/ ");   //构造来路   
curl_setopt($ch, CURLOPT_HEADER, 1);   
$out = curl_exec($ch);   
curl_close($ch); 

判断IP的页面:
function getClientIp() {   
    if (!empty($_SERVER["HTTP_CLIENT_IP"]))   
        $ip = $_SERVER["HTTP_CLIENT_IP"];   
    else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))   
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];   
    else if (!empty($_SERVER["REMOTE_ADDR"]))   
        $ip = $_SERVER["REMOTE_ADDR"];   
    else  
        $ip = "err";   
    return $ip;   
}    
  
echo "<BR>IP: " . getClientIp() . "";   
echo "<BR>referer: " . $_SERVER["HTTP_REFERER"]; 

运行结果:


本文作者scofield
文章转自http://www.gosoa.com.cn/php%e7%94%a8curl%e4%bc%aa%e9%80%a0ip%e5%92%8c%e6%9d%a5%e6%ba%90/

PHP向socket服务器收发数据

作者:ciniao 时间:2011-08-31 分类:php 1 Comments

    刺鸟原创文章,转载请注明出处
    由于项目的服务端服务端采用了PHP+python的结构,这必然就会涉及到2个语言,即:PHP和python之间的通信处理。
    python要主动向PHP发送数据,很简单,通过http方式调用接口即可,而PHP要向python发送数据,则需要使用到php的socket相关功能,该功能的最简代码如下:

/*socket收发数据
@host(string) socket服务器IP
@post(int) 端口
@str(string) 要发送的数据
@back 1|0 socket端是否有数据返回

返回true|false|服务端数据
*/
function sendSocketMsg($host,$port,$str,$back=0){
    $socket = socket_create(AF_INET,SOCK_STREAM,0);
    if ($socket < 0) return false;
    $result = @socket_connect($socket,$host,$port);
    if ($result == false)return false;
    socket_write($socket,$str,strlen($str));
    
    if($back!=0){
        $input = socket_read($socket,1024);
        socket_close ($socket);    
        return $input;
    }else{
        socket_close ($socket);    
        return true;    
    }    
}

    socker_read的第二个参数用以指定读入的字节数,你可以通过它来限制从客户端获取数据的大小。
    注意:socket_read函数会一直读取壳户端数据,直到遇见\n,\t或者\0字符,PHP脚本把这些字符看做是输入的结束符。

#本文由刺鸟原创,欢迎转载,但请保留出处,也欢迎对本文感兴趣的同学多多交流。#

用PHP对memcache的数据(key-value)进行遍历操作

作者:ciniao 时间:2011-08-27 分类:php No Comments

    目前,用到memcache的公司和网站也越来越多。Memcache的客户端操作一般都只提供了get,set等简单的操作,这些操作都是非常高效的。  虽然memcache是个key-value存储的系统,但是在某些时候,我们可能需要遍历memcache的数据。     

    PHP代码实现
$host='127.0.0.1';
$port=11211;
$mem=new Memcache();
$mem->connect($host,$port);

$items=$mem->getExtendedStats('items');
$items=$items["$host:$port"]['items'];
foreach($items as $key=>$values){
    $number=$key;
    $str=$mem->getExtendedStats ("cachedump",$number,0);
    $line=$str["$host:$port"];
    if( is_array($line) && count($line)>0){
        foreach($line as $key=>$value){
            echo $key.'=>';
            print_r($mem->get($key));
            echo "\r\n";
        }
    }

    由此可以实现查找memcache某个前缀的key的数据,或者查询某些value的key。甚至实现数据库的like功能。请注意:遍历memcache的操作并没有memcache的get操作那么高效。

    转自:http://blog.csdn.net/sunli1223/article/details/3193146