前言:

最近在学Python,所以就想写点Python学习的文章,目的是为了让大家可以学习点东西的同时也让自己对这些模块的理解更加深一点。

处理流程

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
'''
Program:网站后台扫描工具
Function:通过字典扫描网站后台

Time:2017/10/13
Author:Walks
个人博客:http://www.bywalks.com
'''

import urllib.request
import time
import threading

#与用户交互,也可用命令行
url = input("输入你要扫描到的网址:")
txt = input("输入字典(php.txt):")

#保存存在的后台地址
open_url = []
all_url = []

#建立线程列表
threads = []

#从字典中读取每一行与url组合,然后添加到all_url
def search_url(url,txt):
with open(txt,'r') as f:
for each in f:
each = each.replace('\n','')
urllist = url + each
all_url.append(urllist)

#处理URL
def handle_url(urllist):
print("查找:"+urllist+'\n') try:
req = urllib.request.urlopen(urllist)
#判断返回码
if req.getcode()==200:
open_url.append(urllist)
if req.getcode()==301:
open_url.append(urllist)
except:
pass

#主函数
def main():
search_url(url,txt)
#多线程处理
for each in all_url:
t = threading.Thread(target = handle_url,args=(each,))
threads.append(t)
t.start()
#线程等待
for t in threads:
t.join()
#扫描成功和不成功的回显
if open_url:
print("扫描成功,网站存在的后台地址为:")
for each in open_url:
print("[+]"+each)
else:
print("没有扫描到网站后台(可能是字典不够给力)")

if __name__=="__main__":
#判断程序运行时间
start = time.clock()
main()
end = time.clock()
print("The function spend time is %.3f seconds" %(end-start))

逐行解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#导入各种库,urllib.request是用来打开和阅读urls,等同于Python2.x的urllib2
#用来时间延时,time.sleep(1),就是延时一秒
#threading用来实现多线程
import urllib.request
import time
import threading

#与用户交互,也可用命令行argparse
url = input("输入你要扫描到的网址:")
txt = input("输入字典(php.txt):")

#保存存在的后台地址
open_url = []
all_url = []

#建立线程列表
threads = []

#从字典中读取每一行与url组合,然后添加到all_url
def search_url(url,txt):
with open(txt,'r') as f:
for each in f:
each = each.replace('\n','')
urllist = url + each
all_url.append(urllist)

#处理URL
def handle_url(urllist):
print("查找:"+urllist+'\n')
#try,防出错
try:
#利用urlopen打开url
req = urllib.request.urlopen(urllist)
#判断返回码,如果为200或者301,则该网页存在,把该url加入到open_url
if req.getcode()==200:
open_url.append(urllist)
if req.getcode()==301:
open_url.append(urllist)
except:
pass

#主函数
def main():
search_url(url,txt)
#多线程
for each in all_url:
#建立线程对象
t = threading.Thread(target = handle_url,args=(each,))
#把线程对象加入到线程列表中
threads.append(t)
#线程开始
t.start()
#线程等待(给每一个线程)
for t in threads:
t.join()
#扫描成功和不成功的回显
if open_url:
print("扫描成功,网站存在的后台地址为:")
for each in open_url:
print("[+]"+each)
else:
print("没有扫描到网站后台(可能是字典不够给力)")

if __name__=="__main__":
#判断程序运行时间
#start为程序还没开始的时间,end为程序运行结束的时间
start = time.clock()
main()
end = time.clock()
print("The function spend time is %.3f seconds" %(end-start))

最后附一张加了多线程和没加的时间区别

可以看到,花费的时间是不同的,这是在扫描基数很少的情况下,我测试的时候只用了3个url,如果基数大的话,时间差距会更大