tcp连接的问题

fytzzh 2006-06-07 01:09:15
服务器端接受客户端连接请求。accept返回后,创建一个线程处理客户连接请求。
在子线程里使用超时读。
现在有个问题,想请教大家在类似的程序里是怎么实现的。
问题:
如果客户connect成功后,不write数据,服务器就会等待一定时间。然后超时close掉连接。
如果某用户写个攻击程序,一直connect不write数据,服务器accept返回的sock_fd不可能无限制大小。到一定大小限制,accept就返回-1,造成了拒绝服务攻击。但如果服务器使用无阻塞读的话,有可能因为网络问题,而拒绝正常的用户的连接。事实上,就算是无阻塞读,用户攻击依然造成accept返回-1。
大家设计这种程序的时候有什么好的建议啊。怎么避免用户攻击?
...全文
236 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
eqxu 2006-06-10
  • 打赏
  • 举报
回复
forwarding中设置包处理程序来实现一下功能

设置同IP连接数上限
设置最快连接时间上限
增加最大连接数

happia 2006-06-10
  • 打赏
  • 举报
回复
多设几个线程,无阻塞读行不行?
fytzzh 2006-06-10
  • 打赏
  • 举报
回复
fytzzh 2006-06-08
  • 打赏
  • 举报
回复
大家一起讨论啊
wanderfox 2006-06-07
  • 打赏
  • 举报
回复
listen中队列的数量设置大些?
select中超时时间设置短些?
fytzzh 2006-06-07
  • 打赏
  • 举报
回复
accept后
使用fork让子进程处理client端,在子进程中设置select,监听client端的sock_fd的是否读状态,并且设置一个超时,在超时handler中关闭这个socket,行不?
=====================================================================
现在就是这样做的。一样可以被攻击。
wanderfox 2006-06-07
  • 打赏
  • 举报
回复
accept后
使用fork让子进程处理client端,在子进程中设置select,监听client端的sock_fd的是否读状态,并且设置一个超时,在超时handler中关闭这个socket,行不?
fytzzh 2006-06-07
  • 打赏
  • 举报
回复
如果用户使用IP欺骗呢?
积木 2006-06-07
  • 打赏
  • 举报
回复
监视一段时期内某一些IP的连续连接次数,达到次数就封禁IP.然后过一段时间再解开。

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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