这篇文章讲述如何利用C++编写一个自动登陆到PHPChina中文开发者社区的程序!

首先需要工具:

1.IE

2.HttpWatch

3.C/C++集成开发环境

1.首先打开IE然后在IE上方的地址栏中输入“http://www.phpchina.com/”

2.然后在点击右上方的工具菜单下拉找到HttpWatch Professional选项 开启HttpWatch抓包功能

3.会看到弹出的HttpWatch抓包程序界面,HttpWatch抓包程序是嵌入到IE中的但不是IE自带的需要自行到互联网中下载!

4.点击网页右上方的登录会跳转到登录页面!

5.跳转到登录页面后先输入你的账号和密码!

6.开启HttpWatch抓包功能(Recorn按钮)在点击登录!

7.开启抓包功能后点击登录,登录完成之后点击Stop按钮停止抓包!

8.停止之后会发现很多HTTP协议请求其中包含post请求和get请求然后我们开始分析到底哪一个请求协议是提交登录信息的!

因为在登录的时候浏览器会向服务器发送一或两个请求,我们只需要分析前两个http协议首先单击第一个POST协议在Overview表项中可以查到第一个POST请求协议的概要信息

如上图所示可以

URL:http://www.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LtOdv&inajax=1

Result:200

请求的URL是http://www.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LtOdv&inajax=1

返回的Http请求状态码Result:200代表成功!

Action可以看到访问信息!

这个时候把表项切换到POST data查看具体请求数据看一下有没有我们的用户名和密码

username里找到了用户名 password里找到了加密的密码!formhash里的数据是请求校验码(这个重要也就是请求数据时服务器会根据formhash的值来判断请求数据的合法性)

从这些数据表明第一条POST协议是真正的提交用户名和密码协议,那么后面的GET数据则是其它浏览器请求数据和我们没有关系!所以就不分析其它GET数据了!

这里将POST data里的数据整合出来

根据POST提交协议 post提交数据时的顺序是formhash时放在第一位,referer第二位,username第三位,password第四位,questionid第五位,answer第六位,其次编码是按照URL编码方式来编码的,并且使用&来拼接!

整合出来的数据

formhash=ed6b2a1c&referer=http%3A%2F%2Fwww.phpchina.com%2F&username=17%E5%B2%81boy&password=fbdeef8e9db7f3716abaf023a52b9982&questionid=0&answer=

可以看到很多//和登录名的汉字都提换成了URL编码,这个编码算法可以在百度上找到,或者去下载编码转换工具都可以!

具体信息就得到了

请求地址URL

http://www.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=Lfku7&inajax=1

请求协议:

POST /member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LZKvG&inajax=1 HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://www.phpchina.com/member.php?mod=logging&action=login
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: www.phpchina.com
Content-Length: 137
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: CNZZDATA1260206835=395559444-1503368013-%7C1503372017; CNZZDATA1253686164=28344171-1503363672-%7C1503372847; tjpctrl=1503332250329; pgv_pvi=2444701901; UM_distinctid=15e0515a0bef1-0b6f2a02ea70a1-38732142-140000-15e0515a0bf10f; Hm_lvt_8c71400238561a42650208f8e318a121=1503323857,1503324916,1503327293; Hm_lpvt_8c71400238561a42650208f8e318a121=1503330538; pgv_info=ssi=s54400200; NXZu_3812_sid=Zu0N0I; NXZu_3812_noticeTitle=1; NXZu_3812_saltkey=utUStUHT; NXZu_3812_lastvisit=1503371200; NXZu_3812_lastact=1503374811%09member.php%09logging; NXZu_3812_sendmail=1
  请求数据:     formhash=ed6b2a1c&referer=http%3A%2F%2Fwww.phpchina.com%2F&username=17%E5%B2%81boy&password=fbdeef8e9db7f3716abaf023a52b9982&questionid=0&answer=

你也可以在STREAM表项里直接找到HTTP报文协议和POST提交数据!

