P2P协议分析end.docx

上传人:b****7 文档编号:9451490 上传时间:2023-02-04 格式:DOCX 页数:68 大小:98.89KB
下载 相关 举报
P2P协议分析end.docx_第1页
第1页 / 共68页
P2P协议分析end.docx_第2页
第2页 / 共68页
P2P协议分析end.docx_第3页
第3页 / 共68页
P2P协议分析end.docx_第4页
第4页 / 共68页
P2P协议分析end.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

P2P协议分析end.docx

《P2P协议分析end.docx》由会员分享,可在线阅读,更多相关《P2P协议分析end.docx(68页珍藏版)》请在冰豆网上搜索。

P2P协议分析end.docx

P2P协议分析end

 

P2P协议分析

 

一、eDonkey/eMule协议1

二、Gnutella6

三、PPLive8

四、迅雷12

五、KuGoo18

六、QQlive20

七、Feidian网络电视22

八、PPStream25

九、CCIPTV28

十、DC++34

 

一、eDonkey/eMule协议

在eDonkey/eMule通信的TCP数据包中,格式如下:

✧数据流(除掉包头)中的第一个字节代表的是通信的协议簇代码(如0xE3为标准的edonkey协议,0xE4为kad协议,0xc5是eMule扩展协议);

✧接下来的四个字节代表包长度,所有的包都用这种方式发送到TCP流中,就可以区分出来了;

✧另外每个包内容中的第一个字节为opcode,即在确定了某个具体协议后,这个opcode确定了这个包的具体含义;

在eMule通信的UDP数据包中,处理起来更加得简单,因为UDP本来就是以一个包一个包作为单位在网络上流传的,因此不需要在包的内容中再包含表示长度的字段。

每个UDP包的第一个字节是协议簇代码,其它内容就是包的内容。

说明:

有种特殊情况,遇见大量的数据传出(压缩数据),0xe3改为0xd4,oxe4改为0xe5。

1.1、TCP通信

eMule/eDonkey协议的TCP消息头格式:

列项名称

特征

长度(B)

protocol

0xe3:

eDonkey,0xe4:

Kad,0xc5:

eMule

1

length

信息包长度

4

type

信息类型

1

比如下面TCP数据包:

列项名称

特征

protocol

0e3

length

19280000

type

46

