命令末尾的“&”如何使脚本如此之快?

学习者X

在在线解决CTF挑战时,遇到了需要暴力破解服务器的情况。这是我写的代码:

#!/bin/bash

for i in {0..9}{0..9}{0..9}{0..9} 
    do
    echo "Now trying code.."
    echo $i
    echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt
    done

这是令人难以置信的,痛苦的缓慢我需要尝试从1000到9999的组合,每10次尝试大约需要5秒钟。然后,按照建议,在此行的末尾添加一个“&”:

   echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt &

并且,它在几秒钟内尝试了数百种组合。我很惊讶。有人可以向我解释逻辑吗?“&”是做什么的?

马里纳斯

添加会&生成一个后台进程。

如果您编写a; b,它将运行command a,等待其完成,然后依次运行command b

如果您编写a & b,它将a作为后台进程生成它不会等待它完成,而是会b立即开始运行它将同时运行。

您可以通过在Shell中进行实验来查看其功能。如果已X安装,xterm则是查看会发生什么情况的好方法:键入

$ xterm

将导致另一个终端窗口打开,第一个将等待直到您关闭它。仅当关闭它时,您才能收回外壳。如果您输入

$ xterm &

然后它将在后台运行它,您将立即获得外壳,而xterm窗口也将保持打开状态。

所以如果你写

echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt

它建立连接,发送字符串,将输出的内容存储在文件中,然后继续前进到下一个。

添加&使它不等待。它最终将或多或少地同时运行全部一万个。

您的脚本似乎“更快地”结束了,因为在那个时候它实际上可能没有完成。它仅完成了一万个后台作业,然后结束了前台作业。

这也意味着,在您的情况下,它将尝试一次或多或少地打开一万个连接。根据另一端可以处理的内容,其中一些可能会失败。不仅如此,而且不能保证它们会按顺序运行,实际上几乎可以肯定它们不会运行,因此最终的结果/tmp/me/dump.txt是任何人的猜测。

您检查输出是否正确?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么 Pandas 的速度如此之快?如何定义这样的函数?

Google 的 Play Store 应用程序如何启动如此之快?

是什么使Python的列表附加方法如此之快?

为什么C ++模板计算如此之快?

为什么MATLAB在矩阵乘法中如此之快?

Android Studio,工具提示消失得如此之快

为什么这个C ++程序如此之快?

是什么使Java编译器如此之快?

WebStorm调试javascript停止并断开的速度如此之快

为什么从内存映射文件读取如此之快?

为什么列表乘法如此之快?

海龟动画在python中如此之快

如何在Apple的“照片”应用中实现UIScrollView / UICollectionView过滤器以使其打开得如此之快?

为什么Dask的执行速度如此之慢,而多处理的执行速度却如此之快?

通过ID和Xpath进行点击的Javascript代码执行得如此之快

是什么让gcc std :: list排序实现如此之快?

为什么三元运算符如此之快?

为什么Spark从S3读取和写入如此之快

为什么在Python 3中“范围(10000000000000001)”如此之快?

当今计算机如此之快,为什么查看PDF文件仍然很慢?

为什么随后用youtube-dl下载的速度如此之快?

为什么USB串行在Linux中如此之快?

agm-circle角4阻力灵敏度如此之快

为什么在Python 3中复数求幂如此之快?

使图像闪烁的最快方法->如此之快以至于您看不到它

为什么此代码在进行优化编译时运行得如此之快?

为什么在摩托罗拉68k中dbra对于这么大的循环计数如此之快?

为什么查询在Entity Framework中花费这么长时间,而在SQL中却如此之快呢?

Celery:任务执行得如此之快,以至于无法检索更新的数据库