前几天有个熊孩子像抽风了一样不停地 CC 本站,造成了一些小插曲,于是本人抽了点时间进行了一点研究,写了点小脚本,完美解决此问题……
现在将 VBS 脚本公布,希望以后对其他朋友能有所帮助……
(配上自动监控程序,就可以实现24小时全自动封CC攻击IP了,效果很赞……)
关于批量封禁CC攻击IP、批量封IP的方法,网上其实早已有大量讨论文章,其中大多数人使用的方法均是:IPSecCmd [IP安全策略命令行版]、服务器批量封禁 IP
这种方法虽然是最底层屏蔽指定IP通讯,屏蔽效果很好,但是有很严重的缺陷:
如果IP数达到几百个,处理进度会越来越慢,最后巨慢、巨慢!!!!
而且还有更严重的缺陷,你封禁多少个 IP 就会添加多少个过滤、屏蔽规则,删掉该条策略之后,还不会自动删掉这些规则,更蛋疼的是手动还不能批量删,导致残留巨量无用规则,严重影响以后新建策略……
经过一番研究,找到了一个小脚本,并进行了一些修改(版权归原作者所有),并写上了很多注释,后半部分代码没写注释,参考前半部分的,代码基本一样,代码很简单,很容易理解,抽时间整理了一下,现公布出来……
IISBanIP.vbs 部分代码:
'/*========================================================================= ' * Intro VBScript使用ADSI为IIS批量添加屏蔽或允许访问的IP ' * FileName VBScript-ADSI-IIS-Add-Deny-Grant-IP-Change-MetaBase.xml.vbs ' * Author yongfa365 ' * Version v1.0 ' * WEB http://www.yongfa365.com ' * Email yongfa365[at]qq.com ' * FirstWrite http://www.yongfa365.com/Item/ADSI-IIS-Add-Deny-Grant-IP.vbs.html ' * From http://blog.csdn.net/linyu/archive/2008/11/14/3300454.aspx ' * MadeTime 2008-12-08 23:10:45 ' * LastModify 2008-12-08 23:10:45 ' *==========================================================================*/ ' '示例: ' AddDenyIP2All "192.168.1.106,255.255.255.0" '添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点 ' AddDenyIP2All "127.0.0.1" '添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点 ' AddDenyIP "123456","127.0.0.1" '添加要屏蔽的IP或一组计算机,到一个指定站点上 '用法: ' cscript.exe IISBanIP.vbs '-------------------------------------------------------------------------------- Dim Fso Set Fso = CreateObject("Scripting.FileSystemObject") If Fso.FileExists("ip.txt") Then '检查文件是否存在 Dim IP, I IP = Split(Fso.OpenTextfile("ip.txt", 1, False).Readall, vbCrLf) '读取文本内容,并存为数组 echo "Ban IP List:" For I = LBound(IP) To UBound(IP) If Len(IP(I)) > 7 Then AddDenyIP2All IP(I) End If Next echo "IP Total: " & (UBound(IP) + 1) & ", All Done!" Else echo "ip.txt 不存在!" End If '-------------------------------------------------------------------------------- '在控制台输出字符串 Sub echo(Str) WScript.echo Str End Sub '判断 IP 列表中是否已存在某个 IP,不存在返回:True,存在返回:False Function CheckIP(List, IP) Dim I For I = LBound(List) To UBound(List) If Left(List(I), InStr(List(I), ",") - 1) = IP Then CheckIP = False Exit Function End If Next CheckIP = True End Function '添加要屏蔽的IP或一组计算机,到IIS公共配置,以应用到所有站点 '如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点 Sub AddDenyIP2All(IP) Dim SecObj, MyIPSec, IPList, I Set SecObj = GetObject("IIS://LocalHost/W3SVC") Set MyIPSec = SecObj.IPSecurity MyIPSec.GrantByDefault = True '设置默认授权访问(允许) IPList = MyIPSec.IPDeny '获取禁止的IP列表:IPDeny;允许的IP列表为:MyIPSec.IPGrant If CheckIP(IPList, IP) = True Then '判断该 IP 是否已存在 '将新的 IP 加入到原 IP 列表中 I = UBound(IPList) + 1 ReDim Preserve IPList(I) IPList(I) = IP '更新 IIS 配置 MyIPSec.IPDeny = IPList SecObj.IPSecurity = MyIPSec SecObj.Setinfo echo "Ban IP: " & IP & ", OK!" Else echo "Ban IP: " & IP & ", Already Exists!" End If End Sub '添加要屏蔽的IP或一组计算机,到一个指定站点上 Sub AddDenyIP(strWebNo, strDenyIp) 'On Error Resume Next Set SecObj = GetObject("IIS://LocalHost/W3SVC/" & strWebNo & "/Root") Set MyIPSec = SecObj.IPSecurity MyIPSec.GrantByDefault = True IPList = MyIPSec.IPDeny I = UBound(IPList) + 1 ReDim Preserve IPList(I) IPList(I) = strDenyIp MyIPSec.IPDeny = IPList SecObj.IPSecurity = MyIPSec SecObj.Setinfo End Sub '添加允许的IP或一组计算机,到IIS公共配置,以应用到所有站点 '如果之前对有些站点单独做过屏蔽IP设置,在些设置不会生效,得在总的网站上设置一下,然后覆盖所有子结点 Sub AddGrantIP2All(strGrantIp) 'On Error Resume Next Set SecObj = GetObject("IIS://LocalHost/W3SVC") Set MyIPSec = SecObj.IPSecurity MyIPSec.GrantByDefault = False IPList = MyIPSec.IPGrant I = UBound(IPList) + 1 ReDim Preserve IPList(I) IPList(I) = strGrantIp MyIPSec.IPGrant = IPList SecObj.IPSecurity = MyIPSec SecObj.Setinfo End Sub '添加允许的IP或一组计算机,到一个指定站点上 Sub AddGrantIP(strWebNo, strGrantIp) 'On Error Resume Next Set SecObj = GetObject("IIS://LocalHost/W3SVC/" & strWebNo & "/Root") Set MyIPSec = SecObj.IPSecurity MyIPSec.GrantByDefault = False IPList = MyIPSec.IPGrant I = UBound(IPList) + 1 ReDim Preserve IPList(I) IPList(I) = strGrantIp MyIPSec.IPGrant = IPList SecObj.IPSecurity = MyIPSec SecObj.Setinfo End Sub '显示IIS公共配置里禁止访问的IP Sub ListDenyIP() Set SecObj = GetObject("IIS://LocalHost/W3SVC") Set MyIPSec = SecObj.IPSecurity IPList = MyIPSec.IPDeny '允许的IP:IPGrant,禁止的IP:IPDeny echo Join(IPList, vbCrLf) For I = 0 To UBound(IPList) echo I + 1 & "-->" & IPList(I) Next End Sub
完整文件及示例程序下载地址:IIS 批量封禁 IP 地址
2012-6-30 11:23:56 补充:
功能更强大、处理效率更高、运行速度更快的应用程序版公布:IIS 6.0 IP 地址限制辅助工具 v1.0
留言评论(旧系统):