00000013c328dc00000b6ae3d33208004500...(....j..2..E.

00100334cca14000800692abc0a80412da02.4..@...........

0020f9b90cdf1236c55ab525a66749c35018.....6.Z.%.gI.P.

00304061c2c50000e31928000046f5469530@a......(..F.F.0

0040d06898749deae3ea289e3e9200b89719.h.t....(.>.....

... ...

(1)eDonkey协议的TCP消息类型:

Client——Server(协议标识0xe3)

信息类型

说明(协议标识0xe3)

0x01

HELLO

0x05

BAD_PROTO

0x14

GET_SERVER_LIST

0x15

OFFER_FILES

0x16

SEARCH_FILES

0x18

DISCONNECT

0x19

GET_SOURCES

0x1a

SEARCH_USER

0x1c

CLIENT_CB_REQ

0x21

MORE_RESULTS

0x32

SERVER_LIST

0x33

SEARCH_FILE_RESULTS

0x34

SERVER_STATUS

0x35

SERVER_CB_REQ

0x36

CALLBACK_FAIL

0x38

SERVER_MESSAGE

0x40

ID_CHANGE

0x41

SERVER_INFO_DATA

0x42

FOUND_SOURCES

0x43

SEARCH_USER_RESULTS

0x23

OP_GETSOURCES_OBFU

0x44

OP_FOUNDSOURCES_OBFU

Clinet——Client(协议标识0xe3)

信息类型

说明(协议标识0xe3)

0x01

HELLO_CLIENT

0x46

SENDING_PART

0x47

REQUEST_PARTS

0x48

NO_SUCH_FILE

0x49

END_OF_DOWNLOAD

0x4a

VIEW_FILES

0x4b

VIEW_FILES_ANSWER

0x4c

HELLO_ANSWER

0x4d

NEW_CLIENT_ID

0x4e

CLIENT_MESSAGE

0x4f

FILE_STATUS_REQUEST

0x50

FILE_STATUS

0x51

HASHSET_REQUEST

0x52

HASHSET_ANSWER

0x54

SLOT_REQUEST

0x55

SLOT_GIVEN

0x56

SLOT_RELEASE

0x57

SLOT_TAKEN

0x58

FILE_REQUEST

0x59

FILE_REQUEST_ANSWER

0x5d

GET_SHARED_DIRS

0x5e

GET_SHARED_FILES

0x5f

SHARED_DIRS

0x60

SHARED_FILES

0x61

SHARED_DENIED

eMule协议(协议标识0xc5)

信息类型

说明(协议标识0xc5)

0x01

HELLO

0x02

HELLO_ANSWER

0x40

DATA_COMPRESSED

0x60

QUEUE_RANKING

0x61

filedescription

0x81

SOURCES_REQUEST

0x82

SOURCES_ANSWER

0x87

SecureIdentification

0x85

Theclient’spublickey

0x86

Theclientsignsa4byteschallengeusingitspublickey.

0x90

Requestanimagepreviewforafile.

0x91

Animagepreviewanswermessage

0x92

MULTIPACKET

0x93

MULTIPACKET_ANSWER

0x9b

AICH_REQUEST

0x9c

AICH_ANSWER

0x9d

AICHFILEHASH_ANSWER

0x9e

AICHFILEHASH_REQUEST

0xa1

DATA_COMPRESSED_64

0xa2

SENDING_PART_64

0xa3

REQUEST_PARTS_64

0xa4

MULTIPACKET_EXT

1.2、UDP通信

eMule/eDonkey协议的UDP消息头格式:

列项名称

特征

长度(B)

protocol

0xe3:

eDonkey,0xe4:

Kad,0xc5:

eMule

1

type

信息类型

1

eDonkey协议的UDP信息类型(协议标识0xe3):

信息类型

说明(协议标识0xe3)

0x96

SERVER_STATUS_REQUEST

0x97

SERVER_STATUS

0x98

SEARCH_FILE

0x99

SEARCH_FILE_RESULTS

0x9a

GET_SOURCES

0x9b

FOUND_SOURCES

0x9c

CALLBACK_REQUEST

0x9e

CALLBACK_FAIL

0xa1

SERVER_LIST

0xa2

GET_SERVER_INFO

0xa3

SERVER_INFO

0xa4

GET_SERVER_LIST

eMule协议的UDP信息类型(协议标识0xC5):

信息类型

说明(协议标识0xc5)

0x90

REASKFILEPING

0x91

REASKACK

0x92

FILE_NOT_FOUND

0x93

QUEUE_FULL

Overnet的设计目的是取代eDonkey,许多eDonkey客户端程序同时使用Overnet,Overnet没有中心服务器,但其用户数量现在少于eDonke。

KadNetwork很类似Overnet,几乎只有eDonkey的用户你用它,但它的普及性也很低。

信息类型

说明overnet(协议标识0xe3)

0x0a

CONNECT

0x0b

CONNECT_REPLY

0x0c

PUBLICIZE

0x0d

PUBLICIZE_ACK

0x0e

SEARCH

0x0f

SEARCH_NEXT

0x10

SEARCH_INFO

0x11

SEARCH_RESULT

0x12

SEARCH_END

0x13

PUBLISH

0x14

PUBLISH_ACK

0x15

IDENTIFY_REPLY

0x16

IDENTIFY_ACK

0x18

FIREWALL_CONNECTION

0x19

FIREWALL_CONNECTION_ACK

0x1a

FIREWALL_CONNECTION_NACK

0x1b

IP_QUERY

0x1c

IP_QUERY_ANSWER

0x1d

IP_QUERY_END

0x1e

IDENTIFY

KAD网络的UDP信息类型(协议标识0xe4)有如下类型:

11,10,20,28,18,19,21,29,30,50,58。

信息类型

说明(0xe4Kad)

0x20

hello

0x28

helloanswer

0x10

 

0x11

 

0x21

 

0x30

 

0x50

 

0x52

0x28

 

0x19

 

0x18

 

0x58

 

消息代码

消息类型

说明(0xe4UDPKad)

0x10

KADEMLIA_HELLO_REQ

0x11

KADEMLIA2_HELLO_REQ

0x18

KADEMLIA_HELLO_RES

0x19

KADEMLIA2_HELLO_RES

0x20

KADEMLIA_REQ

0x21

KADEMLIA2_REQ

0x28

KADEMLIA_RES

*(CNT)

0x29

KADEMLIA2_RES

0x30

KADEMLIA_SEARCH_REQ

[ext]

0x32

KADEMLIA_SEARCH_NOTES_REQ

0x33

KADEMLIA2_SEARCH_KEY_REQ

0x34

KADEMLIA2_SEARCH_SOURCE_REQ

0x35

KADEMLIA2_SEARCH_NOTES_REQ

0x38

KADEMLIA_SEARCH_RES

*(CNT2))*(CNT1)

0x3A

KADEMLIA_SEARCH_NOTES_RES

*(CNT2))*(CNT1)

0x3B

KADEMLIA2_SEARCH_RES

0x40

KADEMLIA_PUBLISH_REQ

*(CNT2))*(CNT1)

