总共600分-完成端口 的高手来讨论,如何对付只连接不传输数据的[拒绝服务]攻击? (200分)

  • 主题发起人 主题发起人 delphiroad
  • 开始时间 开始时间
不错不错!每次连接都记录IP,不过记录的Ip放到数据库里吗?这样频繁读写数据库会不会
太慢了阿!我看会,所以看到某某大型邮件系统在用内存数据库,真是羡慕,希望有内存数
据库方面的资料,这样或许可以解决这样的问题。
有无高手有内存数据库方面的资料?
 
用ADO也可以
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
close;
sql.Clear ;
sql.Text :=' select * into #mytemp from sales';
execsql;
close;
sql.Clear ;
sql.Text :=' select * from #mytemp ';
open;
end;
end;
运行进程->按BUTTON1->退出->再运行进程->按BUTTON1->退出 ......
 
WoDing:那可能我记错了,也可能是以前用sql7是这样的!呵呵!你怎么贴到我这里来了!!
 
不会吧,玩IOCP最基本就是玩内存控制了,一个字节都计算的不能有错啊。

记录IP和其它内容,最简单的就是自定义一个格式文件,进程启动读入内存,退出后写入文件,还写数据库,晕。
 
ok!明白你的意思,还是要继续讨论哦!我花了600分,同时这个问题已考虑了7天(当然这
7天来其他问题还是在陆续解决中,工期不敢耽误阿!)不能就此收手阿!
 
贴在那里我怕你看不到,你的这个问题我答不了,呵呵,只能帮你顶!
 
谢谢WoDing,
QQ在线:现在想起你这句话可真有意思:玩IOCP最基本就是玩内存控制了!
真是阿!指针来指针去的!内存用了收回,再用!呵呵!
 
内存数据库的用TClientDataSet,它就是利用内存建立表格了~~
 
TClientDataSet!!!那不就是BDE!!!对不起,我说的是在C++下实现的完成端口
 
呵呵~~~我见你前面说什么内存数据库的~~~而且那个不是BDE,是应用于三层数据的~~
 
这个问题有答案吗?
 
为什么要用内存数据库, 同时连接数最多也就在K的数量级, 用Hash表搞定好了,
 
记录IP有用吗? 如果攻击者用原始套接字,他可以用虚伪的源IP
 
同一个IP来的, 用TCP连接, 量也大不到造成瘫痪,
可怕的是用原始套接字发的伪源IP的连接请求,有
分布式拒绝服务的效果。
 
jackchin:
我担心的也是这个问题,我正是利用了一种类似于Hash表的技术来快速的查找出一个Ip地址
同时登陆的次数的,那是不是说就没有办法了呢?
是否应该用防火墙了?不过我实在想不明白应如何在很短的时间内区分合法的连接和非法
的连接!有一些防火墙是可以预防DDoS的,我不知道原理是什么?
 
张无忌:
刚才发表注释时发现你订阅了这个主题,能发表一下高见吗?
 
把 WSAAccept 改为 Accept
第一是如何设计一个算法很快的查出这个Ip在之前已经建立一个连接了(因为
服务器被设计成可接收数以万计合法连接的,采用完成端口本身就是为了达到大响应)?

把 IP 加入到 TList 中

WSAWaitForMultipleEvents一次只能等待60个socket的事件
这个是和设定的参数值有关

 
我很少搞网络编程,现在说说我的一点想法,希望对你有帮助:
服务器在每一(N)秒都生成一个随机字串,并保存前一字串(用于一(N)秒的识别)
然后对于客户机的第一请求回(用UDP?)送该随机字串,断开连接.
然后客户机在一(N)秒内访问服务器并送该随机字串,若该字串是当前秒字串,或是规定秒内的前一字串,那么建立数据(TCP)连接.
这样是不是会减少一些Dos攻击?
另外:我同意:
>>来自:jackchin, 时间:2004-2-6 15:23:00, ID:2439917
>>同一个IP来的, 用TCP连接, 量也大不到造成瘫痪,
>>可怕的是用原始套接字发的伪源IP的连接请求,有
>>分布式拒绝服务的效果。
如果是恶意,那么看IP也是看不出来的
 
不过,我对完成端口不是很熟,希望对你有帮助.
另,如果真有人想恶意攻击,我想要从网络底层来解决,用应用软件估计难以完全解决问题...
对于记录IP搞黑名单,难,特别是别有用心的人,伪造一个IP段来攻击你,你把这些IP都封了,
不是惨了.....
 
连接还是要连接的,你事先又不知道是不是“恶意攻击”,连接后,马上发出一个验证信息,如果没收到就立刻断开,这个时候,客户端上判断还是连接的,它又不发数据,不会“意识”到自己已经被服务器开除了。
另外一个思路:能不能在连接协议上动脑筋,在连接请求数据包中就包含进加密信息,否则拒绝连接,这样做,估计要用最底层的socket编程了。
 
后退
顶部