You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学习计算机安全:用ftplib复现FTP暴力破解遇登录错误

搞定FTP暴力破解脚本的登录错误

Hey,我之前在复现Metasploitable的FTP爆破时也踩过类似的坑!这种“别人能用我不行”的问题,基本都是环境细节或者小疏忽导致的,咱们一步步排查:

1. 先验证基础连通性,排除网络问题

别直接跑爆破脚本,先写个10行以内的测试脚本,确认你的主机能连上Metasploitable的FTP服务:

from ftplib import FTP
target_ip = "你的Metasploitable虚拟机IP"
try:
    ftp = FTP(target_ip)
    print(f"✅ 成功连接到 {target_ip} 的FTP服务")
    ftp.quit()
except Exception as e:
    print(f"❌ 连接失败: {str(e)}")

如果这个测试脚本都失败,那问题根本不在爆破逻辑上:

  • 检查虚拟机网络:确保你的主机和Metasploitable在同一个网段(比如桥接模式下ping一下虚拟机IP,能通才行)
  • 确认FTP服务状态:在Metasploitable里执行service vsftpd status,看服务是不是正常运行;或者用nmap 虚拟机IP -p 21扫一下,确认21端口是开放的

2. 检查字典文件的路径是否正确

你的脚本里users_file和passwords_file是不是用了相对路径?比如你把字典和脚本放在同一个文件夹,但CMD的工作目录却不是这个文件夹,导致脚本读不到字典,自然会在brute()调用时出错,或者登录时用了空的用户名/密码。

  • 解决办法:要么把字典路径改成绝对路径(比如Windows下写C:\\wordlists\\users.txt,注意双反斜杠),要么在CMD里先cd到脚本所在的文件夹,再运行脚本。

3. 给登录代码加异常捕获,看具体错误信息

你说错误出在ans = conect.login(user,...)这行,那大概率是登录时抛出了异常,但脚本没捕获具体信息。给这部分加个try-except,打印出到底是啥错:

try:
    ans = conect.login(user, password)
    print(f"🎉 登录成功!用户名: {user}, 密码: {password}")
    # 成功后记得退出连接
    conect.quit()
    break
except Exception as e:
    print(f"❌ 尝试 {user}/{password} 失败: {str(e)}")

这样你就能看到是“用户名不存在”“密码错误”“连接被拒绝”还是“超时”,直接定位问题根源,比只看脚本的模糊报错有用多了。
另外,顺便检查下变量名拼写:比如conect是不是应该是ftp?我之前就因为手滑拼错变量名卡了半小时😂

4. 对齐Python环境和依赖

别人的Python版本和你的是不是一致?比如你用Python3.11,别人用Python3.8?虽然ftplib是标准库,但不同版本可能有细微的行为差异。

  • 运行python --version看看你的版本,和别人的对比下。如果版本差太多,要么升级/降级你的Python,要么让别人用你的版本跑一遍脚本试试。

5. 排查主机安全软件的干扰

有时候Windows防火墙或者杀毒软件会把爆破脚本当成恶意程序,拦截它的出站连接。

  • 临时关闭防火墙和杀毒软件,再跑脚本试试。如果能成功,就把脚本所在的文件夹加入安全软件的白名单,避免后续被拦截。

内容的提问来源于stack exchange,提问作者Jhonatan Zu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:02:58