簡(jiǎn)單掃描器的實(shí)現(xiàn)_第1頁
簡(jiǎn)單掃描器的實(shí)現(xiàn)_第2頁
簡(jiǎn)單掃描器的實(shí)現(xiàn)_第3頁
簡(jiǎn)單掃描器的實(shí)現(xiàn)_第4頁
簡(jiǎn)單掃描器的實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

知識(shí)點(diǎn):簡(jiǎn)單端口掃描01Socket基礎(chǔ)03UDP客戶端與服務(wù)端編程04FTP協(xié)議實(shí)現(xiàn)02TCP客戶端與服務(wù)端編程目錄05郵件發(fā)送實(shí)現(xiàn)06郵件接收實(shí)現(xiàn)07簡(jiǎn)單端口掃描08定制天氣發(fā)送簡(jiǎn)單端口掃描71.1掃描器工作流程1.2添加banner探測(cè)功能1.3制作多線程掃描器1.1掃描器工作流程掃描器工作流程掃描器工作流程:獲取用戶輸入的ip地址以及端口范圍。根據(jù)用戶輸入的地址和端口范圍逐個(gè)嘗試連接。連接失敗的pass,連接成功的發(fā)送數(shù)據(jù),嘗試探測(cè)應(yīng)用的banner。將掃描結(jié)果以合適的界面輸出給用戶。檢查代碼工作效果,性能檢測(cè),進(jìn)行優(yōu)化與Debug。根據(jù)上述的工作流程,我們首先編寫程序框架,之后的程序的編寫將逐漸的把框架擴(kuò)充成一個(gè)完整的掃描器。1.2添加banner探測(cè)功能添加banner探測(cè)功能banner在服務(wù)器與客戶端的通訊中主要具有以下兩個(gè)作用。1. 表明端口身份2. 顯示歡迎信息在客戶端與服務(wù)器端建立連接之后,該端口上所運(yùn)行的程序會(huì)根據(jù)協(xié)議或程序設(shè)定發(fā)送banner信息給客戶端,有的程序或協(xié)議需要客戶先發(fā)送請(qǐng)求后才會(huì)發(fā)送banner數(shù)據(jù)過來,如http/https,有的則是在連接建立后,自動(dòng)發(fā)送banner信息過來,如ssh,本章節(jié)所使用的探測(cè)banner的數(shù)據(jù)一律使用http/https的get的請(qǐng)求。1.3制作多線程掃描器制作多線程掃描器python常用的多線程模塊有thread,threading,使用threading來制作多線程掃描器,并一定程度介紹threading的使用方法s=threading.Thread(target=scan,args=(address,port)#初始化線程,target指定線程調(diào)用的函數(shù),args值傳入該函數(shù)的參數(shù)s._set_daemon()#設(shè)置子進(jìn)程為守護(hù)進(jìn)程,無論子進(jìn)程是否運(yùn)行完畢,只要主進(jìn)程運(yùn)行完畢,程序就直接結(jié)束運(yùn)行制作多線程掃描器s.join()#啟動(dòng)子進(jìn)程s.start()#啟動(dòng)該線程,直到子進(jìn)程完畢,主進(jìn)程繼續(xù)lock=threading.RLock()#設(shè)置鎖的類型為RLock線程鎖lock.acquire()#放置線程鎖,如果有其他非本線程的程序已經(jīng)放置了線程鎖,該線程就會(huì)被一直堵塞,直到其他線程的釋放該鎖lock.release()#釋放線程鎖#!/usr/bin/envpython#-*-coding:utf-8-*-importsocket,time,threadingdefscan(address,port,recv_len=1024,banner_len_min=8,banner_len_max=32,banner_repl=('\r\n','\r','\n','\t',',')):#參數(shù)接口target_tcp=socket.socket(socket.AF_INET,socket.SOCK_STREAM)制作多線程掃描器try:target_tcp.connect((address,port))

#嘗試對(duì)地址和端口進(jìn)行連接try:service=socket.getservbyport(port,“tcp”)#連接成功用獲取端口信息except:service=“unknow”#獲取失敗則顯示為unknow制作多線程掃描器else:forreplin(banner_repl):#對(duì)banner進(jìn)行篩選iflen(banner)<banner_len_max:breakelifreplinbanner:new=banner[0:banner.index(repl)]iflen(new)<banner_len_min:#避免banner過濾后太小,導(dǎo)致輸出字符為空等banner=banner.replace(repl,"")#處理不可見字符,避免不可見字符else:banner=new制作多線程掃描器except:

banner=“TimeOut"#如果發(fā)送數(shù)據(jù)后超時(shí)沒有接受到banner,則輸出TimeOutlock.release()#釋放堵塞鎖target_tcp.close()#關(guān)閉該tcp連接print"%s\topen\t%s%s%s\n"%(str(port),service,""*(16-len(service)),banner)except:pass#忽略連接失敗的端口制作多線程掃描器if__name__=="__main__":address=raw_input("PleaseEnterTargetAddrress:")#獲取目標(biāo)地址min_port=input("PleaseEnterMinPort:")max_port=input("PleaseEnterMaxPort:")#獲取端口的地址范圍lock=threading.RLock()#使用threading的RLock線程鎖socket.setdefaulttimeout(5)#socket全局超時(shí)設(shè)置active_now=threading.active_count()print"\nAddress:%s\tPorts:%s-%s\n\nPort\tState\tService\tBanner"%(address,min_port,max_port)#一些掃描的設(shè)置信息,與輸出結(jié)果的表頭制作多線程掃描器forportinrange(min_port,max_port+1):#在端口地址內(nèi)掃描端口scaning=threading.Thread(target=scan,args=(address,port))#初始化線程time.sleep(0.001)#在不使用用threadpool的情況下簡(jiǎn)單的控制控制線程增加速度,避免線程數(shù)過多導(dǎo)致死機(jī)等情況,數(shù)值依據(jù)機(jī)器性能自行調(diào)整scaning._set_daemon()#設(shè)置為守護(hù)進(jìn)程,當(dāng)主進(jìn)程被強(qiáng)制結(jié)束時(shí),連同子進(jìn)程一起結(jié)束scaning.star

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論