Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > 网易相册列表分析
【标  题】:网易相册列表分析
【关键字】:
【来  源】:http://blog.csdn.net/HeTaoOS/archive/2007/03/02/1519291.aspx

网易相册列表分析

Your Ad Here
 网易相册以无限容量,速度快,资源丰富等特色深受网友喜爱,但是因为相册网站本身没有提供批量下载功能,使得批量保存自己喜欢的相片成为一个问题。
我是通过抓包和文件调用跟踪分析,来摸清网易相册的列表方式的。
值得注意的是,网易相册的相片地址列表并不是由服务器处理后再发过来的,而是通过脚本控制,服务器只是发个框架和一些控制脚本过来~~~
用 FireFox 2.0 + JSView 浏览茜茜的网易相册 http://photo.163.com/photos/docrack/
再单击 JSView 的任务栏图标,发现以下JS 列表:
²         albumsinfo.php?user=docrack
²         browser.js
²         global.consts.js
²         global.urls.js
²         global.utils.js
²         paginate.js
²         pholders.consts.js
²         pholders.html.js
²         pholders.js
²         pholders.utils.js
²         utils.js
²         photo_ad.js
²         v51,js

在这个 JS 脚本列表中,带参数那个最可疑,那就先打开他来看看:
albumsinfo.php?user=docrack
内容如下:
var hasAlbum = true;
var hasCover = true;
var gAlbumsInfo = {};
var gAlbumsIds = [106175945,106179880];
var datas = [["705.2449719279.1.450x600",1,9,"我喜欢的... ","这可是我喜欢的.."],["0.0.0.130x98",2,31,"也是我喜欢的... ","也是我喜欢的图片哦... "]];
for(var i=0; i<gAlbumsIds.length; i++){
 gAlbumsInfo[gAlbumsIds[i]] = datas[i];
}
datas = null;
 
很好,和预想中的一样,这文件中包含有相册目录的整体信息,我分析得到:
²        粗体部分是相册目录的 ID,一共有两个,
²        斜体部分,是第一个目录的介绍信息~~~
现在解析一下目录介绍信息:
²        //封面
²        705                 封面相片所在服务器 SID
²        2449719279          封面相片 ID,如果为空,就表示是加密相册
²        1                   封面相片相片后缀名类型,1,jpg;2,gif,如果为空,就表示是加密相册
²        450x600             封面相片原始图片尺寸,如果为空,就表示是加密相册
 
²        //简介
²        1                   相册权限,0 私有;1,公开;2,加密
²        9                   相册中相片总数
²        我喜欢的..          相册名称
²        这可是我喜欢的..    相册简介
 
就是通过本地脚本来获取服务器上相册信息的。打开 global.consts.js 相面这句话,一看就知道:
var PHOTO_SERVER_DOMAIN = "http://img%SID%.photo.163.com";
上面的 705 就是其中的 SID ,即服务器序号。
从上面综合,从
http://photo.163.com/js/albumsinfo.php?user=用户名
就能获取指定用户的相册信息~~~
 
由此,在程序的设计时,只有使用一个网络通讯函数向远程服务器请求 “http://photo.163.com/js/albumsinfo.php?user=用户名”就能获取获取当前用户的相册目录信息了,这就有 NetEaseAlbum 类的 GetAlbums 来控制获取,由GetDate 来完成网络操作;再有 Imports 函数来解析相册目录列表信息。就可以完成相册目录列表的获取了。具体看下面的 NetEaseAlbum 类介绍。
点入第一个没有加密的相册,也就是 ID 为 106175945 的相册,这回查看到的 JS 脚本更多了,但还是带参数那个有意思。
photosinfo.php?user=docrack&aid=106175945
明显,
user 后面跟用户名
aid 后面跟相册 ID
打开看看:
var hasPhoto = true;
var hasCover = true;
var hasPermission = true;
 
var gAlbumInfo = {'cover':"705.2449719279.1.450x600",'privacy':1,'title':"我喜欢的... ",'descr':"这可是我喜欢的.. "};
 