0x42

KADEMLIA_PUBLISH_NOTES_REQ

*(CNT2))*(CNT1)

0x43

KADEMLIA2_PUBLISH_KEY_REQ

0x44

KADEMLIA2_PUBLISH_SOURCE_REQ

0x45

KADEMLIA2_PUBLISH_NOTES_REQ

0x48

KADEMLIA_PUBLISH_RES

0x4A

KADEMLIA_PUBLISH_NOTES_RES

0x4B

KADEMLIA2_PUBLISH_RES

0x50

KADEMLIA_FIREWALLED_REQ

0x51

KADEMLIA_FINDBUDDY_REQ

0x52

KADEMLIA_CALLBACK_REQ

0x58

KADEMLIA_FIREWALLED_RES

0x59

KADEMLIA_FIREWALLED_ACK_RES

(null)

0x5A

KADEMLIA_FINDBUDDY_RES

二、Gnutella

Gnutella的p2p网络主要是负责资源的搜索和连接的建立,真正的数据传输不在Gnutella网络中进行。

当一个客户端找到相应的资源客户端并获取该资源客户端的连接信息后,即一个客户机收到一个QueryHit描述符,它将初始化直接下载描述符的结果集其中的一个文件。

文件将不通过Gnutella的网络进行下载,一个源客户机和目标客户机直接建立连接进行数据的传输。

文件数据从来不会通过Gnutella网络进行传送。

文件下载协议是HTTP协议。

初始化下载的客户机发送一个请求字符串到目标客户机,格式如下:

GET/get///HTTP/1.0\r\n

Connection:

Keep-Alive\r\n

Range:

bytes=0-\r\n

User-Agent:

Gnutella\r\n3\r\n

这里的是一个QueryHit描述符结果集中的FileIndex/FileName对中的其中之一。

当服务器收到下载请求,将回应于HTTP1.0兼容的头,例如:

HTTP200OK\r\n

Server:

Gnutella\r\n

Content-type:

application/binary\r\n

Content-length:

4356789\r\n

\r\n

并非总是在初始化一个文件下载后都可以与Gnutella客户机建立直接连接。

客户机可能在防火墙后并不允许通过它的Gnutella端口进入的连接。

如果一个直接连接不能建立,客户机若想下载文件可能会请求共享文件的客户机采用“推送”方式来代替。

一个客户机可以通过发送一个Push文件推送请求到发送QueryHit请求的客户机处来实现。

作为Push请求目标的客户机(在客户机标志区标示一个Push的描述符)应该接收Push描述符,尝试建立一个新的TCP/IP连接到请求客户机(在Push描述符中标示有IP地址和端口)。

如果直接连接不能建立,那么可能发起Push请求的客户机自己也在防火墙后。

这种情况,文件传输将不能进行。

如果一个直接连接可以从防火墙后的客户机建立到发起Push请求的客户机,防火墙后的客户机应该立刻发送以下的:

GIV:

/\n\n

这里的:

是Push请求头中的的文件索引和客户机标示,是本地文件表中文件索引为的文件。

客户机收到GIV请求头(Push请求者)应该从头中取出并构造一个如下的HTTPGET请求:

GET/get///HTTP/1.0\r\n

Connection:

Keep-Alive\r\n

Range:

bytes=0-\r\n

User-Agent:

