CISCO路由器封锁QQ客户端

 

一、 正常状况下,QQ能够顺利的登陆:tcp

clip_p_w_picpath002

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

因而在路由器中定义一个class来匹配“请求登陆令牌”这个数据包:测试

class-map type access-control match-any qq_udpthis

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

而后经过policy将这个数据包记录下来并drop掉:日志

policy-map type access-control qq_udpblog

class qq_udpip

log路由

dropget

二、 第一次测试结果:

clip_p_w_picpath004

在科来的抓包和路由器的日志中能够看到,路由器将“请求登陆令牌”丢弃掉后,QQ客户端在不断的从新发送这个数据包,这一点能够证实这个数据包的做用仍是很大的,送不出去,它是不会罢休的。

过了好久好久(大约一、2分钟后),我估计QQ是以为经过udp发送是没戏了,这时它忽然开始经过HTTP登陆,而且很快就登上去了。这时再经过科来分析这些HTTP数据包,发如今HTTP数据载荷中都是没法识别的2进制数据,我估计它多是把登录数据加密后经过HTTP传输了:

clip_p_w_picpath006

可是继续分析多个HTTP数据后能够看出:

clip_p_w_picpath008

在这些封装在HTTP中的2进制数据,第三、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_p_w_picpath010

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

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

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

相关文章
相关标签/搜索