三、HTTP协议如何登陆网站: 解析HTTP登陆报文

作者: lesca 分类: HTTP,Tutorials,Web 发布时间: 2011-02-19 19:37

前面两讲介绍了通过telnet进行HTTP连接,并且成功提交了表单。
本文给出一个实用的例子:如何通过已经建立的连接登陆网站

本文将会以digu.com为例,实现一次简单的登陆。
原理:对于非加密的HTTP连接,我们只需要截获鼠标点击Login之后的HTTP报文,并且分析含有set-cookie命令符的服务器响应(Response)报文。并且记录下SID(Session ID)和对应的用户识别码UID(本文中该识别码并不显式呈现)。

捕获登陆报文
根据之前介绍过的数据包捕获方法截取数据包:
sudo dumpcap -i wlan0
注意:当且仅当准备好点击Login之后才执行该命令!
登陆成功之后立即在终端中按Ctrl + C终止数据包捕获。(这是为了减少要处理的数据包)

查看并过滤出关键包
启动Wireshark,打开捕获文件。
Filter中输入http.set_cookie并敲击回车。

选择第一个数据包(含有HTTP/1.1 302 Found头部),单击鼠标右键,选择Follow TCP Stream

接下来,我们就可以看到登陆的完整报文了:


提取头部中的关键命令符
如果你正在仔细看那些HTTP报文,你可能会很头大。其实我们只需要提取有用的命令符即可。这是一个耐心细心的工作,感兴趣的话读者可以自己尝试。
现将提取的最终结果发布如下:

POST /login HTTP/1.1
Host: digu.com
User-Agent: Mozilla/5.0
Connection: Keep-alive				// 本次请求之后还有别的请求
Referer: http://digu.com/login
Cookie: sid=nullabc6ybDIrjpl_60hG684s; 	// 第一次加载网页时加载的,指出SID不可用(未登陆)
Content-Type: application/x-www-form-urlencoded	// 提交的是form表单
Content-Length: 103				// 指出提交部分的长度

backActionId=%252Fhome&action=1&title=&url=&backURL=&userName=****&password=****&remember=1

(省略Server返回的报文)
(Server等待下一个请求,粘贴上去即可)

GET /home HTTP/1.1
Host: digu.com
Connection: Close
Referer: http://digu.com/login
User-Agent: Mozilla/5.0
Cookie: sid=(Keep your sid secret!); remember=1; mid=(your username)

注意:之所以要进行第二次GET,这是因为第二次GET之后就可以得到前面讲到的用户标识符UID,只不过这里是叫做了CookieId

进阶:登陆之后的第一条微博
既然已经登陆了,那么就没有理由不能发微博。
还是通过前面讲述的方法,我们提取了发布微博的关键HTTP头部,再进行提炼之后,我们得到下面的报文:

POST /jump?aid=addLekuData HTTP/1.1
Host: digu.com
Connection: Close
Referer: http://digu.com/home
Content-Length: 87
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0
Cookie: sid=(Keep your sid secret!)

type=1&text=(some+message+here.)&tw_userId=undefined&tId=0&cookieId=(NEADED)&id=0

欢迎留下宝贵建议,文中如有错误,欢迎批评指正!!

版权声明

本文出自 Lesca 技术宅,转载时请注明出处及相应链接。

本文永久链接: https://www.lesca.cn/archives/analize-http-header-about-login.html

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

1 Comment
  • lulu

    2011-05-17 at 22:50

    解释的很清楚,有帮助!