- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
P2P协议识别
P2P协议识别
技术方案
报告人:
时间:
Gnutella 0.4协议
端口特征识别
缺省端口:6346/6347/6348
流量特征识别
IPP2P识别方案:
gnutella tcp
检查gnutella 的get 命令
如果tcp payload的最初9个字节的内容为GET /get/ ,或最初的13个字节为GET /uri-res/即为gnutella
检查gnutella 的get 命令和其他特定字段
如果tcp payload的最初17个字节的内容为GNUTELLA CONNECT/,或者最初的9个字节的内容为GNUTELLA/。 即为gnutella
如果tcp payload的最初9个字节的内容为GET /get/ ,或最初的13个字节为GET /uri-res/
若ip payload长度大于tcp头部长度+30,此时如果指针自tcp payload右移8个字节,指针所指的内容中第一个字节为0x0d,第二个字节为0x0a,匹配X-Gnutella-,或X-Queue:,匹配成功则为 gnutella,(详情参看代码)
Gnutella udp
如果udp payload的最初3个字节的内容为GND,或者最初的9个字节的内容为GNUTELLA/。 即为gnutella
L7Filter识别方案:
^(gnd[\x01\x02]?.?.?\x01|gnutella connect/[012]\.[0-9]\x0d\x0a|get /uri-res/n2r\?urn:sha1:|get /.*user-agent: (gtk-gnutella|bearshare|mactella|gnucleus|gnotella|limewire|imesh)|get /.*content-type: application/x-gnutella-packets|giv [0-9]*:[0-9a-f]*/|queue [0-9a-f]* [1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?\.[1-9][0-9]?[0-9]?:[1-9][0-9]?[0-9]?[0-9]?|gnutella.*content-type: application/x-gnutella|..................lime)
我们的识别方案:
连接查询过程:Payload的第17个字节是命令ID,其值为:0x00, 0x01, 0x80, 0x81, 0x40, (扩展:0x02, 0x10, 0x30, 0x31, 0x32), 从第20到23这4个字节,是其后的Payload长度,即(Payload长度-23)。与IP中的报文长度(3-4字节)相比,中间应该相差IP头(20B)、TCP/UDP头(8B/20B)、Gnutella头23B
下载过程:下载遵守HTTP协议。下载请求的以GET /get/fileid/filename/ HTTP开头,后面匹配User-Agent: 的内容以Gnutella/开头。返回文件数据时,以HTTP /x.x 200 OK \r\n开头,后面匹配Server: 的内容是Gnutella/y.y\r\n.
协议特征提取
连接阶段
如果Client A向SuperNode B发起Gnutella连接,将进行以下通讯:
1.首先进行TCP三次握手。
2.连接成功后,A通过TCP发送:GNUTELLA CONNECT/x30/x2e/x36/0x0d/0x0a……
……可以匹配的有用的字段:
Listen-IP: 7:6346 (这个具体是什么还不清楚)
以下分为两种响应情况:
成功Gnutella连接:
3.成功响应为,B发送响应消息:GNUTELLA/0.6 200 OK/0x0d/0x0a……
4.A接到响应消息后,发送响应:GNUTELLA/0.6 200 OK/0x0d/0x0a……
……没有什么对检测有意义的字段:
不成功Gnutella连接:
5.如果连接失败,B会发送消息:GNUTELLA/0.6 ??? /0x0d/0x0a……
6.终止TCP连接,B会发起Fin包
*上面的过程是普通节点和超级节点之间建立连接的过程;它可以推广到普通节点和普通节点之间,超级节点和超级节点之间的连接建立。
Ping/Pong过程
检测到Ping消息:
从IP头中得到源IP
从TCP头中得到源Port
从Payload中得到描述ID
写一条网络节点发现日志,sip=源IP, sport=TCP端口, snodeid=描述ID, snodetype=1(normal)
检测到Pong消息:
从IP头中得到源IP
从TCP头中得到源
文档评论(0)