左边是提交信息(左边内容框最后一行是POST提交数据上面的都是HTTP发送的报文协议) 组合在一起就是一个完整的HTTP请求协议,右边的内容框是服务器接受到我们提交的POST数据数据所返回的数据流!

在左上方可以看到该网站的IP地址和端口号

该网站的IP为139.129.162.140,端口是80 以后的文章会写一个用c语言动态解析域名得到IP地址和端口号!

有了这些数据就可以开始写C++代码了

1.首先打开集成开发IDE环境(我这里是codeblocks10.0)

注意在发送的时候必须把HTTP协议一并发送过去。

代码如下:

#include <iostream>
#include <winsock.h>
int main()
{
WSADATA wData;int _ERROR = WSAStartup(MAKEWORD(2,2),&wData);if(_ERROR){cout << "初始化SOCKET失败!" << endl;}char *POST = "POST /member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LZKvG&inajax=1 HTTP/1.1\r\n"\"Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n"\"Referer: http://www.phpchina.com/member.php?mod=logging&action=login\r\n"\"Accept-Language: zh-CN\r\n"\"User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\r\n"\"Content-Type: application/x-www-form-urlencoded\r\n"\"Accept-Encoding: gzip, deflate\r\n"\"Host: www.phpchina.com\r\n"\"Content-Length: 137\r\n"\"Connection: Keep-Alive\r\n"\"Cache-Control: no-cache\r\n"\"Cookie: CNZZDATA1260206835=395559444-1503368013-%7C1503372017; CNZZDATA1253686164=28344171-1503363672-%7C1503372847; tjpctrl=1503332250329; pgv_pvi=2444701901; UM_distinctid=15e0515a0bef1-0b6f2a02ea70a1-38732142-140000-15e0515a0bf10f; Hm_lvt_8c71400238561a42650208f8e318a121=1503323857,1503324916,1503327293; Hm_lpvt_8c71400238561a42650208f8e318a121=1503330538; pgv_info=ssi=s54400200; NXZu_3812_sid=Zu0N0I; NXZu_3812_noticeTitle=1; NXZu_3812_saltkey=utUStUHT; NXZu_3812_lastvisit=1503371200; NXZu_3812_lastact=1503374811%09member.php%09logging; NXZu_3812_sendmail=1\r\n\r\n"\"\n"\"formhash=ed6b2a1c&referer=http%3A%2F%2Fwww.phpchina.com%2F&username=17%E5%B2%81boy&password=fbdeef8e9db7f3716abaf023a52b9982&questionid=0&answer=";SOCKET clientSocket=socket(AF_INET,1,0);struct sockaddr_in ServerAddr={0};ServerAddr.sin_addr.S_un.S_addr=inet_addr("139.129.162.140");//使用的是TCP通信所以必须给出网站IP地址!ServerAddr.sin_port=htons(80);;    //网站端口!ServerAddr.sin_family=AF_INET;char bufRecv[3104]={0};int errNo=0;errNo=connect(clientSocket,(sockaddr*)&ServerAddr,sizeof(ServerAddr));if(errNo==0){//如果发送成功,则返回发送成功的字节数if(send(clientSocket,POST,strlen(POST),0)>0){cout<<"已经成功向服务器提交post数据!\n";;}//如果接受成功,则返回接受的字节数if(recv(clientSocket,bufRecv,3069,0)>0){cout<<"服务器返回的post数据:"<<bufRecv<<endl;}}}

返回信息:

这个数据是不是和HttpWatch里的服务器返回数据流长度一样?只不过某些数据变了!有了这个信息就代表我们刚刚发送的协议是正确的且post数据被服务器接受并处理了!

下面这张是发送失败的列子

我将发送post数据给屏蔽掉只发送http协议

下面是运行返回信息

可以看到服务器什么都没有返回TCP一直在等着服务器返回信息,但是服务器收到了你的HTTP协议请求信息但是不知道你的post数据是什么,不知道作何处理,所以就什么都不返回!有的网站可能会返回400 BAD 或者404信息这些信息在HTTP协议中是接受到了错误的参数,或者拒绝访问!

注意这里TCP仅仅得到的是服务器是否处理我们的post数据而不是响应信息响应信息是告诉我们处理结果比如登录成功或者密码错误之类的信息,下一篇文章我将用wininet来写登录程序,直接使用HTTP协议进行通信得到HTTP响应信息!

c++通过TCP/IP协议提交POST信息登录到PHPChina中文开发者社区相关推荐

  1. C++通过Wininet库提交POST信息登录到PHPChina中文开发者社区

    与上一篇教程文章"c++通过TCP/IP协议提交POST信息登录到PHPChina中文开发者社区"不同的 是这次我们使用Wininet库来提交POST请求并得到HTTP响应消息而非 ...

  2. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  3. tcp报文格式_腾讯面试中的TCP/IP协议简述+经典面试题

    面试题有福利 TCP/IP协议简述+ TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器, ...

  4. 通俗理解TCP/IP协议三次握手与四次分手流程

    三次握手流程 客户端发个请求"开门呐,我要进来"给服务器 服务器发个"进来吧,我去给你开门"给客户端 客户端有很客气的发个"谢谢,我要进来了" ...

  5. 网络上的计算机之间又是如何交换信息的。(TCP/IP协议、IPX/SPX协议、NetBEUI协议)

    TCP/IP协议.IPX/SPX协议.NetBEUI协议 网络上的计算机之间又是如何交换信息的呢?就像我们说话用某种语言一样,在网络上的各台计算机之间也有一种语言,这就是网络协议,不同的计算机之间必须 ...

  6. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  7. TCP/IP协议基础

    1.TCP/IP协议栈 四层模型  TCP/IP这个协议遵守一个四层的模型概念:应用层.传输层.互联层和网络接口层. 网络接口层  模型的基层是网络接口层.负责数据帧的发送和接收,帧是独立的网络信息传 ...

  8. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

    接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...

  9. 【TCP/IP 协议】 TCP/IP 基础

    总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后开始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...

最新文章

  1. 2005国际通信展将于10月18-22日举行
  2. 复数矩阵QR分解算法的C++实现
  3. 多线程,多进程,协程
  4. Spring Boot零散知识总结
  5. [20171206]位图区一定在数据文件开头吗.txt
  6. 解决虚拟机桥接模式ping不通主机
  7. Linux Bridge实现
  8. 微信开放平台-移动应用
  9. MySQL数据库的基础操作
  10. 如何在充满不确定性的当下探索未来?
  11. 什么是多态?为什么使用多态?
  12. Echarts图表插件(4.x版本)使用(二、带分类筛选的多个图表/实例化多个ECharts,以关系图/force为例)...
  13. 联想ThinkPad安装windows7系统详细图文教程
  14. UE4(虚幻4)预算上的纹理流送池(texture streaming poor over)报警解决方法
  15. 读懂 diff 命令
  16. replace()中的/g是什么意思?
  17. 2018年上海后半年JAVA软件工程师面试真题
  18. 高品质的网页设计: 实例与技巧
  19. python tuple基本用法
  20. css 网格布局_CSS网格布局Fr单元指南

热门文章

  1. springboot11 模板引擎
  2. mysql中的substring()截取字符函数
  3. 禁用计算机服务,适当禁用系统服务 提升计算机运行速度
  4. matlab读取trmm,基于Matlab的TRMM3B43数据处理的思维过程与技术流程
  5. mysql的远程存储引擎_mysql的存储引擎之FEDERATED
  6. MYSQL常用查询函数
  7. mysql left right 一张图解
  8. 如何提取明细表头_超全!197页建筑工程预算实例教程+241页预算明细表,造价轻松算...
  9. 普林斯顿大学计算机系,普林斯顿大学计算机科学系
  10. 微型计算机系统与接口流水灯,单片机的LED流水灯系统设计2.doc