php fsockopen伪造post与get方法的详解

对于PHP fsockopen伪造POST与GET方法的攻略,我可以提供以下完整的讲解和示例:

1. 简介

在进行HTTP请求时,我们通常会使用curl或者其他网络访问库。但是,使用fsockopen库来进行HTTP请求是一种不错的选择。 fsockopen是PHP提供的一种socket连接函数,可以用来进行各种类型的网络连接。

2. HTTP请求的基本流程

一个HTTP请求基本包含以下5个步骤:

  1. 建立TCP连接
  2. 发送HTTP请求
  3. 接收服务器响应
  4. 处理响应结果
  5. 关闭连接

3. 使用fsockopen进行HTTP请求

使用fsockopen进行HTTP请求,可以分为以下几个步骤:

  1. 建立TCP连接
  2. 设置请求头
  3. 发送HTTP请求
  4. 接收服务器响应
  5. 处理响应结果
  6. 关闭连接

3.1 建立TCP连接

建立TCP连接是一个固定的过程,一般来说,使用fsockopen函数建立HTTP连接的代码如下:

$fp = fsockopen($domain, $port, $errno, $errstr, $timeout);

参数说明:
- $domain:目标主机地址
- $port:目标主机端口
- $errno:错误码
- $errstr:错误信息
- $timeout:连接超时时间

建立TCP连接后,可以向服务器端发送请求信息。

3.2 设置请求头

请求头包含了HTTP请求的一些特定信息,fsockopen发送HTTP请求时使用的是字节流,所以需要手动构造请求头。一般情况下,请求头包含以下内容:

  • 请求方法(GET/POST)
  • 请求路径(/index.html)
  • HTTP协议版本(HTTP/1.1)
  • 主机地址(Host)
  • 用户代理(User-Agent)
  • 接受数据类型(Accept)
  • 数据长度(Content-Length)
  • 数据类型(Content-Type)
  • Cookie
  • 等...

以下是一个构造请求头的示例代码:

$post_data = "name=张三&age=20"; //POST数据
$req_header =
"POST /test.php HTTP/1.1\r\n".
"Host: www.example.com\r\n".
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0\r\n".
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".
"Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n".
"Referer: http://www.example.com\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: ".strlen($post_data)."\r\n".
"Connection: close\r\n".
"Cookie: PHPSESSID=1234567890abcdef1234567890abcdef\r\n\r\n".
$post_data;

注意事项:
- 字符串形式的POST数据需要手动计算长度并填写到请求头中
- 请求头以空行结束,两个\r\n表示空行

3.3 发送HTTP请求

请求头构造完毕后,可以把请求信息发送给服务器。

fwrite($fp, $req_header);

3.4 接收服务器响应

服务器响应包含响应头和响应体两部分。使用fsockopen发送HTTP请求时,需要手动读取响应头和响应体。

响应头:

$res_header = '';
while(!feof($fp)) {
    $line = fgets($fp, 2048);
    if ($line == "\r\n") {
        break; //空行表示响应头结束
    }
    $res_header .= $line;
}

响应体:

$res_body = '';
while (!feof($fp)) {
    $res_body .= fgets($fp, 1024);
}

3.5 处理响应结果

得到响应头和响应体之后,就可以解析并处理响应结果了。

以下是一个简单的响应解析示例:

if (preg_match("/^HTTP\/\d\.\d\s+(\d+)\s+/i", $res_header, $match)) {
    $http_status = $match[1]; //HTTP status code
}

$res = array(
    'header' => $res_header,
    'body' => $res_body,
    'http_status' => $http_status
);

print_r($res);

3.6 关闭连接

处理完响应结果后,需要关闭连接。

fclose($fp);

4. 示例代码

以下是一个使用fsockopen伪造GET方法的示例:

/**
 * 伪造GET方法请求
 *
 * @param string $url 请求URL
 */
function curl_get($url) {
    $parse_url = parse_url($url);

    $domain = $parse_url['host'];
    $port = isset($parse_url['port']) ? $parse_url['port'] : 80;
    $path = isset($parse_url['path']) ? $parse_url['path'] : '/';
    $query = isset($parse_url['query']) ? $parse_url['query'] : '';

    $fp = fsockopen($domain, $port, $errno, $errstr, 10);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
        return;
    }

    $req = "GET $path?$query HTTP/1.1\r\n";
    $req .= "Host: $domain\r\n";
    $req .= "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0\r\n";
    $req .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
    $req .= "Accept-Encoding: gzip, deflate\r\n";
    $req .= "Connection: close\r\n\r\n";

    fwrite($fp, $req);

    $content = '';
    while (!feof($fp)) {
        $content .= fgets($fp, 1024);
    }

    fclose($fp);
    return $content;
}

$result = curl_get("http://www.example.com/test.php?name=张三&age=20");
echo $result;

以下是一个使用fsockopen伪造POST方法的示例:

/**
 * 伪造POST方法请求
 *
 * @param string $url 请求URL
 */
