风一样的男孩 发表于 2012-1-22 14:13:31

ROS只允许指定QQ号可以登录(QQ号黑白名单及特殊QQ号处理 )

QQ号白名单和黑名单功能在国产路由器中早已出现,routeros当然也可以实现。
但很多特殊QQ号需要特殊正则表达式,所以QQ号白名单和黑名单功能在routeros中一直没有得到应用。
所以今天把特殊QQ号的正则表达式规则写出来,希望大家喜欢。

如果你对下面脚本的含义不太理解,可以看我以前的一篇文章<只允许指定QQ号可以登录>.
#---------------------------------------------
#QQ白名单脚本
#作者:Bob Walker
#主页:www.ai800.com

#以下脚本执行后,只允许1099076442等白名单中QQ号可以登录,未进入白名单QQ号登录会提示服务器超时。
#执行脚本后,并不是非白名单QQ号就立即掉线或不登录了,因为"已经"建立的连接是不会中断的,
#所以重启路由器或清除连接就可以阻止非白名单QQ号登录了。
#约有1/4的QQ号需要写特殊正则表达式,并不是直接转换为十六进制就好了,见文章后半段。


#QQ白名单脚本开始:
/ip firewall layer7-protocol
remove
add name=qq-1099076442 regexp="^.\?\\x02.+\\x61\\x82\\x93\\x7a.+\\x03\$" comment="QQControl"
add name=qq-2444392928 regexp="^.\?\\x02.+\\x91\\xb2\\x79\\xe0.+\\x03\$" comment="QQControl"
add name=qq-2416736456 regexp="^.\?\\x02.+\\x90\\x0c\\x78\\xc8.+\\x03\$" comment="QQControl"
add name=qq-1837808903 regexp="^.\?\\x02.+\\x6d\\x8a\\xbd\\x07.+\\x03\$" comment="QQControl"
add name=qq-all regexp="^.\?\02.+\03\$" comment="QQControl"

/ip firewall filter
remove
add action=accept chain=forward layer7=qq-1099076442 comment="QQControl"
add action=accept chain=forward layer7=qq-2444392928 comment="QQControl"
add action=accept chain=forward layer7=qq-2416736456 comment="QQControl"
add action=accept chain=forward layer7=qq-1837808903 comment="QQControl"
add action=drop chain=forward layer7=qq-all comment="QQControl"
move 0

#QQ白名单脚本结束。
#------------------------------------------------
#------------------------------------------------
#QQ黑名单脚本
#作者:Bob Walker
#主页:www.ai800.com

#以下脚本执行后,只禁止1099076442等白名单中QQ号登录,未进入黑名单QQ号全可以登录。
#执行脚本后,并不是黑名单QQ号就立即掉线或不登录了,因为"已经"建立的连接是不会中断的,
#所以重启路由器或清除连接就可以阻止黑名单QQ号登录了。
#约有1/4的QQ号需要写特殊正则表达式,并不是直接转换为十六进制就好了,见文章后半段。


#QQ黑名单脚本开始:
/ip firewall layer7-protocol
remove
add name=qq-1099076442 regexp="^.\?\\x02.+\\x61\\x82\\x93\\x7a.+\\x03\$" comment="QQControl"
add name=qq-2444392928 regexp="^.\?\\x02.+\\x91\\xb2\\x79\\xe0.+\\x03\$" comment="QQControl"
add name=qq-2416736456 regexp="^.\?\\x02.+\\x90\\x0c\\x78\\xc8.+\\x03\$" comment="QQControl"
add name=qq-1837808903 regexp="^.\?\\x02.+\\x6d\\x8a\\xbd\\x07.+\\x03\$" comment="QQControl"
add name=qq-all regexp="^.\?\02.+\03\$" comment="QQControl"

/ip firewall filter
remove
add action=drop chain=forward layer7=qq-1099076442 comment="QQControl"
add action=drop chain=forward layer7=qq-2444392928 comment="QQControl"
add action=drop chain=forward layer7=qq-2416736456 comment="QQControl"
add action=drop chain=forward layer7=qq-1837808903 comment="QQControl"
add action=accept chain=forward layer7=qq-all comment="QQControl"
move 0

#QQ黑名单脚本结束。
#------------------------------------------------
继续


对字符串处理脚本不熟悉,学习中。也许以后会出全自动脚本。

继续

routeros中,把整数转换成十六进制数是什么函数?

继续

查了一下资料,routeros中好像没有把整数转换成十六进制数的函数,正在咨询mikrotik。


继续

routeros没有dec2hex函数,需要使用loop反算。

继续

现在写特殊QQ号的正则表达式写法解密。

继续
一般的QQ号如286331153,
转换成十六进制后是\\x11\\x11\\x11\\x11,
那么针对这个QQ号的l7命令是
/ip firewall layer7
add name=qq-1 regexp="^.\?\\x02.+\\x11\\x11\\x11\\x11.+\03\$"

但当十六进制中有\\x00,\\x24,\\x41-\\x5a,\\x5b-\\x5e时,
就要相应改变正则表达式,
改变方法总结为
\\x00变为.\?,
\\x24改为\\\$
\\x41-\\x5a分别加\\x20,改为\\x60-\\x7a,
\\x5b改为\\[
\\x5c改为\\
\\x5d改为\\]
\\x5e改为\\^
一般的QQ号如286331153,
转换成十六进制后是\\x11\\x11\\x11\\x11,
那么针对这个QQ号的l7命令是
/ip firewall layer7
add name=qq-1 regexp="^.\?\\x02.+\\x11\\x11\\x11\\x11.+\03\$"

