|
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_TCPTABLE 和 DIM 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以上才有实际的应用价值!
|