服务器中有个track程序来管理这些请求,得到这一串代码后就会用info_hash来查找列表,若找到就可以下载。接着它会反连(NatCheck)客户机的IP地址和端口来判断它是内网用户还是公网用户(像10.10.10.x这样的地址。是无法连通的)。接下来服务器返回现在正在下载这个文件的所有公网用户的IP地址和端口(包含在分组754、755中,因为返回的数据比较多,所以被分片返回)。HTTP之上的部分数据如图7所示。
图7 HTTP之上的部分数据
其中“1998:”及其之前的部分使用的是ASCII字符集,“1998:”之后的部分是用16进制表示的二进制数。从分组内容可以看出interval的值为1800。也就是BT客户机最多每隔1800个时间单位就与tracker服务器重新联系一次:peers部分共有1998 byte。对753号分组的分析可知,BT客户机支持对对等方列表的压缩,因此在754、755号分组返回的对等方列表是用压缩方式存储的,即6 byte表示一个对等方,例如da40 91 e8 41 af表示的对等方是218.64.145.232:16815,dd ea 3b 9f 7a 2f表示的对等方是221.234.59.149:31279。对等方列表的长度为1 998 byte,也就是说返回的对等方个数为333个。
3.3Peerwire协议
BT客户机会尝试与返回的对等方列表中的部分对等方建立连接,下面以对等方列表中的221.234.59.149:31279为例,分析一下对等方之间的交互过程。如图8所示,只分析TCP之上的部分。约定对等方A指的是221.234.59.149:31279,对等方B指的是192.168.0.179:1504。
图8 对等方间通信过程
建立TCP连接之后,对等方之间的交互过程包括以下几步:
(1)握手,通过Handshake分组实现。在本例中通过分组2480和2481实现。
(2)互换所拥有的资源的情况。通过Bitfield分组实现。该例中,对等方B尚未下载任何资源,故公布资源拥有情况的只有对等方A。对等方A通过分组2487公布了自己的资源拥有情况。
(3)互通对资源的意愿情况,包括interested、notinterested、choke、unchoke等4种。本例中通过分组2490、2493实现。
(4)互相请求资源,通过requestpiece、piece分组实现,例如本例中的分组2495、2503、2696。
(5)断开连接。因Peerwire协议使用了TCP方式,对等方A与对等方B断开连接时,只需要断开它们之间的TCP连接即可。
分组2495是一个requestpiece分组,其结构如图9所示,其中需要的参数有pieceindex(片标志)、beginoffset of piece(片起始偏移地址)、piece length(片长度)。分组2696是一个answer piece分组(也称为piece分组),其结构如图10所示,其中包括piece index(片标志)、begin offset of piece(片起始偏移地址)、date(数据)。
图9 requestpiece分组的结构
图10 piece分组的结构
4、一种检测BT流量的方法
经分析,BT应用程序的工作过程归纳如下:
●资源发布者制作.torrent文件并上载到种子发布站点,将客户机连入BT网络并在tracker服务器上发布信息。默认情况下,BT的监听端口为6881-6889,也可由使用者指定;tracker服务器的监听端口主要有8080、8000、6969和2710,它们采取的连接方式都是TCP。
●BT客户机(下载者)获取.torrent文件,并向.torrent文件中提供的tracker服务器依次发起连接请求,直至与其中之一建立TCP连接并获取对等方列表。使用Ethereal抓包分析,发现这些连接请求被接受的可能性比较小,一般不到10%。
●BT客户机(下载者)获取.torrent文件,并向.torrent文件中提供的tracker服务器依次发起连接请求,直至与其中之一建立TCP连接并获取对等方列表。使用Ethereal抓包分析,发现这些连接请求被接受的可能性比较小,一般不到10%。
●BT客户机随机地向列表中的对等方发起连接请求,因为对等方列表中对等方个数比较多,所以在短时间内发出大量TCP连接请求分组。这些分组的源地址相同,源端口号相邻,目的地址/端口号不同,并且有相当一部分的目的端口号为6881-6889。
●如果连接建立成功,BT对等方之间进行握手,握手过程中使用特征字符串“BitTorrentprotocol”。然后使用interested、notinterested、choke和unchoke等4种分组互通对资源的意愿情况,之后通过RequestPiece和Piece分组传输资源。
●资源传输完毕,关闭TCP连接。
依据BT应用程序的这些特点,本文提出了检测BT流量存在的一种方法。该检测方法主要分4个步骤:
●特征字符串匹配。如果分组的负载中出现了字符串“BitTorrentprotocol”,表明有BT客户机运行,将该分组中的源IP地址和源端口号记为{IP.port}对,凡与此{IP,port}对相关的分组均判定为BT流量。
●特征端口匹配。所有使用6881-6889作为端口号的分组均被判定为BT流量。
●tracker服务器规则。将目的端口号为8000、8080、6969和2710的TCP分组的目的IP地址标记为tracker服务器,将源端口号为8000、8080、6969和2710的TCP分组的源IP地址标记为tracker服务器,所有与tracker服务器相关的分组均被判定为BT流量。
●通过以上3步可以较准确地判断流中是否存在BT业务,但并不能保证找出所有的BT分组。为了进一步增加判断的准确性。可使用流之间关系信息。例如某一时间段内,相同两台主机之间的流被关联在一起;来自不同主机的有着相同目的地址和目的端口号的流被关联起来;在某一时间段内来自同一主机的流被关联起来等。
笔者根据这种检测BT流量的方法实现了相关检测程序。由于该方法使用了特征字符串和特征端口来判断BT流量并使用流关系,在一定程度上解决了因程序使用随机端口带来的检测困难,提高了检测的准确性。
.分页: [1] [2] [3]
TAG: bittorrent 协议分析 检测