文章首页 站长资讯 网站建设 流量赚钱 休闲娱乐 我的专题 其他文章
  网站建设 - 文章浏览
VB编写防CC攻击工具
发布日期:2008-5-23    共有 Loading... 人次浏览
下面简单说一下工作原理,其实很简单,就是获取TCP连接表后,可以设置一个最大连接数,超过连接就过滤,或者双击右边的连接列表过滤。双击左边的已屏蔽列表即可解除过滤。过滤是用的shell命令来增加ipces规则实现的。
获取TCP连接函数是用的iphlpapi.dll提供的getTcpTable:
Private Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long
使用方法:
定议两个结构
Private Type MIB_TCPROW ' TCP连接表中一行的结构
    dwState As Long ' 状态
    dwLocalAddr As Long ' Local IP
    dwLocalPort As Long ' Local port
    dwRemoteAddr As Long ' Remote IP
    dwRemotePort As Long ' Remote port
End Type
Private Type MIB_TCPTABLE
    dwNum_Of_Entries As Long ' 当前 TCP连接的总数
    TCP_Table(3200) As MIB_TCPROW ' 预留IP行的缓冲区
End Type
然后 Dim TCP As MIB_TCPTABLEDIM Result AS Long
使用时 Result=GetTcpTable(TCP,len(TCP),1)
然后用tcp.tcp_table(标号).dwRemoteAddr来得到IP。其它依次类推。不过IP和端口都要转换一下才能用。
IP转换要用到一个CopyMemory 函数原型:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef pDest As Any, ByRef pSource As Any, ByVal Length As Long)
转换方法:
Dim Ip_Buf(1 To 4) As Byte
CopyMemory Ip_Buf(1), TCP.TCP_Table(i).dwRemoteAddr, 4
RemoteIP = CStr(Ip_Buf(1)) + "." + CStr(Ip_Buf(2)) + "." + CStr(Ip_Buf(3)) + "." + CStr(Ip_Buf(4))

Port转换方法:  LocalPort = Int(TCP.TCP_Table(i).dwLocalPort / 256 + (TCP.TCP_Table(i).dwLocalPort Mod 256) * 256)
以上就是在获取TCP连接列表要用到的一些函数。下面说一下用shell填加ipces的方法:
主要是下面几个命令(以过滤220.181.38.4为例):
netsh ipsec static add policy name=防CC攻击过滤
netsh ipsec static add filterlist name=denyip
netsh ipsec static add filteraction name=denyact action=block
netsh ipsec static add filter filterlist=denyip srcaddr=220.181.38.4 dstaddr=Me dstport=80 protocol=TCP
netsh ipsec static add rule name=实现过滤 policy=防CC攻击过滤 filterlist=denyip filteraction=denyact
netsh ipsec static set policy name=防CC攻击过滤 assign=y

这上面几条语句很好理解,要删除的话直接将add改为delete就行了。比如要添加一个IP过滤直接再运行一下
netsh ipsec static add filter filterlist=denyip srcaddr=220.181.38.5 dstaddr=Me dstport=80 protocol=TCP
就行了。其实除了上面这条填加IP的语句外其它都只需要运行一次,要熟悉的话就在CMD下多试试吧。不过提醒XP用户,这在XP下是运行不了的。在2003系统下测试正常。

===========================
不过这个程序有一个大问题,我没找到好的办法解决,谁要是知道办法请告诉我一下~~
就是在:
Private Type MIB_TCPROW ' TCP连接表中一行的结构
    dwState As Long ' 状态
    dwLocalAddr As Long ' Local IP
    dwLocalPort As Long ' Local port
    dwRemoteAddr As Long ' Remote IP
    dwRemotePort As Long ' Remote port
End Type
Private Type MIB_TCPTABLE
    dwNum_Of_Entries As Long
' 当前 TCP连接的总数
    TCP_Table(3200) As MIB_TCPROW ' 预留IP行的缓冲区
End Type
定议TYPE的时候因为最大只能为64K,所以IP行只能3200多,所以只要IP连接超过3200行的话就读不出TCP连接列表了。虽然说能快速的屏敝IP。不过释放链接有一个时间。所以当有攻击时很容易就超过3200,我用SetTcpEntry来试着手动断开连接但是还是不行。连接还是会连上,过一段时间才会释放。所以现在是想找个方法将这个上线值提上去,要弄到10000以上才有实际的应用价值!
执门文章
  齐宁:搜索引擎-网页查重技术
  VB编写防CC攻击工具
  DDoS拒绝服务攻击和安全防范
推荐文章
  DDoS拒绝服务攻击和安全防范
  VB编写防CC攻击工具
  齐宁:搜索引擎-网页查重技术
关于本站 | 加入本站 | 联系我们 | 帮助文档 | 待审网站 | 广告服务
Powered by 安逸吧1.2.2 © 2005-2007 ANYIBA.COM   渝ICP备07500232号 公安局备案编号:50038201500006