当前位置:首页 > PHP教程 > php高级应用 > 列表

php中fsockopen模仿post与get详解

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-27 16:32:36 浏览: 评论:0 

在php中fsockopen函数可以模仿用户去访问一些网站并且还可以带一些常用的信息,如果浏览器,IP,post,get 等等数据,下面我分别一来给大家介绍介绍.

如果你要使用fsockopen函数我们必须在php.ini中把allow_url_fopen = On 设置为开启状态.

例,fsockopen() Example,代码如下:

  1. <?php 
  2. $fp = fsockopen("www.phpfensi.com", 80, $errno$errstr, 30); 
  3. if (!$fp) { 
  4.     echo "$errstr ($errno)<br />n"
  5. else { 
  6.     $out = "GET / HTTP/1.1rn"
  7.     $out .= "Host: www.example.comrn"
  8.     $out .= "Connection: Closernrn"
  9.     fwrite($fp$out); 
  10.     while (!feof($fp)) { 
  11.         echo fgets($fp, 128); 
  12.     } 
  13.     fclose($fp); 
  14. ?> 

伪造post,POST HTTP请求(URL)并获取返回值,代码如下:

  1. <?php  
  2.  
  3.   $srv_ip = '192.168.1.5';//你的目标服务地址.  
  4.  
  5.   $srv_port = 80;//端口  
  6.  
  7.   $url = 'http://localhost/fsock.php'; //接收你post的URL具体地址   
  8.  
  9.   $fp = '';  
  10.  
  11.   $errno = 0;//错误处理  
  12.  
  13.   $errstr = '';//错误处理  
  14.  
  15.   $timeout = 10;//多久没有连上就中断  
  16.  
  17.   $post_str = "username=demo&password=hahaha";//要提交的内容.  
  18.  
  19.   //打开网络的 Socket 链接。  
  20.  
  21.   $fp = fsockopen($srv_ip,$srv_port,$errno,$errstr,$timeout);  
  22.  
  23.   if (!$fp){  
  24.  
  25.    echo('fp fail');  
  26.  
  27.   }  
  28.  
  29.   $content_length = strlen($post_str);  
  30.  
  31.   $post_header = "POST $url HTTP/1.1rn";  
  32.  
  33.   $post_header .= "Content-Type: application/x-www-form-urlencodedrn";  
  34.  
  35.   $post_header .= "User-Agent: MSIErn";  
  36.  
  37.   $post_header .= "Host: ".$srv_ip."rn";  
  38.  
  39.   $post_header .= "Content-Length: ".$content_length."rn";  
  40.  
  41.   $post_header .= "Connection: closernrn";  
  42.  
  43.   $post_header .= $post_str."rnrn";  
  44.  
  45.   fwrite($fp,$post_header); 
  46.  
  47.   $inheader = 1;  
  48.  
  49.   while(!feof($fp)){//测试文件指针是否到了文件结束的位置  
  50.  
  51.    $line = fgets($fp,1024);  
  52.  
  53.    //去掉请求包的头信息  
  54.  
  55.    if ($inheader && ($line == "n" || $line == "rn")) {  
  56.  
  57.          $inheader = 0;  
  58.  
  59.     }  
  60.  
  61.     if ($inheader == 0) {  
  62.  
  63.       echo $line;  
  64.  
  65.     }  
  66.  
  67.   }  
  68.  
  69.   fclose($fp);  
  70.  
  71.   unset ($line);  
  72.  
  73. ?>  

简要说明:代码第二行是你的IP地址或域名,第四行是你要POST的页面的具体地址,本例用的是fsock.php,fsock.php内容如下:

  1. <?php  
  2.  
  3.     echo "username:".$_POST['username']."<br/>";  
  4.  
  5.     echo "password:".$_POST['password'];  
  6.  
  7. ?> 
  8.  
  9. //结果为: 
  10.  
  11. username:demo 
  12.  
  13. password:hahaha 

伪造get,同时伪造post,get方法,代码如下:

  1. <?php 
  2. //fsocket模拟post提交 
  3. $purl = "http://localhost/netphp/test2.php?uu=rrrrrrrrrrrr"
  4. print_r(parse_url($url)); 
  5. sock_post($purl,"uu=55555555555555555"); 
  6. //fsocket模拟get提交 
  7. function sock_get($url$query
  8.    $info = parse_url($url); 
  9.    $fp = fsockopen($info["host"], 80, $errno$errstr, 3); 
  10.    $head = "GET ".$info['path']."?".$info["query"]." HTTP/1.0rn"
  11.    $head .= "Host: ".$info['host']."rn"
  12.    $head .= "rn"
  13.    $write = fputs($fp$head); 
  14.    while (!feof($fp)) 
  15.    { 
  16.     $line = fread($fp,4096); 
  17.     echo $line
  18.    } 
  19. sock_post($purl,"uu=rrrrrrrrrrrrrrrr"); 
  20. function sock_post($url$query
  21.    $info = parse_url($url); 
  22.    $fp = fsockopen($info["host"], 80, $errno$errstr, 3); 
  23.    $head = "POST ".$info['path']."?".$info["query"]." HTTP/1.0rn"
  24.    $head .= "Host: ".$info['host']."rn"
  25.    $head .= "Referer: http://".$info['host'].$info['path']."rn"
  26.    $head .= "Content-type: application/x-www-form-urlencodedrn"
  27.    $head .= "Content-Length: ".strlen(trim($query))."rn"
  28.    $head .= "rn"
  29.    $head .= trim($query); 
  30.    $write = fputs($fp$head); 
  31.    while (!feof($fp)) 
  32.    { 
  33.     $line = fread($fp,4096); 
  34.     echo $line
  35.    } 
  36. ?> 

Tags: fsockopen模仿 post与get

分享到: