Esempio n. 1
0
def manage_multiple(n, user, passwd, infile):
    ports = []
    for i in range(n):
        p = random.randint(1024, 65535)
        while p in ports:
            p = random.randint(1024, 65535)
        ports.append(p)
    connections = []
    for i in range(n):
        logfile = 'ftp-client-{}.log'.format(i)
        c = FTPClient(server_ip,
                      ports[i],
                      server_port,
                      interact=False,
                      logfile=logfile)
        c.handshake()
        connections.append(c)

    run_cmd_multiple(connections, n, ['USER ' + user] * n)
    run_cmd_multiple(connections, n, ['PASS ' + passwd] * n)

    cmds = []
    if infile:
        with open(infile, 'r') as f:
            cmds = f.read().split('\n')
        cmd_list = []
        for c in cmds:
            if c.strip():
                cmd_list.append(c.strip().split(','))
        cmd_list = cmd_list[::-1]

    while True:
        if infile:
            if not len(cmd_list):
                c = []
            else:
                c = cmd_list.pop()
        else:
            c = fetch_commands(n)
        # c += '\r\n'

        print c

        if len(c) != n:
            if len(c):
                print "Insufficient commands {} for {} connections".format(
                    ','.join(c), n)
            for i in range(n):
                with open(connections[i].logfile, 'a') as f:
                    f.write('Exiting...\n\n')
                connections[i].close()
            return

        run_cmd_multiple(connections, n, c)
Esempio n. 2
0
    parser.add_argument('-m',
                        '--multiple',
                        help='Open multiple connections to FTP server',
                        nargs=1,
                        type=int)
    parser.add_argument(
        '-c',
        '--command_file',
        help='Run commands from given file for multi connections. \
                        Each line has n(number of multiple connections) comma seperated FTP commands.',
        nargs=1,
        type=str)
    args = parser.parse_args()

    server_ip = args.ipaddr[0]
    server_port = args.port[0]
    client_port = random.randint(1024, 65535)

    if args.multiple:
        print "Multiple mode"
        num = args.multiple[0]
        infile = None
        if args.command_file:
            infile = args.command_file[0]
        manage_multiple(num, args.user[0], args.passwd[0], infile)
    else:
        client = FTPClient(server_ip, client_port, server_port)
        client.handshake()
        client.run_command('USER ' + args.user[0] + '\r\n')
        client.run_command('PASS ' + args.passwd[0] + '\r\n')
        client.interactive()