Python 3 FTP 弱口令&匿名服务器扫描器

请用于合法用途,产生任何后果与本人无关.

Log: 2016-7-10 已经上传置github 包含字典

简介:
FTP服务器扫描器
请与Python3以上环境运行
字典自备
请根据本机配置情况调整线程数
By LiT0
转载请注明@LiT0
谢!

#!/usr/bin/env python$
# coding=utf-8

import socket
import ftplib
from concurrent.futures import ThreadPoolExecutor
import os
import argparse


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(args.user,'r') as userfile:
                    with open(args.passwd,'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)
    with ThreadPoolExecutor(ThreadNum) as Executor:
        for ip in iplist:
            try:
                Executor.submit(conn,ip)
            except Exception as e:
                print(e)
                pass

if __name__ == '__main__':
    parse = argparse.ArgumentParser()
    parse.add_argument("user",type=str,help="用户名字典文件路径")
    parse.add_argument("passwd",type=str,help="密码字典路径")
    args = parse.parse_args()
    print("[+]---------Welcome to FTP scanner--------")
    print("[+]----------------By LiT0----------------")
    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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值