首页 > 编程 > Python > 正文

python3 批量获取对应端口服务的实例

2019-11-25 12:14:23
字体:
来源:转载
供稿:网友

思路懒得写了.

依赖python-nmap,先在电脑上装nmap,不然用不了.openpyxl实际上没有用到,可以不安装.

makeEx()没用到,懒得删了.

#依赖python-nmap,openpyxl包import nmapimport timeimport openpyxlfrom multiprocessing.dummy import Pool as ThreadPoolimport multiprocessing# 1.同目录下创建一个input.txt,放入ip地址列(从xlsx中直接粘贴即可)# 2.输出表格位置,需要先创建这个表格expath=''inputFile='remain.txt'#扫描端口#port='1521,1158,2100,3306,1433,1434,5000,5432,27017,6379,11211,80,8080,443,8000,8081,7001,9080,9090,22,23,10027,3389,5631,111,6000,135,445,139,21,25,110,69,161,162,53,5901,5902,2601-2609 '# port='1-65535'#默认命令arg='-Pn -T4 -sV'#输出文件名import timetime_rq = time.strftime('%Y-%m-%d', time.localtime(time.time()))outPutFile = time_rq + inputFiledef readfile(path,lock):  # 返回url列表  file = open(path, 'r',encoding='utf-8')  urlList=[]  portList=[]  for eachline in file.readlines():    #获得地址段    x=eachline.split()    url=x[0]    port=x[1]    # add=IPy.IP(url)#地址段列表    # for u in add:    #   ip=u.__str__();    #   urlList.append(ip)    urlList.append(url)    portList.append(port)  file.close()  # 造infoList  infoList=[]  for index,url in enumerate(urlList):    info={'hostname':url,'port':portList[index],'arg':arg,'lock':lock}    infoList.append(info)  return infoListdef scan(info):  hostName=info['hostname']  port=info['port']  lock=info['lock']  print(hostName+' '+port+' 扫描开始')  scanner=nmap.PortScanner()  scanner.scan(hosts=hostName,ports=port,arguments=arg)  # print(res)  out=open(outPutFile,'a+',encoding='utf-8')  # out.write()  state=scanner[hostName].state()  tcp_ports=scanner[hostName].all_tcp()  print(hostName+' '+state)  for ports in tcp_ports:    if scanner[hostName]['tcp'][ports]['state'] =='open' :      st=hostName+' '+str(ports)+' '+scanner[hostName]['tcp'][ports]['name']+'/n'      # lock.acquire()      out.write(st)      print(st)          # lock.release()  # print(hostName)  out.close()def makeEx():  print('----------------开始写入-------------------')  wb=openpyxl.load_workbook(expath)  sheet=wb.active  c=open(outPutFile,'r',encoding='utf-8')  i=1  for line in c.readlines():    linelist=line.split()    ip=linelist[0]    port=linelist[1]    name=linelist[2]    status=linelist[3]    for j in range(4):      if j==3:        n=linelist[j]        n=n.rsplit()        n=n[0]        sheet.cell(row=i, column=j + 1, value=n)      else:        sheet.cell(row=i,column=j+1,value=linelist[j])    i=i+1  c.close()  wb.save(expath)  print('----------------写入完成-------------------')if __name__ == '__main__':  print('----------------扫描开始-------------------')  lock=multiprocessing.Manager().Lock()  start=time.time()  pool = ThreadPool(30)  infolist=readfile(inputFile,lock)  pool.map(scan,infolist)  pool.close()  pool.join()  finish=time.time()  print('----------------扫描完成-------------------')  t=finish-start  print('用时 %f'%t)  out = open(outPutFile, 'a+', encoding='utf-8')  out.write('/n用时 %f'%t)  # makeEx()  # info={'hostname':'135.233.115.55','port':'22,23,21,80,3389,5901,5902','arg':'-Pn -sV -T4'}

以上这篇python3 批量获取对应端口服务的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表