#coding=utf-8
__author__ = 'unkonwn'
import argparse
from comm.printers import printPink,printRed,printGreen
from comm.config import *
from comm.portscan import *
from factorys.pluginFactory import *


#实例化config类
c=config()

if __name__ == '__main__':
    #接受cmd参数
    parser = argparse.ArgumentParser(description='ports&*weak password scanner. teams:xdsec.  author: wilson ')
    parser.add_argument('--ip',action="store",required=False,dest="ip",type=str,help='ip like 192.168.1.0/24 or 192.168.0.0/16')
    parser.add_argument("--threads",action="store",required=False,dest="threads",type=int,default=50,help='Maximum threads, default 50')
    parser.add_argument("--P",action="store",required=False,dest="isping",type=str,default='yes',help='--P not mean no ping frist,default yes')
    parser.add_argument("--p",action="store",required=False,dest="user_ports",type=str,default='',help='--p scan ports;like 21,80,445 or 22-1000')
    parser.add_argument("--file",action="store",required=False,dest="file",type=str,help='get ips or domains for this file')

    args = parser.parse_args()
    ip = args.ip
    filename=args.file


    #获取ip列表
    if ip:
        ips=c.getips(ip)
        file="result/%s.txt" %args.ip.replace("/","")
    elif filename:
        ips=c.file2list(filename)
        filename=filename.split("/")[-1]
        file="result/%s.txt" %filename
    else:
        print "error args";exit()

    isping=args.isping
    user_posts=args.user_ports
    threads=args.threads

    p=portscan(c,user_posts)
    p.run(isping,threads,ips,file)

    #print p.ipdict,p.pinglist
    plugins=pluginFactory(c)
    for pluginname in plugins.pluginList:
        #print pluginname
        if pluginname:
            pluginname.run(p.ipdict,p.pinglist,threads,file)



