Apache http请求返回408
(2015-07-26 17:21:46)
标签:
pythonapache408 |
分类: 吃饭的家伙 |
需求:
用Apache针对http请求,返回408状态。
环境:
Win7
【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