关于winsock多客户程序容易被DDOS攻击的讨论(类似问题很少见,值得讨论,高手请进,基本可以加精!~~)

BaoBrother 2009-07-27 08:10:49
首先,大家都知道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),并且处于半连接等状态,太可怕了,黑客用单机就炸掉一台服务器了,还没发动僵尸大军呢。。。

各位高手有什么的解决办法呢?请多多指教啊!!!!!


(本人菜鸟分太少,问题又多多,暂时不给太多分了,留点分以后解决问题用,呵呵~~此帖作为讨论贴!)

...全文
112 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2009-07-30
  • 打赏
  • 举报
回复
啊哈.

确实这方面的问题没有想过.

纯顶了......
BaoBrother 2009-07-29
  • 打赏
  • 举报
回复
面对DDOS确实没太多办法,结贴,确定实行B计划!
lyserver 2009-07-28
  • 打赏
  • 举报
回复
这儿倒有一个防DDOS的VC源码,我没仔细看,楼主看一下中不中:http://www.pudn.com/downloads87/sourcecode/windows/network/detail334028.html
BaoBrother 2009-07-28
  • 打赏
  • 举报
回复
虽然有软/硬防火墙,加上软/硬防火墙并不一定能防住,所以,自己的程序总不能被动式的开着漏洞由软/硬防火墙来掌握命运吧,能分析到是否正常的连接起码不至于载入N多个无用又占资源多的Sock数组控件。
lyserver 2009-07-28
  • 打赏
  • 举报
回复
socket避免不了,可以配置防火墙来实现。
BaoBrother 2009-07-28
  • 打赏
  • 举报
回复
如果要处理,怎么在这ConnectionRequest过程里获得客户端的IP地地、数据包内容等信息呢?以便分析是不是正常的连接申请,是留下,否弃掉。
神马都能聊 2009-07-28
  • 打赏
  • 举报
回复
如果非要处理,就在监听连接时,对IP地址做计数处理吧。

另外,当服务器接收到爆发性的请求那一刻,就已经被攻击了。所以此类问题大多不是在服务器端处理的,而是采用软/硬防火墙。
BaoBrother 2009-07-28
  • 打赏
  • 举报
回复
?
BaoBrother 2009-07-28
  • 打赏
  • 举报
回复
m60a1,你的回复确实近题,可以说是非常正确,看得出很有网络开发经验(而且是妹妹,真是不多见啊!~~)

目前我也知道这个情况,如果时间允许的话,我会好好去学习网络基本结构(而不是复习),目前一起在网上搜索很多关于抓包,关于TCP协议原理,深入了解TCP三次握手中的各个包的结构,特别是第一个连接申请包SYN包!

但是,问题在于VB很少实现抓包的程序,本人没见过,不知大家有没有方法实现抓包,这样可以对SYN包的分析。
m60a1 2009-07-28
  • 打赏
  • 举报
回复
LZ,需要认真复习一下,网络基本结构,

你现在指出的winsock控件,只是应用层,如果像你所说的,那么不是在应用层实现的,

最少最少,你至少先捕捉网卡封包,分析后,再决定是否放给应用层的应用程序处理!

一般直接在硬件上面做出反应,是最佳的解决方案(至少目前是这样)
dingyanwei 2009-07-28
  • 打赏
  • 举报
回复
lz是不是在考虑特殊情况,有人会利用此来发动洪水,而你的程序却无法判断吧。
dingyanwei 2009-07-28
  • 打赏
  • 举报
回复
正常情况下你的服务器能挺住每秒几十万的访问?

我的意思是连接失败会再次连接以及连接后为了验证连接没有断开而发送的数据包会被认为是洪水,如果降低连接和验证次数自然就会少很多所谓的攻击了。
BaoBrother 2009-07-28
  • 打赏
  • 举报
回复
楼上的朋友,你的解决方案设想应该行不通(用服务器数据库记录连接时间和次数),要知道攻击是连续不断的攻击,而且是每秒中几十万上下,怎么记呢,对方发过来的连接数据包是经过伪造成为跟正常连接包一样的(只是对方的IP改为假的而已),服务器根本很难识别,就相当于每秒钟有几十万个正常客户访问,如果能分析过滤掉恶意连接的数据包不作处理的话,服务器还是勉强应付得过去,对方攻击看不到明显效果后估计也会有退意,问题也就解决啦!~~
dingyanwei 2009-07-28
  • 打赏
  • 举报
回复
没办法,我的程序就会被卡巴当做洪水给拦截掉,导致连接失败,因为本人系统均在局域网中运行,因此暂停掉卡巴的防黑监控就行了,如果用在互联网我考虑的解决方案(还没实施)是用服务器数据库记录连接时间和次数然后根据这个来判断下一次发起连接的时间。
嗷嗷叫的老马 2009-07-28
  • 打赏
  • 举报
回复
关注.

这个问题不知道是不是应该考虑.
BaoBrother 2009-07-28
  • 打赏
  • 举报
回复
下载不了哦!
BaoBrother 2009-07-28
  • 打赏
  • 举报
回复
看看,先谢了,华仔!~~

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