var gPhotosInfo = {};
var gPhotosIds = [2449722584,2449722395,2449721659,2449721495,2449721208,2449720964,
2449719654,2449719514,2449719279];
var datas = [[705,1,"470x326","BB_1 "],[705,1,"450x600","BB_2 "],[705,1,"425x562","BB_3 "],[705,1,"404x579","BB_4 "],[705,1,"404x539","BB_5 "],[705,1,"640x640","AA_1 "],[705,1,
"400x533","AA_2 "],[705,1,"450x600","AA_3 "],[705,1,"450x600","AA_4 "]];
for(var i=0; i<gPhotosIds.length; i++){
 gPhotosInfo[gPhotosIds[i]] = datas[i];
}
datas = null;
我的分析如下:
²        粗体部分就是说包含的全部相片的 ID 了。
²        斜体部分就是一张相片的介绍信息
现在解析一下一张相片的介绍信息:
²        705                 相片所在服务器 SID
²        1                   封面相片相片后缀名类型,1,jpg;2,gif
²        470x326             原始图片尺寸
²        BB_1                相片标题
 
从上面综合,从
http://photo.163.com/js/photosinfo.php?user=用户名&aid=相册ID
就能获取指定用户的指定相册内的相片信。
 
由此,在程序的设计时,只有使用一个网络通讯函数向远程服务器请求 “http://photo.163.com/js/photosinfo.php?user=用户名&aid=相册ID”就能获取获取当前用户的指定相册内的相片信息了,这就有 NetEaseAlbum 类的 GetAlbums 来控制获取,由GetDate 来完成网络操作;再有 AlbumsInfo 类的Imports 函数来解析相册内的相片信息。就可以完成相册内的相片信息的获取了。具体看下面的 NetEaseAlbum 类介绍。
 
获取了信息,该入和整合成相片的具体下载链接?
打开第一张相片,查看它的链接
http://img705.photo.163.com/docrack/106175945/2449722584.jpg
看看就明白了,
相片真实地址格式如下:
http://imgSID.photo.163.com/用户名/相册ID/图片ID.jpg
相片缩略图地址格式如下:
http://imgSID.photo.163.com/用户名/相册ID/__scale__1_图片ID.jpg
知道这些,就可以使用 PhotosInfo 类中的 BuildURL 来重建相片真实地址和相片缩略图地址了。
 
一下内容是通过使用 WSockExper 抓包分析得的。
 
对于加密的相册,有点麻烦,大概如下:
先向服务器 POST 密码到:
http://photo.163.com/photos/用户名/相册ID/
数据格式如下:
checking=1&pass=密码&submit=%D1%E9%D6%A4
如果密码正确,服务器返回一个 Cookie,其内容如下:
HALFORDER=41826293c391c246f4566b04807f05f8d
然后,再向服务器发送这段信息,以及要提取的相片列表,此时将返回那个加密相册的全部内容了,如果没有发送 Cookies ,那么取回的 JS 脚本,里面的数据段是空的。
以上验证过程,是通过 NetEaseAlbum 类的 Decrypt 函数来实现。
 
对于登陆,也需要使用到 Cookie ,过程如下。
先向服务器 POST 用户名和密码到:
http://reg.163.com/in.jsp?url=http://photo.163.com/myalbum.php
数据格式如下:
username=用户名&password=密码&
如果用户名和密码正确,服务器返回四个 Cookie,其内容如下:
NTES_SEDD=(Hash值)
NTTEASE_SSN=用户名
NTTEASE_ADV=(Hash值)
VRSJSSIONID=(Hash值)
然后,再向服务器发送这段信息,以及要提取的相册目录列表,此时将返回全部相册的全部内容了,
以上登陆过程,是通过 NetEaseAlbum 类的 Login 函数来实现。
 
综合上面全部,我已经分析了网易相册的通讯协议,包括获取相册、相片信息,验证加密相册,登陆,已经地址分析。由此就可以完成 NetEaseAlbum 类以及其他子类的设计框架了。 
搜索文件的利器_Ava Find:【上一篇】
CNZZ 统计代码及作弊分析:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Gameware -- 游戏开发的先行者
  • [翻译]-Windows CE 程序设计 (3rd 版)--5.2 公共控件(十二)
  • CN域名基础知识
  • C#进阶教程(二)
  • 更换新的Windows Platform SDK
  • 真实感的河流模拟(二)
  • [轉]Common Oracle DBA Task
  • 从游戏中得到动态内存数据
  • Hibernate核心接口简介【转】
  • 什么是Unicode(统一码)?
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.