加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php中fsockopen模仿post与get详解

发布时间:2022-02-13 19:29:05 所属栏目:PHP教程 来源:互联网
导读:在php中fsockopen函数可以模仿用户去访问一些网站并且还可以带一些常用的信息,如果浏览器,IP,post,get 等等数据,下面我分别一来给大家介绍介绍. 如果你要使用fsockopen函数我们必须在php.ini中把allow_url_fopen = On 设置为开启状态. 例,fsockopen() Exam
  在php中fsockopen函数可以模仿用户去访问一些网站并且还可以带一些常用的信息,如果浏览器,IP,post,get 等等数据,下面我分别一来给大家介绍介绍.
 
  如果你要使用fsockopen函数我们必须在php.ini中把allow_url_fopen = On 设置为开启状态.
 
  例,fsockopen() Example,代码如下:
 
  <?php
  $fp = fsockopen("www.Cuoxin.com", 80, $errno, $errstr, 30);
  if (!$fp) {
      echo "$errstr ($errno)<br />n";
  } else {
      $out = "GET / HTTP/1.1rn";
      $out .= "Host: www.example.comrn";
      $out .= "Connection: Closernrn";
      fwrite($fp, $out);
      while (!feof($fp)) {
          echo fgets($fp, 128);
      }
      fclose($fp);
  }
  ?>
  伪造post,POST HTTP请求(URL)并获取返回值,代码如下:
 
  <?php  
  
    $srv_ip = '192.168.1.5';//你的目标服务地址.  
  
    $srv_port = 80;//端口  
  
    $url = 'http://localhost/fsock.php'; //接收你post的URL具体地址   
  
    $fp = '';  
  
    $errno = 0;//错误处理  
  
    $errstr = '';//错误处理  
  
    $timeout = 10;//多久没有连上就中断  
  
    $post_str = "username=demo&password=hahaha";//要提交的内容.  
  
    //打开网络的 Socket 链接。  
  
    $fp = fsockopen($srv_ip,$srv_port,$errno,$errstr,$timeout);  
  
    if (!$fp){  
  
     echo('fp fail');  
  
    }  
  
    $content_length = strlen($post_str);  
  
    $post_header = "POST $url HTTP/1.1rn";  
  
    $post_header .= "Content-Type: application/x-www-form-urlencodedrn";  
  
    $post_header .= "User-Agent: MSIErn";  
  
    $post_header .= "Host: ".$srv_ip."rn";  
  
    $post_header .= "Content-Length: ".$content_length."rn";  
  
    $post_header .= "Connection: closernrn";  
  
    $post_header .= $post_str."rnrn";  
  
    fwrite($fp,$post_header);
  
    $inheader = 1;  
  
    while(!feof($fp)){//测试文件指针是否到了文件结束的位置  
  
     $line = fgets($fp,1024);  
  
     //去掉请求包的头信息  
  
     if ($inheader && ($line == "n" || $line == "rn")) {  
  
           $inheader = 0;  
  
      }  
  
      if ($inheader == 0) {  
  
        echo $line;  
  
      }  
  
    }  
  
    fclose($fp);  
  
    unset ($line);  
  
  ?>  
  简要说明:代码第二行是你的IP地址或域名,第四行是你要POST的页面的具体地址,本例用的是fsock.php,fsock.php内容如下:
 
  <?php  
  
      echo "username:".$_POST['username']."<br/>";  
  
      echo "password:".$_POST['password'];  
  
  ?>
  
  //结果为:
  
  username:demo
  
  password:hahaha
  伪造get,同时伪造post,get方法,代码如下:
 
  <?php
  //fsocket模拟post提交
  $purl = "http://localhost/netphp/test2.php?uu=rrrrrrrrrrrr";
  print_r(parse_url($url));
  sock_post($purl,"uu=55555555555555555");
  //fsocket模拟get提交
  function sock_get($url, $query)
  {
     $info = parse_url($url);
     $fp = fsockopen($info["host"], 80, $errno, $errstr, 3);
     $head = "GET ".$info['path']."?".$info["query"]." HTTP/1.0rn";
     $head .= "Host: ".$info['host']."rn";
     $head .= "rn";
     $write = fputs($fp, $head);
     while (!feof($fp))
     {
      $line = fread($fp,4096);
      echo $line;
     }
  }
  sock_post($purl,"uu=rrrrrrrrrrrrrrrr");
  function sock_post($url, $query)
  {
     $info = parse_url($url);
     $fp = fsockopen($info["host"], 80, $errno, $errstr, 3);
     $head = "POST ".$info['path']."?".$info["query"]." HTTP/1.0rn";
     $head .= "Host: ".$info['host']."rn";
     $head .= "Referer: http://".$info['host'].$info['path']."rn";
     $head .= "Content-type: application/x-www-form-urlencodedrn";
     $head .= "Content-Length: ".strlen(trim($query))."rn";
     $head .= "rn";
     $head .= trim($query);
     $write = fputs($fp, $head);
     while (!feof($fp))
     {
      $line = fread($fp,4096);
      echo $line;
     }
  }
  ?>
 

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读