php中fsockopen模仿post与get详解

实际上是毫无作用的函数了~因为现在的域名商都很滑。很多域名只要注册了,就算不使用也会被默认指向一个域名商的网址。所以即便探过去,都会返回一个200值。
= = 这也是没办法的事。

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

?php$url = '''';print_r(get_headers($url));print_r(get_headers($url, 1));?

Array( [0] = HTTP/1.1 200 OK [1] = Date: Sat, 29 May 2004 12:28:13 GMT [2] = Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) [3] = Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT [4] = ETag: 3f80f-1b6-3e1cb03b [5] = Accept-Ranges: bytes [6] = Content-Length: 438 [7] = Connection: close [8] = Content-Type: text/html)Array( [0] = HTTP/1.1 200 OK [Date] = Sat, 29 May 2004 12:28:14 GMT [Server] = Apache/1.3.27 (Unix) (Red-Hat/Linux) [Last-Modified] = Wed, 08 Jan 2003 23:11:55 GMT [ETag] = 3f80f-1b6-3e1cb03b [Accept-Ranges] = bytes [Content-Length] = 438 [Connection] = close [Content-Type] = text/html)

 fsockopen() Example

?php//$fp = file_get_contents();

 代码如下

$fp = fsockopen(, 80, $errno, $errstr, 30); if (!$fp) { echo $errstr
($errno)br /n; exit;} ?

<?php
$fp = fsockopen(“www.example.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 = ”; //接收你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 = “”;
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: “;
   $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;
   }
}
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注