如何实现迅雷等下载软件捕捉到种子真实下载地址

yhyca0314 2009-05-20 06:49:23
我想做像迅雷一样的软件
用脚本调用COM把URL传到我自己的程序
做到这里发现很多论坛的URL都不是真实的URL
Google了一下大致都说是要看http数据包
也抓了来看
但是把所有包都看透了还是没有找到我要的http://…… .torrent的真实URL
请问还有别的方法可以实现吗?
非常感谢
...全文
5618 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhyca0314 2009-06-02
  • 打赏
  • 举报
回复
使用异步可插入协议监控IE能够实现吗?还有没有人可以推我一把..
yhyca0314 2009-05-27
  • 打赏
  • 举报
回复
这是迅雷下载时的数据包,不是我自己实现得到的…
现在我要做一个跟迅雷差不多的下载器
一直卡在URL的问题
还有人可以为我解惑吗
r_swordsman 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yhyca0314 的回复:]
又抓了数据包来看
客户端->服务器:
GET /download.php?s=8c1c67f0da10360b&attachmentid=1221891 HTTP/1.1\r\n
Request Method: GET
Request URI: /download.php?s=8c1c67f0da10360b&attachmentid=1221891
Request Version: HTTP/1.1
Accept: */*\r\n
Referer: http://bt1.btchina.net/yycaf/\r\n
Accept-Language: zh-tw\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSI…
[/Quote]

服务器->客户端
HTTP/1.1 200 OK\r\n
.
.
Content-disposition: filename=www.yycaf.net[\304\332\326\372\326\256\315\365.10][yycaf\326\306\327\367]-caf.torrent\r\n
此封包的data就是我要的torrent档的内容
---------------------------------------

太笨了吧?服务器不是给你内容了么?你自己都知道了,此封包的data就是我要的torrent档的内容
你可以把这个内容保存一个torrent文件啊
yhyca0314 2009-05-26
  • 打赏
  • 举报
回复
up
Leo_red 2009-05-25
  • 打赏
  • 举报
回复
路过,学习~帮顶。
yhyca0314 2009-05-25
  • 打赏
  • 举报
回复
我用迅雷下载torrent档然后自己构造了一模一样的GET数据包:
GET /download.php?s=de813a98848fc890&attachmentid=1215934 HTTP/1.1\r\n
Accept: */*\r\n
Cache-Control: no-cache\r\n
Connection: Keep-Alive\r\n
Cookie: default_search_line=0; btchina_sid=951acf783d14c2bb263c31afb26ee3057c39d53191c323eb\r\n
Host: dl2.www2.btchina.net\r\n
Pragma: no-cache\r\n
Referer: http://search3.btchina.net/btsearch.php?query=%BA%AB%BE%E7&type=0\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n
\r\n

成功发送出去了但是服务器没有任何反应,请问会是哪个环节不通过,cookie吗?
再请各位大侠指点
如小弟的方向错误也请达人不吝纠正
yhyca0314 2009-05-22
  • 打赏
  • 举报
回复
up
石头--- 2009-05-22
  • 打赏
  • 举报
回复
传入的只是参数,接着服务器才会返回地址.

不过这问题挺棘手的...
aa3000 2009-05-22
  • 打赏
  • 举报
回复
或者 http://dl1.www2.btchina.net/download.php?s=5284695909d28b74&attachmentid=1151897 已经过期了
aa3000 2009-05-22
  • 打赏
  • 举报
回复
抓一下迅雷下载 http://dl1.www2.btchina.net/download.php?s=5284695909d28b74&attachmentid=1151897 的数据包分析一下。估计与 cookie 有关。
yhyca0314 2009-05-22
  • 打赏
  • 举报
