【问题标题】:Pausing cURL to Clear Output and Resuming暂停 cURL 以清除输出并恢复
【发布时间】:2020-09-05 21:38:48
【问题描述】:

我希望这不是题外话。 这是背景:

我和我的朋友正在尝试解决这个在线难题,您基本上必须输入 16 位数字组合;如果错误,该站点将显示“不正确”,如果正确,则会显示其他一些我们不知道的消息。我们有前八个数字,所以我们认为尝试使用 curl 暴力破解它并保存到输出以进行检查是可行的。

我们是这样实现的:

curl http://www.game.com/checkCombo.php?num1=[0-9]&num2=[0-9]...&num8=[0-9] >> output.txt

如您所见,我们基本上是在运行所有可能的组合并将每个单独的输出附加到“output.txt”文件中。

我们检查我们是否得到了正确的组合的方法是通过搜索“不正确”的数量,因为我们不知道它会说什么;如果当我们打开文件时,我们已经检查了 1000 个组合并且有 1000 个匹配“不正确”,那么我们知道我们还没有找到正确的组合。如果当我们打开文件时,我们已经经历了 2000 次连击,并且只有 1999 次匹配“不正确”,我们知道我们已经击中了正确的连击并且我们只是搜索它。


但是,由于我们要保存 10^8=100,000,000 个单独的输出,因此我们的计算机空间已用完。

我们尝试使用“ctrl+z”暂停 cURL 进程并检查文件以查看我们是否点击了正确的组合。如果没有,我们清除“output.txt”文件,保存它,然后使用“fg %#”恢复 cURL 进程。

问题是当我们恢复 cURL 时,在我们清除文本文件后,文件仍然是空的:cURL 的输出不会再保存到文件中。

我想知道是否有办法暂停 cURL 以检查文件、清除文件并恢复 curl,同时继续保存剩余的输出。

如果您对我们如何进行组合有其他想法,我也很高兴听到这些想法。谢谢。

【问题讨论】:

  • 当您使用 8 个嵌套循环测试 curl 时,您可以在其中一个子循环之后进行检查。但是,为什么不在每个组合之后检查(grep -q incorrect || break)?

标签: bash macos curl


【解决方案1】:

一个简化的案例将展示不同的入门内容。在没有curl 的情况下开始测试,直到找到可行的解决方案。
我写了一个函数checkcombo,需要3个参数并且有一个隐藏的解决方案:

checkcombo () {
    digit=$1$2$3
    if [[ $digit = 412 ]]; then
       echo "How did you find me?"
    else
       echo incorrect
    fi
}

试试这个功能

checkcombo 4 1 0
checkcombo 4 1 1
checkcombo 4 1 2

很好,现在我们需要暴力破解。也许最好的解决方案是一个循环直到 999 并将每个数字分成 3 位数字,但我想展示嵌套循环。

for i in {0..9}; do
   for i2 in {0..9}; do
      for i3 in {0..9}; do
         checkcombo $i $i2 $i3 | grep -q "incorrect" || { echo The answer is $i $i2 $i3 && break 3; }
      done
   done
done

带有 checkcombo 的行可能难以阅读。这是一种简短的说法

if [ $(checkcombo $i $i2 $i3 | grep "incorrect" | wc -l) -eq 0 ]; then
   echo "The answer is $i $i2 $i3"
   # and stop testing with break 3
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2018-11-23
    • 2014-05-03
    • 1970-01-01
    • 2021-06-12
    相关资源
    最近更新 更多