利用HTTP协议获取163的联系人列表(1)

本文分析了163邮箱的登录过程,包括5个步骤:访问登录页、获取广告Cookies、POST登录信息、跨域跳转和最终进入邮箱。通过HTTP请求和响应,详细阐述了每个步骤的Cookie设置。此外,还介绍了如何利用登录后的服务器和SID信息获取163邮箱的联系人列表,涉及gzip压缩和HTML解析。

一、登录过程以及联系人列表获取分析

1.1 163邮箱登录过程

登录邮箱可以分成如下步骤

1.       访问mail.163.com

2.       输入用户名和密码,点击登录

3.       163服务器端进行验证。若用户名或密码通过验证,客户端进行几次跳转,成功转入登录页面。若用户名或密码错误,则返回认证错误页面。

 

我们可以利用IE Http Analyzer或者HTTP Sniffer来分析163邮箱的登陆的登录全过程。IE Http Analyzer优于HTTP Sniffer之处在于,IE Http Analyzer可以监控HTTP请求和应答的整个过程,它可以详细的展示HTTP请求的头部,HTTP请求所消耗的时间,HTTP POST的各个变量已经HTTP 数据流等多项信息。但最重要的区别在于IE Http Analyzer可以监控HTTPSPOST请求,这样我们就更清晰的模拟整个登录过程。但IE Http Analyzer的观察窗口较小,使用不如HTTP Sniffer方便。

 

利用IE HTTP Analyzer可以获取登录全过程

 

 

由分析可以知道,登录过程可由具体的5个步骤组成:

(1) GET

http://mail.163.com

(2) GET

http://adgeo.163.com/ad_cookies

(3) POST

https://reg.163.com/logins.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1

(4) GET

http://reg.163.com/crossdomain.jsp?username=xjtujay&loginCookie=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF&url=http%3A%2F%2Ffm163.163.com%2Fcoremail%2Ffcg%2Fntesdoor2%3Flightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1%26username%3Dxjtujay

(5) GET

http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=xjtujay

附录一中详细给出了这5个步骤的请求和回复。

根据附录一的详细数据流分析步骤(2)至步骤(5)可以这几个步骤的Cookie设置如下

步骤

设置Cookie

(1)

 

(2)

Province=025

(3)

NTES_SESS=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF

NETEASE_SSN=xjtujay

NETEASE_ADV=11&23&1228200054655

URSJESSIONID=aGHZvw0enBrb

(4)

 

(5)

Coremail=TYlruaxjaLMaE%TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg

 

步骤(3)中,URL是固定不变,这次是HTTP POST请求,而POST请求的体为

verifycookie=1&style=-1&product=mail163&username=xjtujay&password=jinjian&selType=-1&remUser=on&secure=on&%B5%C7%C2%BC%D3%CA%CF%E4=

这里usernamexjtujay,而passwordjinjian,仅仅这两个部分是可变的(即随用户名和密码不同而不同),其他参数是固定不变的。

 

步骤(4)中,首先来分析URL的由构成。步骤(4)的URL由当前的username和步骤(3)中设置的NTES_SESS值来决定。步骤(4)的URL可以看成是http://reg.163.com/crossdomain.jsp?username=后追加当前username(xjtujay),当前NTES_SESS (NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF)和经过URL编码的固定字符串http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=以及当前username(xjtujay)构成。

此时URL可以由步骤(3)应答的头部来拼成步骤(4)所访问的具体地址。当然,还有一种简单的办法获取步骤(4)访问的URL。查询附录一,可知在步骤(3)的应答体内window.location.replace后面就是步骤(4)访问的URL

 

步骤(5)中,最重要的是应答头部给出的Location参数的值 http://tg1a89.mail.163.com/a/j/js3/main.jsp?sid=TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg。这个值包括了2部分的重要信息:(1)当前登录的163服务器(tg 1a 89.mail.163.com)2sid(TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg)。有了这两个值以及在(2)(3)(5)中设置的Cookie就可以获取邮件的联系人列表。

 

经过以上5个步骤,我们就完成了163邮箱的登录全过程。

 

1.2 163邮箱联系人列表获取

经过分析,获取163邮箱联系人列表的URL

http://{1}/coremail/fcg/ldvcapp?funcid=address&sid={2}&tempname=address%2Faddress.htm&ifirstv=&listnum=0&showlist=all 这里将要使用上节中步骤(5)中提及到重要的信息。在URL中需要设置{1}{2}两个参数,其中{1}为当前登录的163服务器(tg 1a 89.mail.163.com){2}SID(TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg)。当前访问邮箱的URL

http://tg1a89.mail.163.com/coremail/fcg/ldvcapp?funcid=address&sid=TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg&tempname=address%2Faddress.htm&ifirstv=&listnum=0&showlist=all

通过

GET

http://tg1a89.mail.163.com/coremail/fcg/ldvcapp?funcid=address&sid=TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg&tempname=address%2Faddress.htm&ifirstv=&listnum=0&showlist=all

便可以获得联系人列表相关信息。

 

这里需要注意的是上面GET请求返回的应答Content-Encodinggzip,我们不能直接获取返回的内容信息。我们首先要根据应答的Content-Length,读入对应长度的字节流。然后为了获取联系人列表相关信息,将读入的字节流按照gzip的格式进行解压。接着根据Content-Type指定的charsetgb2312读取内容,进行分析实际读入的字符。

上述过程得到的将是包含联系人列表的HTML信息。解析得到的HTML信息,便可以得到具体的联系人列表了。具体的HTML信息如附录二所示。

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值