编程日记

来源:互联网 发布:淘宝退款速度影响 编辑:程序博客网 时间:2024/04/30 11:09
1月29日 片片雪花不落别处

  今天胃口不好,吃晚饭的时候,心不在焉,老婆看我不好好吃饭,生气了,她生起气来就像小孩儿一样两眼一瞪,嘴一噘然后就开始训我,我倒不在乎,嬉皮笑脸的死盯着她,她两眼一瞪对我说“好好吃饭!”,我就一边四目对视一边拼命往嘴里塞菜塞饭,终于看到她发毛了,她忍不住笑了,呵呵看来我还是很帅啊,眼神还会放电啊,每天看到她笑我就什么烦恼也没了。吃完饭想想这两天心烦主要还是为了太闲,都闲了快两年了,一直想等一个爆发的机会,都快憋疯了,想想这件事儿也是急不来的,再说这也不是我的错,掰指头数数原来在词霸组的40多个人已经走得只剩10来个人了,真有点不甘心,本可以大干一场的,现在确只有看着别人在打仗,没仗打的日子真是难捱......难解“悠悠我心”,相信“片片雪花不落别处”,我自有我的归处,我自有我的路......

这两天一直在做IM的插件,突然想研究一下BT文件传输的技术,这里就研究做一个记录

我选择了libbt这个库做为我的研究对像一是因为是c的代码比较好调试跟踪,另外准备的工具就source insight、cygwin、gdb

(一)在cygwin下编译libbt库

  这一步没碰到什么困难,主要是得先编译两个库openssl和curl两个库,先configure一下,然后到libbt/src目录下直接改一下MAKEFILE就行了主要是加上openssl和curl库的路径CFLAGS:=-g -Wall -I../include -I../openssl-0.9.7e/include -I$(top_srcdir)/include,主要是加这一句就行,然后就编过了,编的时候可能会碰到几个问题,也好解决都是c语言的语法问题,只要做少量修改就行了,有一个错误SHA1没有定义,这个是openssl的问题我没仔细看可能就是少什么宏定义吧,我没搞他定义一个空的宏就行了,这样就可以编出三个文件btcheck.exe,btlist.ext,btget.exe

(二)BT文件分析函数说明

  BT文件格式还是挺有意思的,可以参考libbt/doc目录下的两个文件,我从网上还找了个中文的说明,结合调试的代码说一下,要分析BT文件格式可以调试btlist.exe,首先是bts_create_filestream这个函数主要是为生成一个btStream的结构,这里主要是一些函数指针,还有文件句柄的说,然后就是调benc_get_object去取第一个对象下面就是显示对象部份btObject_dump了这个函数也很简单,就是一个递归调用的打印出所有的对象,看到这儿就可以看到BT文件的解析过程了。今天就记到这儿了,明天和朋友们去滑雪,回来再看BT Tracker的东东,继续跟代码了。

(三)BT文件格式简单说明(网上扒的,怕被删了留下来)

a.BT种子用bencoding编码

b.四种类型的数据:srings(字符串),integers(整数),lists(列表),dictionaries(字典)

strings(字符串)编码为:<字符串长度>:<字符串>

integers(整数)编码为:i<整数>e

lists(列表)编码为:l<bencoding编码类型>e

dictionaries(字典)编码为d<bencoding字符串><bencoding编码类型>e

c.整个文件为一个字典结构,包含如下关键字
announce:tracker服务器的URL(字符串)
announce-list(可选):备用tracker服务器列表(列表)
creation date(可选):种子创建的时间,Unix标准时间格式,从1970 1月1日 00:00:00到创建时间的秒数(整数)
comment(可选):备注(字符串)
created by(可选):创建人或创建程序的信息(字符串)
info:一个字典结构,包含文件的主要信息,为分二种情况:单文件结构或多文件结构
单文件结构如下:
length:文件长度,单位字节(整数)
md5sum(可选):长32个字符的文件的MD5校验和,BT不使用这个值,只是为了兼容一些程序所保留!(字符串)
name:文件名(字符串)
piece length:每个块的大小,单位字节(整数)
pieces:每个块的20个字节的SHA1 Hash的值(二进制格式)
多文件结构如下:
files:一个字典结构
length:文件长度,单位字节(整数)
md5sum(可选):同单文件结构中相同
path:文件的路径和名字,是一个列表结构,如/test/test.txt 列表为l4:test8test.txte
name:最上层的目录名字(字符串)
piece length:同单文件结构中相同
pieces:同单文件结构中相同
BT文件还是挺好玩儿的,先搞到这里了明天继续