Gnutella\r\n3

\r\n

余下的下载过程和上面所述的“文件下载”内容一致。

可允许的用户-代理字符串由HTTP标准定义。

客户机开发者不能对这里使用的值做自己的假定。

其中的值“Gnutella”只是用来演示举例而已。

首先来说明一下Gnutella的协议格式,如下表所示:

Gnutella头部结构

项目

长度(B)

说明

标识ID

16

唯一的网络描述字符

负载标识

2

Ping=0x00,Pong=0x01,Query=0x80,QueryHit=0x81,Push=0x40

TTL

1

生存期

Hops

1

TTL(0)=TTL(i)+Hops(i)

负载长度

4

不同的负载有不同的结构和长度

数据流

n

承载的数据区内容

不同的负载描述结构说明:

(1)Ping

没有负载体;

(2)Pong

 

(3)Query

 

其中,Mininumspeed最小响应速度,响应的客户机的速度必须在此速度之上(以K/秒为单位)。

Searchcriteria:

查询关键字,一个零结尾的字符串。

这个字符串的最大长度由描述头的PayloadLength负载长度规定。

(4)QueryHit

其中,NumofHits指查询的符合的个数,speed指文件的传输速率,单位为KB/s,ResultSet描述的是查询结果集,集合的元素结构为:

 

(5)Push

 

三、PPLive

(1)启动初始化,获取播放列表信息(TCP)

PPlive是p2p视频流方面的应用,启动PPlive客户端之后,该客户端会通过DNS解析出PPlive服务器()的ip地址,然后建立TCP连接。

正常的http协议在建立TCP连接之后,主机会向PPlive服务器发送GET请求,获取相关的信息:

下面是抓取的数据包格式:

GET/zh-cn/mini/index.htmlHTTP/1.1\r\n

RequestMethod:

GET

RequestURI:

/zh-cn/mini/index.html

RequestVersion:

HTTP/1.1

Accept:

*/*\r\n

Accept-Language:

zh-cn\r\n

UA-CPU:

x86\r\n

Accept-Encoding:

gzip,deflate\r\n

If-Modified-Since:

Tue,23Jan200704:

13:

36GMT;length=11054\r\n

User-Agent:

Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.2;SV1;.NETCLR1.1.4322)\r\n

Host:

\r\n

Connection:

Keep-Alive\r\n

Cookie:

flux_stat_user=0.313428001169524028636494169;cck_lasttime=1169524045312;cck_count=0;rcc74340947=2101604757%7C15%7C2%7C1%7C%7C%2Ff%3Fkz%3D66648944\r\n

\r\n

GET/zh-cn/mini/index.htmlHTTP/1.1\r\n

RequestMethod:

GET

RequestURI:

/zh-cn/mini/index.html

RequestVersion:

HTTP/1.1

Accept:

*/*\r\n

Accept-Language:

zh-cn\r\n

UA-CPU:

x86\r\n

Accept-Encoding:

gzip,deflate\r\n

If-Modified-Since:

Fri,09Feb200708:

15:

02GMT;length=10871\r\n

User-Agent:

Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.2;SV1;.NETCLR1.1.4322)\r\n

Host:

\r\n

Connection:

Keep-Alive\r\n

Cookie:

flux_stat_user=0.622608001171008597457657584;__utma=140991987.415022390.1170821161.1171008599.1171008993.4;__utmb=140991987;__utmz=140991987.1170821161.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none);rcc74340947=2101604757%7

\r\n

因此,可以从一系列的GET请求中的特征标识Host和Cookie内容,可以初步分析出pplive客户端的启动。

(2)PPlive客户加入网络,获取节点信息(UDP)

获得了频道信息后PPlive应用程序通过UDP协议与域名为的目的主机通信(其中x可以为0~8,s,h),由于其采用域名方式访问,可以假定为固定的服务器提供P2P网络中的资源信息,即“片源服务器”。

说明:

其中红色字体的标识固定不变(e903,0198ab0102),

蓝色字体是变化的,但是都是很小,为01,02,03,

绿色字体的是个连续的序号。

客户端——片源服务器

客户端会向片源服务器发送UDP数据包,报告自己加入PPlive网络,再者客户端发出的数据大小为57B,片源服务器返回的数据大小不定

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1