利用iptables禁用QQ号码

今年上半年研究出来的,http://www.ywjt.org/index/archives/453.html,一块儿分享:html

最开始禁用QQ是用iptables的七层补丁,但那个是针对源ip去禁用QQ的特征码,如今咱们要作的是想针对QQ号作处理。另外,以前认为QQ是用udp链接服务器的8000端口,而后试着把udp的8000端口禁用,发现和咱们游戏同样,发现这个端口不通,会去用另外的备用端口,好比tcp的80和443之类的端口,因此经过禁用端口这是行不通的,并且服务器地址不定。
注意到iptables有个-m string –hex-string 这个匹配方式,有个string模块,有个抓数据包,而后作drop处理的方式,下面就去抓包。
工具:SmartSniff
QQ号码:858276842
电脑ip:192.168.3.7
网关:linux iptables nat环境
思路:QQ号码须要通讯,先获得QQ号码的十六进制。
echo “obase=16;858276842″ | bc
获得QQ号码的十六进制332843EA。
linux

下面抓包的时候多注意到33 28 43 EA 这种字符。shell

 

 

第一个框是QQ号,第二个和第三个是通过屡次登录,和登录不一样QQ号获得的“特征码”
每次登录都须要有这个字符,因此试着匹配这个字符,而后drop。看看效果,
服务器

另外有个差别的就是QQ2011的Q+版本特征码不同,看下面的截图65变成了64tcp

针对QQ2011 Q+版本工具

iptables -I RH-Firewall-1-INPUT -s 192.168.3.7/32 -m string –hex-string “|0000010101000064|” –algo bm -j DROP测试

QQ2012的时候匹配的是0000010101000065,会出现已经登录的QQ不会掉线的状况,可是会出现重复收到好友发送过来的消息,多是由于收到消息以后没法通知服务器已经收到,因此服务器重复发送好友的消息过来,可是下线以后会没法上线。
当匹配的是00010101000065,前面少匹配一个00,已经登录的QQ发现会出现没法发送消息的状况。spa

iptables -I RH-Firewall-1-INPUT -s 192.168.3.7/32 -m string –hex-string “|0000010101000065|” –algo bm -j DROPhtm

开白名单的时候只须要匹配到那个QQ号,而后ACCEPT处理就能够了,好比858276842这个QQ号码,能够抓包获得是33 28 43 ea,也能够经过计算获得,为了减少偏差,后面能够多匹配0200这个后缀。blog

iptables -I RH-Firewall-1-INPUT -s 192.168.3.7/32 -m string –hex-string “|332843ea0200|” –algo bm -j ACCEPT

经测试百发百中。
echo “obase=16; 858276842″ | bc这样能够获得QQ号码的16进制。固然也有例外的状况,当十六进制前面有个0的时候,系统默认会把0去掉,咱们能够作个特殊处理,当是奇数的时候前面自动加0,用的是awk

echo “obase=16;396162545″|bc | awk -F “” ‘{if(NF%2==”0″) {print $0} else {print “0″$0 }}’

另外能够经过抓包获得哪一个ip在登录哪一个QQ号,具体操做方法是在网关上面抓包。
tcpdump -nn -i eth1 -X ‘host 192.168.3.7′
能够加个参数 –w file,把结果写到文件里面去,好作分析,以后用一样的方法-r读取这个文件就能够了,在文件里面把十六进制的空格去掉,用sed ‘s/ //g’就能够了,而后去搜索特征码0200,前面的那几位就是QQ号码的十六进制了,十六进制转换十进制能够用shell的echo命令巧妙地实现:

echo $((16#179CF5F1))
获得QQ:396162545
因此最终的实行方法是

#容许的QQ先ACCEPT放行,
iptables -I RH-Firewall-1-INPUT -m string –hex-string “|332843ea0200|” –algo bm -j ACCEPT
#拒绝全部QQ2012和Q+的登录
iptables -I RH-Firewall-1-INPUT -m string –hex-string “|0000010101000065|” –algo bm -j DROP

iptables -I RH-Firewall-1-INPUT -m string –hex-string “|0000010101000064|” –algo bm -j DROP

附作测试时候保存的QQ数据包:

 

这个是Q+的。

已经作大范围验证~ ~

相关文章
相关标签/搜索