Chinaunix首页 | 论坛 | 博客

qsh

  • 博客访问: 4034108
  • 博文数量: 1015
  • 博客积分: 15904
  • 博客等级: 上将
  • 技术积分: 8572
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-04 19:16
文章分类

全部博文(1015)

文章存档

2019年(1)

2017年(1)

2016年(19)

2015年(27)

2014年(30)

2013年(95)

2012年(199)

2011年(72)

2010年(109)

2009年(166)

2008年(296)

分类:

2010-07-29 23:00:30

CISCO路由器封锁QQ客户端
2010-02-16 19:33:57

 

1、 正常情况下,QQ可以顺利的登录:

clip_image002

这时通过抓包可以发现,QQ协议的数据包,正常情况下(后面有不正常的情况),都是通过udp协议传送的。在udp的数据载荷中,可以看到QQ对应用层数据做的封装格式。其中有一个叫做“命令”的字段(这个名字是科来给起的,真实名称估计是没有),这一字段在数据包所处位置固定、长度固定,通过分析登录过程中的一系列数据包,我大概可以断定这个“命令”字段就是QQ用来识别每一个数据包的作用和包含内容的(比如有请求登录、发送消息、接受消息、加个好友什么的)。正好科来在概要中有描述:其中有一个命令就是“请求登录令牌”,这个数据包听上去在登录过程中比较关键,所以我想测试一下,如果阻止这个数据包发送,能不能就阻断掉QQ登录。在包结构中看到,这个命令字段距离3层头开始的位置有31个字节,大小为2字节,它的值是“00BA”(注意是16进制数值)。

于是在路由器中定义一个class来匹配“请求登录令牌”这个数据包:

class-map type access-control match-any qq_udp

match start l3-start offset 31 size 2 eq 0xBA

然后通过policy将这个数据包记录下来并drop掉:

policy-map type access-control qq_udp

class qq_udp

log

drop

2、 第一次测试结果:

clip_image004

在科来的抓包和路由器的日志中可以看到,路由器将“请求登录令牌”丢弃掉后,QQ客户端在不断的重新发送这个数据包,这一点可以证明这个数据包的作用还是很大的,送不出去,它是不会罢休的。

过了很久很久(大约1、2分钟后),我估计QQ是觉得通过udp发送是没戏了,这时它突然开始通过HTTP登录,并且很快就登上去了。这时再通过科来分析这些HTTP数据包,发现在HTTP数据载荷中都是无法识别的2进制数据,我估计它可能是把登陆数据加密后通过HTTP传输了:

clip_image006

但是继续分析多个HTTP数据后可以看出:

clip_image008

在这些封装在HTTP中的2进制数据,第3、4个字节的值都是0x02和0x16,根据这个规律,再做一个class匹配所有符合这样特征的数据包,执行drop:

class-map type access-control match-any qq_tcp

match start l3-start offset 42 size 2 eq 0x216

policy-map type access-control qq_tcp

class qq_tcp

log

drop

最后再测试一次:

clip_image010

路由器上显示,先把QQ客户端的udp请求给drop了,一会又把它的tcp请求给drop了。这回QQ没招了,给出了“超时”提示!

通过对数据包的深层识别,就能够阻止QQ利用80、443这些必开端口进行登录的诡异行为。

最后介绍一下这个feature:12.4(15)T里面就有了,从18到72都带!

阅读(980) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~