加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Apache http请求返回408

(2015-07-26 17:21:46)
标签:

python

apache

408

分类: 吃饭的家伙

需求:

用Apache针对http请求,返回408状态。

环境:

Win7
       ApacheFriends XAMPP Version 1.8.3
       Apache 2.4.10

【TIPS】

408请求是当http请求超时的时候出现,可被用于web服务器慢链接攻击。这种攻击方式从网上的资料来看,对于apache服务器危害比较大,nginx由于使用了epoll等较新的技术,连接保持做得比较好,所以据说单台服务器能维持数十万级别的http链接。

实现:

1、apache的默认连接时间是比较长的,直接在站点配置文件中增加一条记录,设置超时时间为10秒,这样可以快点返回408,方便观察。修改代码如下:


DocumentRoot “D:/workspace/xampp/htdocs/lixin”
ServerName test.lixin.com
Timeout 10

2、python脚本的基本思路为使用tcp socket来实现http连接,这样情况下,每次http request 会以 ‘\r\n’结尾,表示一个请求行结束,另外在整个请求最终结束的时候,会再发送一次’\r\n’,来表示整个请求完结。这个时候如果发送的请求不加结尾标志,apache会认为request被堵塞在网络上,会保持住这个链接,继续等待后续数据,直到超过timeout时间。正常的python脚本如下:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      sock.connect((‘192.168.30.34′, 80))

send_data = “POST /test.html HTTP/1.1\r\nHost: test.lixin.com\r\n\r\n”

sock.send(send_data)

data = sock.recv(4096)
       print len(data)
       print data

这个时候会返回200状态码,并且打印出正确的html。修改以上代码,将 send_data 改为 ‘POST /test.html HTTP/1.1\r\nHost: test.lixin.com\r\n’,让整个请求不再完结,运行python脚本,结果如下:HTTP/1.1 408 Request Timeout

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有