回复
又抓了数据包来看
客户端->服务器:
GET /download.php?s=8c1c67f0da10360b&attachmentid=1221891 HTTP/1.1\r\n
Request Method: GET
Request URI: /download.php?s=8c1c67f0da10360b&attachmentid=1221891
Request Version: HTTP/1.1
Accept: */*\r\n
Referer: http://bt1.btchina.net/yycaf/\r\n
Accept-Language: zh-tw\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6; .NET CLR 2.0.50727; InfoPath.1; CIBA)\r\n
Host: nnv.dl1.btchina.net\r\n
Connection: Keep-Alive\r\n
Cookie: default_search_line=0\r\n

服务器->客户端
HTTP/1.1 200 OK\r\n
.
.
Content-disposition: filename=www.yycaf.net[\304\332\326\372\326\256\315\365.10][yycaf\326\306\327\367]-caf.torrent\r\n
此封包的data就是我要的torrent档的内容

我尝试制造一样的GET数据包发到服务器想直接得到torrent档内容,结果返回403 forbidden,表示这方法行不通…
若是URL重定向是否在数据包里会有真实的URL,
能够透过VC代码找出URL的真实地址吗
非常困惑阿…请达人给我指点

yhyca0314 2009-05-21
  • 打赏
  • 举报
回复
up
yhyca0314 2009-05-21
  • 打赏
  • 举报
回复

我的问题正是你理解的那样
但是这代码我刚试了下,产生这样的URL?C:\DOCUME~1\Elsie\LOCALS~1\Temp\Dig3C.tmp
我是传了这个进去试http://dl1.www2.btchina.net/download.php?s=5284695909d28b74&attachmentid=1151897
请帮忙我看下..
我现在初步是要把种子.torrent档下载下来,还没到要下载档案本身,URL应该是有解的吧?
或者给我点思路,感谢
TianChong 2009-05-21
  • 打赏
  • 举报
回复
以上代码专业针对此类URL地址的,函数返回真实URL地址。
TianChong 2009-05-21
  • 打赏
  • 举报
回复
我明白楼主的意思了,楼主是说,某些网址上的URL是http://xxx.yyy.com/zzz.php?s=1234567这样的东西,点击后才会出现保存torrent文件的提示,对吧?那是因为这个torrent文件是在该网站的某个目录下,只有通过上面的php加参数才会被验证并读取,这是一种网站下载的管理方式,你就算下载一个RAR压缩的文件他也是这样存放及下载的.所以你直接去取的这个URL是不能作为资源文件的,主要是那个PHP就相当于一个函数,你传入了参数他再计算出真实的URL,我明白楼主的意思了,给你代码吧:


CString CDownInfoDlg::DownURL(CString strURL)
{
CInternetSession m_Session("DigitalTitan");
CHttpFile* pFile=NULL;
CException* e;

TCHAR szTempPath[MAX_PATH],szTempFile[MAX_PATH];
DWORD dwResult=::GetTempPath(MAX_PATH,szTempPath);
CString strURLPath;
GetTempFileName(szTempPath,_T("DigitalTitan_"),0,szTempFile);
strURLPath=szTempFile;
TRY
{
pFile=(CHttpFile*)m_Session.OpenURL(strURL);
}
CATCH_ALL(e)
{
pFile=NULL;
AfxMessageBox("URL地址不合法",MB_ICONINFORMATION);
return "";
}
END_CATCH_ALL

if(pFile)
{
DWORD dwStatus;
DWORD dwBufLen=sizeof(dwStatus);
BOOL bSuccess=pFile->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,&dwStatus,&dwBufLen);
if(bSuccess&&dwStatus>=200&&dwStatus<300)
{
CStdioFile m_File;
if(m_File.Open(strURLPath,CFile::modeWrite|CFile::modeCreate|CFile::typeBinary))
{
BYTE pBuf[1024];
DWORD dwRead;
do
{
dwRead=pFile->Read(pBuf,1024);
m_File.Write(pBuf,dwRead);
}
while(dwRead>0);
m_File.Close();
}
}
pFile->Close();
delete pFile;
}
else
{
m_Session.Close();
}
return strURLPath;
}
blackcat242 2009-05-21
  • 打赏
  • 举报
回复
下载大体是两类:一是迅雷、bt这种方式采用类似p2p方式,需要维护节点或者资源信息的;二是直接根据url下载的;你的意思应该是直接使用url下载吧,那就重定向一下
Conry 2009-05-21
  • 打赏
  • 举报
回复
应该是URL重定向吧,你仔细看一下flashget的下载详细信息
yhyca0314 2009-05-21
  • 打赏
  • 举报
回复
blackcat242(黑猫)大哥
您的意思是迅雷的资源服务器上面搜集了各种各样的种子档案吗
他会先根据档名去搜索吗?
所以网页上显示的URL大多数是参考用?
这样一个服务器要实现的流程大概如何?
小弟很菜..
还请高手们多多赐教
yhyca0314 2009-05-21
  • 打赏
  • 举报
回复
很感谢上面两位大哥热心回答
但我已经实现把URL传进我自己的程序里了,现在问题是在很多网站的下载链接显示出来的URL都不是真实的,例如: http://dl1.www2.btchina.net/download.php?s=5284695909d28b74&attachmentid=1151897
后缀名不是.torrent,这样一来没办法用我自己写的程序下载,
请问要如何得到真正的文件链接,迅雷,flashget等软件都可以做到的,感谢了
blackcat242 2009-05-21
  • 打赏
  • 举报
回复
迅雷的实现不仅仅是简单的分析一个网页,他自己维护了一个资源的服务器,所有的都要先到他的服务器上搜索看是否有相应的资源,最后才会使用url中的内容。
加载更多回复(2)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