Python3 批量扫描端口的例子
用法
本脚本用于批量扫描端口
1.在同目录下创建输入文件,属性inputFile为输入文件名
2.属性th为线程数
3.属性port为探测的目标端口
4.属性arg为默认的命令
不推荐扫描全端口,速度非常慢.脚本中有常见端口,可直接使用
默认命令下端口对应服务可能存在不准确的情况,可加-sV对版本进行详细探测,或对本脚本的输出使用此脚本进行专门的探测
代码
#依赖python-nmap,openpyxl包
importnmap
importopenpyxl
importIPy
frommultiprocessingimportPoolasThreadPool
#同目录下创建一个input.txt,放入ip地址列(从xlsx中直接粘贴即可)
expath=''
inputFile='2001_3000.txt'
th=20
#扫描端口
#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'
#输出文件名
importtime
time_rq=time.strftime('%Y-%m-%d',time.localtime(time.time()))
outPutFile=time_rq+'2001_3000.txt'
defreadfile(path):
#返回url列表
file=open(path,'r',encoding='utf-8')
urlList=[]
foreachlineinfile.readlines():
#获得地址段
url=eachline.rsplit()[0]
#add=IPy.IP(url)#地址段列表
#foruinadd:
#ip=u.__str__();
#urlList.append(ip)
urlList.append(url);
file.close()
#造infoList
infoList=[]
forurlinurlList:
info={'hostname':url,'port':port,'arg':arg}
infoList.append(info)
returninfoList
defscan(info):
hostName=info['hostname']
port=info['port']
print(hostName+'扫描开始')
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)
forportsintcp_ports:
ifscanner[hostName]['tcp'][ports]['state']=='open':
st=hostName+''+str(ports)+''+scanner[hostName]['tcp'][ports]['name']+''+scanner[hostName]['tcp'][ports]['state']+'\n'
out.write(st)
print(st)
#print(hostName)
out.close()
defmakeEx():
print('----------------开始写入-------------------')
wb=openpyxl.load_workbook(expath)
sheet=wb.active
c=open(outPutFile,'r',encoding='utf-8')
i=1
forlineinc.readlines():
linelist=line.split()
ip=linelist[0]
port=linelist[1]
name=linelist[2]
status=linelist[3]
forjinrange(4):
ifj==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('----------------扫描开始-------------------')
start=time.time()
pool=ThreadPool(th)
infolist=readfile(inputFile)
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'}
输入文件示例
61.128.108.94 61.128.111.246 61.128.122.111 222.83.20.18 61.128.108.67 120.70.226.131
输出文件示例
106.124.93.7622sshopen 106.124.93.7623telnetopen 106.124.93.768000http-altopen 106.124.93.8323telnetopen
以上这篇Python3批量扫描端口的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。