curl 模拟浏览器和X-Forward-IP

1. 说的这里,大家一定不学习一下http请求头部(header)详解 

http请求头部(header)详解-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/wq2008best/article/details/132731048

常见的请求头部字段
以下是一些常见的HTTP请求头部字段的详解:

GET:此方法用于请求指定的资源。GET请求应该安全且幂等,即多次执行相同的GET请求应该产生相同的结果。
POST:此方法用于向指定的资源提交数据,以便根据所提供的数据创建/更新资源。POST请求不是幂等的,每次执行相同的POST请求可能会产生不同的结果。
PUT:此方法用于完整地更新指定的资源。由于PUT请求是幂等的,多次执行相同的PUT请求应该产生相同的结果。
DELETE:此方法用于删除指定的资源。
HEAD:此方法与GET方法类似,只是服务器在响应中只返回HTTP头部,而不返回实际的数据。这用于检查资源的元数据。
OPTIONS:此方法用于获取指定的资源所支持的通信选项。这可以用于CORS(跨源资源共享)检查。
PATCH:此方法用于对资源进行部分更新。
Host:此头部字段指定请求的主机名和/或端口号。这是必需的,因为HTTP是一个基于TCP/IP的协议,没有主机名和端口号,服务器无法知道请求来自哪里。
User-Agent:此头部字段提供了关于发送请求的应用程序或用户代理的信息。这可以包括浏览器的名称和版本、操作系统等信息。
Accept:此头部字段指定客户端接受哪些类型的数据。例如,可以指定接受HTML、JSON、XML等格式的数据。
Content-Type:此头部字段指定在POST或PUT请求中发送的数据的类型。例如,如果发送的是JSON数据,那么此头部字段应该设置为application/json。
Content-Length:此头部字段指定POST或PUT请求中发送的数据的长度。
Cookie:此头部字段包含由服务器发送的cookie信息,这些信息将在后续的请求中自动包含,以便服务器识别用户或保存状态信息。

2. 模拟浏览器发起 GET 请求

curl -6 -I http://'[fd15:4ba5:5a2b:1008:53bd:92a3:9e83:bb22]' -X GET -H "User-Agent: Mozilla/5.0" -g

这里使用的是IPV6地址的请求,所以后缀要加  -g  这个参数

curl -6 -I http://'[fd15:4ba5:5a2b:1008:53bd:92a3:9e83:bb22]' -X GET -H "User-Agent: Mozilla/5.0" -H "X-Forwarded-For: 你的IP" -g

 上面的命令是模拟代理服务器的请求效果,把x-forwrad-for参数传参。但是为了测试代理服务器所代理的请求,有好多攻击请求,而触发告警的机器只会认为是代理机器的IP是攻击源。用这个命令可以复现这个问题,不需要再搭建nginx 代理服务器。同时代理服务器后面的waf ,最好采用real-ip  and x-forward-for, header 里面的参数调取真实的IP

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用 C++ 和 cURL 库读取 multipart/x-mixed-replace 格式的数据流,可以按照以下步骤进行: 1. 初始化 cURL 库,并设置 HTTP GET 请求的 URL。 ```c++ // 初始化 cURLcurl_global_init(CURL_GLOBAL_ALL); // 创建一个 cURL 句柄 CURL* curl = curl_easy_init(); // 设置 HTTP GET 请求的 URL curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/stream"); ``` 2. 设置 cURL 句柄的选项,以支持读取 multipart/x-mixed-replace 数据流。 ```c++ // 设置 HTTP GET 请求 curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); // 设置回调函数,处理接收到的数据流 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); // 设置回调函数的参数,以传递用户自定义数据 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data); ``` 其中,WriteCallback 是一个用户自定义的回调函数,用于处理接收到的数据流。可以定义为类的静态成员函数,也可以定义为全局函数。其函数原型如下: ```c++ size_t WriteCallback(char* ptr, size_t size, size_t nmemb, void* userdata) ``` 在该回调函数中,需要将接收到的数据流分解为多个 MIME 部分,并对每个部分进行处理。 3. 执行 HTTP GET 请求,并等待服务器响应。 ```c++ // 执行 HTTP GET 请求,并等待服务器响应 CURLcode res = curl_easy_perform(curl); // 检查 HTTP 请求是否成功 if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } ``` 4. 清理 cURL 句柄和 cURL 库。 ```c++ // 清理 cURL 句柄 curl_easy_cleanup(curl); // 清理 cURLcurl_global_cleanup(); ``` 下面是一个简单的示例代码,用于读取 multipart/x-mixed-replace 格式的数据流并输出到控制台: ```c++ #include <iostream> #include <curl/curl.h> // 回调函数,用于处理接收到的数据流 static size_t WriteCallback(char* ptr, size_t size, size_t nmemb, void* userdata) { std::cout << "Received data: " << std::string(ptr, size * nmemb) << std::endl; // 返回接收到的数据长度 return size * nmemb; } int main() { // 初始化 cURLcurl_global_init(CURL_GLOBAL_ALL); // 创建一个 cURL 句柄 CURL* curl = curl_easy_init(); // 设置 HTTP GET 请求的 URL curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/stream"); // 设置 HTTP GET 请求 curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); // 设置回调函数,处理接收到的数据流 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); // 执行 HTTP GET 请求,并等待服务器响应 CURLcode res = curl_easy_perform(curl); // 检查 HTTP 请求是否成功 if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } // 清理 cURL 句柄 curl_easy_cleanup(curl); // 清理 cURLcurl_global_cleanup(); return 0; } ``` 需要注意的是,这只是一个简单的示例代码,实际应用中还需要根据具体情况进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值