但当十六进制中有\\x00,\\x24,\\x41-\\x5a,\\x5b-\\x5e时,
就要相应改变正则表达式,
改变方法总结为
\\x00变为.\?,
\\x24改为\\\$
\\x41-\\x5a分别加\\x20,改为\\x60-\\x7a,
\\x5b改为\\[
\\x5c改为\\
\\x5d改为\\]
\\x5e改为\\^
继续

以下是具体实例:
\\x11\\x11\\x00\\x11改为\\x11\\x11.\?\\x11
\\x11\\x11\\x5b\\x11改为\\x11\\x11\\[\\x11
\\x11\\x11\\x5c\\x11改为\\x11\\x11\\\\x11
\\x11\\x11\\x5d\\x11改为\\x11\\x11\\]\\x11
\\x11\\x11\\x5e\\x11改为\\x11\\x11\\^\\x11
\\x11\\x11\\x24\\x11改为\\x11\\x11\\\$\\x11
\\x11\\x11\\x41\\x11改为\\x11\\x11\\x61\\x11
\\x11\\x11\\x42\\x11改为\\x11\\x11\\x62\\x11
\\x11\\x11\\x43\\x11改为\\x11\\x11\\x63\\x11
\\x11\\x11\\x44\\x11改为\\x11\\x11\\x64\\x11
\\x11\\x11\\x45\\x11改为\\x11\\x11\\x65\\x11
\\x11\\x11\\x46\\x11改为\\x11\\x11\\x66\\x11
\\x11\\x11\\x47\\x11改为\\x11\\x11\\x67\\x11
\\x11\\x11\\x48\\x11改为\\x11\\x11\\x68\\x11
\\x11\\x11\\x49\\x11改为\\x11\\x11\\x69\\x11
\\x11\\x11\\x4a\\x11改为\\x11\\x11\\x6a\\x11
\\x11\\x11\\x4b\\x11改为\\x11\\x11\\x6b\\x11
\\x11\\x11\\x4c\\x11改为\\x11\\x11\\x6c\\x11
\\x11\\x11\\x4d\\x11改为\\x11\\x11\\x6d\\x11
\\x11\\x11\\x4e\\x11改为\\x11\\x11\\x6e\\x11
\\x11\\x11\\x4f\\x11改为\\x11\\x11\\x6f\\x11
\\x11\\x11\\x50\\x11改为\\x11\\x11\\x70\\x11
\\x11\\x11\\x51\\x11改为\\x11\\x11\\x71\\x11
\\x11\\x11\\x52\\x11改为\\x11\\x11\\x72\\x11
\\x11\\x11\\x53\\x11改为\\x11\\x11\\x73\\x11
\\x11\\x11\\x54\\x11改为\\x11\\x11\\x74\\x11
\\x11\\x11\\x55\\x11改为\\x11\\x11\\x75\\x11
\\x11\\x11\\x56\\x11改为\\x11\\x11\\x76\\x11
\\x11\\x11\\x57\\x11改为\\x11\\x11\\x77\\x11
\\x11\\x11\\x58\\x11改为\\x11\\x11\\x78\\x11
\\x11\\x11\\x59\\x11改为\\x11\\x11\\x79\\x11
\\x11\\x11\\x5a\\x11改为\\x11\\x11\\x7a\\x11
继续

不能保证所有特殊字节都收集齐全了,百分之九九的QQ号都能正常匹配。因为已经知道处理的方法,所以我会随时更新的。如发现还有特殊的字节需要处理,请联系我。

关于10位QQ号:
根本没有9位10位QQ号写法的区别,那是以前巧合的误解.
以前10位转换后16进制后去掉首字节或尾字节,是因为当时不知怎么改那个字节.
现在只要根据文章中把特殊字节改就可以了.

继续

关于11位QQ号:
QQ2011版的报文显示只支持4000000000(10位)以下的QQ号,但可以使用电信天翼11位手机号做QQ号来登录,其实11位的QQ号是表面现象了(相当于邮箱登录QQ一样),11位QQ号(或邮箱)会在登录时会被转换成真实的QQ号,如18915979529(11位天翼号)会被转换成2715979529(10位), 转换的方法因为没有太多样本,不知怎么转的,如果要做白名单可以抓包分析。

关于 邮箱登录QQ:
和上面差不多,也要抓包分析。

现在号码越长越难记,10位的Q号过个年不上,就忘了。所以腾讯当然希望使用手机号或邮箱做登录账户。


继续


本来对"QQ号黑白名单完美全自动脚本"并不报太大希望,先前mikrotik工程师提供了两个dec2hex脚本中使用了几个全局变量,并且运行一次后变量类型都变了,所以dec2hex脚本放在循环里根本不行。幸运的是mikrotik工程师又提供了第三个更简单的dec2hex脚本,所以这才突破了难关,终于完成了“QQ号黑白名单完美全自动脚本”。下面是初步测试,近来很忙,有空进行全面测试。

QQ号黑白名单完美全自动脚本:

特点:
1.白名单、黑名单改个名单类型值就能快速切换。
2.支持各种长度QQ号。
3.支持各种特殊字节。
4.支持批量QQ号加入。
5.无需嵌入工具,直接使用一个routeros脚本。
http://player.56.com/v_NjU0NTc4MDU.swf
一个不广泛的应用花这么长时间写脚本,有点得不尝失,但通过这次脚本的编写,对routeros脚本的认识更深了。

文章中的代码变化都指的是终端命令行模式的变化。
页: [1]
查看完整版本: ROS只允许指定QQ号可以登录(QQ号黑白名单及特殊QQ号处理 )