python3 批量获取对应端口服务

思路懒得写了.
依赖python-nmap,先在电脑上装nmap,不然用不了.openpyxl实际上没有用到,可以不安装.
makeEx()没用到,懒得删了.

#依赖python-nmap,openpyxl包
import nmap
import time
import openpyxl
from multiprocessing.dummy import Pool as ThreadPool
import 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 time
time_rq = time.strftime('%Y-%m-%d', time.localtime(time.time()))
outPutFile = time_rq + inputFile



def 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 infoList

def 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'}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值