Python3學習系列(二):編寫屬於自己的網站後台掃描器

前言:

最近在學Python,所以就想寫點Python學習的文章,目的是為了讓大家可以學習點東西的同時也讓自己對這些模塊的理解更加深一點。

目錄:

0x01:處理流程

0x02:代碼實現

0x03:逐行解析

0x01 處理流程

0x02 代碼實現

Program:網站後台掃描工具Function:通過字典掃描網站後台 Time:2017/10/13Author:Walks個人博客:http://www.bywalks.com import urllib.requestimport timeimport threading #與用戶交互,也可用命令行url = input("輸入你要掃描到的網址:")txt = input("輸入字典(php.txt):") #保存存在的後台地址open_url = []all_url = [] #建立線程列表threads = [] #從字典中讀取每一行與url組合,然後添加到all_urldef search_url(url,txt): with open(txt,r) as f: for each in f: each = each.replace(
,) urllist = url + each all_url.append(urllist) #處理URLdef handle_url(urllist): print("查找:"+urllist+
) 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))

0x03:逐行解析

#導入各種庫,urllib.request是用來打開和閱讀urls,等同於Python2.x的urllib2#用來時間延時,time.sleep(1),就是延時一秒#threading用來實現多線程import urllib.requestimport timeimport threading #與用戶交互,也可用命令行argparseurl = input("輸入你要掃描到的網址:")txt = input("輸入字典(php.txt):") #保存存在的後台地址open_url = []all_url = [] #建立線程列表threads = [] #從字典中讀取每一行與url組合,然後添加到all_urldef search_url(url,txt): with open(txt,r) as f: for each in f: each = each.replace(
,) urllist = url + each all_url.append(urllist) #處理URLdef handle_url(urllist): print("查找:"+urllist+
) #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,如果基數大的話,時間差距會更大

個人博客:bywalks.com

推薦閱讀:

一個黑客會經歷怎樣的人生?
McAfee預測2018年網路安全趨勢
安全數據科學是什麼?
淺談Night 未來發展
幾維安全分享2017上半年:2227起安全事件泄露60億條數據

TAG:Python教程 | 網路安全 |