循环处理哈希类型列表的Bash脚本卡在首次迭代问题求助
解决hashcat脚本只执行第一个哈希类型的问题
我之前也碰到过一模一样的情况!问题的根源在于hashcat默认会读取标准输入(stdin),而你的while read循环正好是从stdin读取hashlist.txt的内容。当第一个哈希类型的hashcat任务启动后,它会把hashlist.txt里剩下的所有行都当作自己的输入吃掉,导致循环直接终止,不会继续处理后面的哈希类型。
两种可行的解决方案
方案1:使用hashcat的--stdin-disable参数(推荐)
hashcat提供了专门的参数来禁用从stdin读取数据,这样就不会干扰循环的read操作了。修改后的脚本如下:
#!/bin/bash listhsh="hashlist.txt" while read file; do echo "正在测试哈希类型:$file" hashcat -a 0 -m "$file" -O --stdin-disable ~/devoir_PIII_Alice.txt /usr/lib/rockyou.txt done < "$listhsh"
方案2:重定向hashcat的输入到/dev/null
如果你的hashcat版本比较旧,没有--stdin-disable这个参数,可以把hashcat的输入重定向到/dev/null,让它不会读取循环的stdin:
#!/bin/bash listhsh="hashlist.txt" while read file; do echo "正在测试哈希类型:$file" hashcat -a 0 -m "$file" -O ~/devoir_PIII_Alice.txt /usr/lib/rockyou.txt < /dev/null done < "$listhsh"
额外小提示
- 给变量加上双引号(比如
"$file"、"$listhsh"),可以避免如果文件名/路径包含空格时出现错误; - 增加
echo的提示信息,能清楚看到当前正在测试哪个哈希类型,方便排查问题。
内容的提问来源于stack exchange,提问作者frepie
相关产品推荐
相关产品推荐