function curl_post($url) {
    $parse_url = parse_url($url);

    $domain = $parse_url['host'];
    $port = isset($parse_url['port']) ? $parse_url['port'] : 80;
    $path = isset($parse_url['path']) ? $parse_url['path'] : '/';

    $post_data = "name=张三&age=20"; // POST数据

    $req = "POST $path HTTP/1.1\r\n";
    $req .= "Host: $domain\r\n";
    $req .= "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0\r\n";
    $req .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
    $req .= "Accept-Encoding: gzip, deflate\r\n";
    $req .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $req .= "Content-Length: ".strlen($post_data)."\r\n";
    $req .= "Connection: close\r\n\r\n";
    $req .= $post_data;

    $fp = fsockopen($domain, $port, $errno, $errstr, 10);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
        return;
    }

    fwrite($fp, $req);

    $content = '';
    while (!feof($fp)) {
        $content .= fgets($fp, 1024);
    }

    fclose($fp);
    return $content;
}

$result = curl_post("http://www.example.com/test.php");
echo $result;

以上就是关于php fsockopen伪造POST与GET方法的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php fsockopen伪造post与get方法的详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • php实现贪吃蛇小游戏

    php实现贪吃蛇小游戏攻略 准备工作 在开始编写代码之前,我们需要先下载并配置一些必要的软件: 首先需要安装PHP环境。在这里假设已经安装好了PHP,在终端运行php -v 可以查看当前PHP的版本号。 安装web服务器,如Apache、Nginx等。这里以Apache为例,可以在终端中输入sudo apt install apache2命令进行安装。 下载…

    PHP 2023年5月27日
    00
  • php自动提交表单的方法(基于fsockopen与curl)

    要实现php自动提交表单,可以使用fsockopen或curl两种方式,本文将分别介绍这两种方法的使用。 1.使用fsockopen进行自动表单提交 1.1 准备参数 使用fsockopen进行自动表单提交,需要准备以下参数: URL:表单提交的地址 Method:表单提交的方法(一般为post) 表单内容:表单中的各个字段及其值 1.2 发送表单数据 将准…

    PHP 2023年5月26日
    00
  • PHP匿名函数(闭包函数)详解

    PHP匿名函数(闭包函数)详解 什么是匿名函数 匿名函数,也称为闭包函数,是一种可以在运行时定义的函数。匿名函数传统上被用来在代码中定义回调函数,也可以用来避免全局作用域的变量污染。 基本语法 匿名函数的基本语法如下: $my_function = function($param1, $param2, …) use ($var1, $var2, …)…

    PHP 2023年5月26日
    00
  • php 将excel导入mysql

    首先我来介绍一下如何使用 PHP 将 Excel 数据导入 MySQL 数据库。 环境准备 在进行 Excel 文件导入之前需要准备以下环境: PHP 环境,推荐使用 PHP 5.2 版本及以上 加载并安装 PhpSpreadsheet 扩展库,可以使用 Composer 进行安装,也可手动安装 MySQL 数据库环境 Excel 文件 步骤 创建一个 PH…

    PHP 2023年5月28日
    00
  • iOS+PHP注册登录系统 PHP部分(上)

    我为你详细讲解“iOS+PHP注册登录系统 PHP部分(上)”的完整攻略。 简介 该攻略主要讲解了如何使用PHP搭建一个iOS注册登录系统,共分为上下两部分,本文主要介绍上部分的内容。上部分主要讲解的是如何使用PHP完成前后端交互和用户注册的功能。 环境准备 使用PHP搭建一个iOS注册登录系统,需要准备以下环境和工具: PHP,建议使用PHP 5.4及以上…

    PHP 2023年5月30日
    00
  • 360通用php防护代码(使用操作详解)

    360通用php防护代码 简介 360通用php防护代码 是一款简单易用且高效的防注入、防跨站、防XSS等攻击的php代码库。 该代码库基于白名单机制进行防护,且可以定制白名单规则,轻松应对不同的业务场景。 安装 将代码库的lib目录复制到项目中即可。 使用方法 初始化 require_once(‘lib/360_safe3.php’); $safe360 …

    PHP 2023年5月23日
    00
  • discuz免激活同步登入代码修改方法(discuz同步登录)

    下面我来详细介绍“discuz免激活同步登入代码修改方法(discuz同步登录)”。 1、背景 Discuz!是一款非常流行的论坛程序,而在多个站点之间进行同步登录功能大多是很必要的,本攻略就是针对Discuz!程序中同步登入功能进行说明。 2、修改方法 2.1 找到相关文件 在Discuz!程序中,同步登入的代码位于./source/class/discu…

    PHP 2023年5月23日
    00
  • Sphinx/MySQL 协议支持与SphinxQL应用实例

    以下是关于Sphinx/MySQL协议支持与SphinxQL应用实例的完整攻略。 Sphinx/MySQL 协议支持 Sphinx是什么? Sphinx是一种开源全文搜索引擎,支持使用MySQL协议连接到数据库,可以在多个平台上运行,通常在Linux和Windows上运行,并且支持多种编程语言。 Sphinx支持的协议 Sphinx有两种支持的协议:Sphi…

    PHP 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部