多條告白如次劇本只需引入一次
運用python模塊nmap,讀取excel數(shù)據(jù)對多個ip端口探活掃描
我一個響指下來,每部分都要少一個外腎。。。
1、工欲善其事必先利其器。安置python-nmap模塊。
piplist#cmd或powershell下察看已安置模塊,至于pip吩咐情況變量,本人處置pipinstallpython-nmap
編寫大略的nmap單端口跑一下看看功效。'''即使安置了python-nmap模塊還不許運用,那就自行安置nmap圖形化界面,而后增添到情況變量里,如許就ok了,我的即是如許;'''importnmapnp=nmap.PortScanner()a=np.scan(hosts='42.247.22.192',ports='80',arguments='-v-n-T4')print(a)歸來截止:(要害的場合我已標(biāo)紅,重要即是看歸來端口狀況和效勞名)
{'nmap':{'command_line':'nmap-oX--p80-v-n-T442.247.22.192','scaninfo':{'tcp':{'method':'syn','services':'80'}},'scanstats':{'timestr':'ThuJun1011:31:572021','elapsed':'1.72','uphosts':'1','downhosts':'0','totalhosts':'1'}},'scan':{'42.247.22.192':{'hostnames':[{'name':'','type':''}],'addresses':{'ipv4':'42.247.22.192'},'vendor':{},'status':{'state':'up','reason':'syn-ack'},'tcp':{80:{'state':'open','reason':'syn-ack','name':'http','product':'','version':'','extrainfo':'','conf':'3','cpe':''}}}}}2、下面臨獲得的數(shù)據(jù)整治一下輸入,讓他看上去簡略少許importnmapnp=nmap.PortScanner()a=np.scan(hosts='42.247.22.192',ports='80',arguments='-v-n-T4')ip='42.247.22.192'foriina['scan'][ip]['tcp'].keys():state=a['scan'][ip]['tcp'][i]['state']name=a['scan'][ip]['tcp'][i]['name']print(ip,i,state,name)歸來截止:42.247.22.19280openhttp看著干凈多了。
反面對于excel讀取和線程的代碼我徑直貼了,即日工作多不細(xì)說了。。
3、運用python挪用excel模塊和線程模塊,讀取excel數(shù)據(jù),對多條數(shù)據(jù)舉行掃描。
importnmapimportthreadingfromopenpyxlimportload_workbookfromxlwtimportWorkbookwk=Workbook(encoding='utf-8')wsheet=wk.add_sheet('Worksheet')co={}ls=[]defread_excel_file():wb=load_workbook('test/diqu.xlsx')#讀取excel文獻(xiàn)#sheets=wb.get_sheet_names()#print(sheets)sheet=wb['暴出面財產(chǎn)全量']#print(sheet)m=sheet['G']#讀取excelG列,我的G列是ip:port,例:1.1.1.1:80forcellinm:#這個for輪回用來分隔ip和端口,存到co字典#print(cell.value)mn=cell.value.split(':')ifmn[0]inco:co[mn[0]].append(mn[1])else:try:co[mn[0]]=[mn[1]]except:co[mn[0]]=[]defthread(ip_port):#樹立線程thread_num=threading.Semaphore(20)#樹立線程數(shù)thread_list=[]forIP,portinip_port.items():#創(chuàng)造線程t=threading.Thread(target=nmap_ping_scan,args=(IP,port,thread_num,))thread_list.append(t)#print(t)fortinthread_list:#發(fā)端線程t.start()fortinthread_list:#等候線程t.join()print('線程中斷')defnmap_ping_scan(ip,port,thread_num):#運用nmap掃描,截止惠存ls列表globallsstrport=','.join(portsforportsinport)thread_num.acquire()#線程鎖try:nm=nmap.PortScanner()globalresultnp=nm.scan(hosts=ip,ports=strport,arguments="-v-n-T4")foriinnp['scan'][ip]['tcp'].keys():state=np['scan'][ip]['tcp'][i]['state']name=np['scan'][ip]['tcp'][i]['name']ls.extend([[ip,i,state,name]])#print(ip,i,state)exceptExceptionase:#print(e)passthread_num.release()defexcel_write(ls):#把ls列表的數(shù)據(jù)生存到新的excel中try:foruinrange(len(ls)):p=0forkinls[u]:wsheet.write(u,p,k)p+=1#print(u,p,k)except:passif__name__=='__main__':#步調(diào)啟用read_excel_file(