socket 模拟POST发送数据
来源:互联网 发布:西西软件 编辑:程序博客网 时间:2024/05/18 00:24
笔者之前使用过MFC的CInternetSession来模拟POST发送数据,但一直在想,MFC中的类都是经过封装的,如果我自己通过最原始的socket发送数据是不是可行呢?所以经过一
早上的努力,还是成功了,说明这也不难哈。我先说说自己的过程吧:
首先要构造自己的HTTP头部,那么首先要看标准的HTTP是怎样的,怎么看呢,当然是抓包了
POST xxxxp HTTP/1.1..Host: xxxxxxxxxxxxxxx..Connection: keep-alive..Content-Length: 56..Cache-Control: max-age=0..Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8..Origin: xxxxxxxxxxxxxxxxxx..User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22..Content-Type: application/x-www-form-urlencoded..Referer: xxxxxxxxxxxxxxxxxxxxxx..Accept-Encoding: gzip,deflate,sdch..Accept-Language: zh-CN,zh;q=0.8..Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3..Cookie: ASPSESSIONIDQSRRQTSD=CDNJCLDCMNNFEOLDGABLNJLH....username=3213&password=321&code=3236&Submit=%CC%E1%BD%BB
好了,看到我们的HTTP标准头部,接下来我们就可以构造自己的了http头部了,我们可以通过多线程,来不停的更改username和password来达到曼丽破解网站后台的目的,现
在来看下源代码,其实我们要做的操作就是使用socket与目标主机建立连接,然后呢就是发送上述HTTP头部,最后等待返回就是了
// socket_POST.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include #pragma comment(lib,"ws2_32.lib")using namespace std;int _tmain(int argc, _TCHAR* argv[]){//首先声明变量WSADATA data={0};SOCKET sServer=0;SOCKET sClient=0;SOCKADDR_IN addrServer={0};char recvBuf[1024]={0};//初始化编程环境WSAStartup(MAKEWORD(2,2),&data);//创建套接字sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET==sServer){cout<<"创建套接字失败\n";WSACleanup();return 1;}//填写服务器地址addrServer.sin_family=AF_INET;addrServer.sin_port=htons(80);addrServer.sin_addr.S_un.S_addr=inet_addr("xxx.xxx.xxx.xxx");//向服务器发起连接int errCode=connect(sServer,(sockaddr*)&addrServer,sizeof(addrServer));if(SOCKET_ERROR==errCode){cout<<"连接失败\n";closesocket(sServer);WSACleanup();return 1;}bool isSend=false;while(1){if(!isSend){//只发送一次数据char* sendBuf="POST xxxxxxxxxx HTTP/1.1\r\n""Host:xxxxxxxxxxxxxxxxx\r\n""Connection: keep-alive\r\n""Content-Length: 56\r\n""Cache-Control: max-age=0\r\n""Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n""Origin: xxxxxxxxxxxxxxxxxxxxxx\r\n""User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\r\n""Content-Type: application/x-www-form-urlencoded\r\n""Referer:xxxxxxxxxxxxxxxxxxxxxxxx\r\n""Accept-Encoding: gzip,deflate,sdch\r\n""Accept-Language: zh-CN,zh;q=0.8\r\n""Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3\r\n""Cookie: ASPSESSIONIDQSRRQTSD=CDNJCLDCMNNFEOLDGABLNJLH\r\n\r\n""username=3213&password=321&code=3236&Submit=%CC%E1%BD%BB\r\n";errCode=send(sServer,sendBuf,strlen(sendBuf),0);if(SOCKET_ERROR==errCode){cout<<"发送出错\n";closesocket(sServer);WSACleanup();return 1;}isSend=true;}//循环接收数据errCode=recv(sServer,recvBuf,1024,0);if(SOCKET_ERROR==errCode){cout<<"接收数据出错\n";closesocket(sServer);WSACleanup();return 1;}if(strlen(recvBuf)!=0){cout<<recvBuf<<endl;memset(recvBuf,0,1024);}}//清理编程环境WSACleanup();return 0;}
经过笔者测试这段代码可用,当然,你得换成自己的
注意:在Cookie:dsdadads数据的末尾要加上两个\r\n,因为国定HTTP头部要与发送的内容区分开来!!
- socket 模拟POST发送数据
- file_get_contents 模拟POST数据发送
- [php]模拟socket发送GET,POST请求
- URL对象模拟POST发送数据!(原创)
- C# POST 模拟发送提交数据
- [PHP代码] php模拟post发送数据
- PHP 模拟post请求发送数据
- curl 模拟POST方法 发送数据
- php socket 发送表单post数据
- C#模拟Post和Get方式发送数据 保持COOKIE
- C#模拟Post和Get方式发送数据
- C#模拟Post和Get方式发送数据
- C#模拟Post和Get方式发送数据的技巧
- Java 模拟post请求,发送json格式数据
- 模拟表单发送POST,GET请求获取数据
- 利用fiddler模拟发送json数据的post请求
- 利用fiddler模拟发送json数据的post请求
- 模拟http发送post请求并返回数据
- JXTA简介
- Linux 内核 Makefile 体系简单分析
- UIGestureRecognizer用法
- 判断一个整数数组是不是二叉搜索树的后序遍历序列
- Jquery在线引用地址
- socket 模拟POST发送数据
- Android-启动模拟器timeout解决方案
- Oracle数据库的建表空间,用户名,授权
- CSRF 攻击的应对之道(原文来自IBM Developerworks)
- 测试覆盖率
- Java+Flex整合应用简单示例
- TCP与UDP的区别,以及它们各自的定义
- java数据库连接池proxool介绍及mysql8小时断开连接问题的说明
- 操作数据为 null 的函数