关于winsock多客户程序容易被DDOS攻击的讨论(类似问题很少见,值得讨论,高手请进,基本可以加精!~~)
首先,大家都知道VB用Winsock控件做多客户程序的方法如下(目前我见过的只有这种,见识短浅,见笑了):
Private Sub Form_Load()
Sock(0).LocalPort = 2000 '设置本机监听端口
Sock(0).Listen '将本端口设置为监听状态
End Sub
Private Sub Sock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
SockIndex = GetSockIndex() '获得空闲的Winsock索引号,略...
Load Sock(SockIndex)
Sock(SockIndex).LocalPort = 0
Sock(SockIndex).Accept requestID
End If
End Sub
其次,应该很多人都知道DDOS攻击的原理,比如:发送SYN洪水包攻击,如果是用上面的方法做多客户程序,那就惨了。
一般来说,发送SYN洪水攻击每秒钟少少也有几万个SYN包,即每个SYN包相当于向服务器提交一次连接申请,那么每一个包都会触发下面事件:
Private Sub Sock_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
SockIndex = GetSockIndex() '获得空闲的Winsock索引号,略...
Load Sock(SockIndex)
Sock(SockIndex).LocalPort = 0
Sock(SockIndex).Accept requestID
End If
End Sub
试想想,每秒钟几万或者几十万次连接申请(即是SYN包),程序就每秒钟载入几万或者几十万个Sock(SockIndex),并且处于半连接等状态,太可怕了,黑客用单机就炸掉一台服务器了,还没发动僵尸大军呢。。。
各位高手有什么的解决办法呢?请多多指教啊!!!!!
(本人菜鸟分太少,问题又多多,暂时不给太多分了,留点分以后解决问题用,呵呵~~此帖作为讨论贴!)