我正在开发一个程序,我需要用4针号强行破解以获取标志。这是针对某些网络安全挑战的。我能够创建一个python脚本,该脚本将打印4位数字的每个组合。但是,我不知道如何将其作为需要蛮力执行的程序的参数传递。
我正在使用Kali linux运行程序并创建脚本。
#!/usr/bin/python
from itertools import product
numbers = '0123456789' # chars to look for
for length in range(1, 3): # only do lengths of 1 + 2
to_attempt = product(chars, repeat=4)
for attempt in to_attempt:
print(''.join(attempt))
关于如何将这些结果作为参数传递给程序的任何想法?
答案 0 :(得分:1)
您不是要尝试将python脚本作为参数传递,而是要将脚本的输出转换为另一个程序的参数。
有几种方法可以做到这一点。可能最有效的方法是仅从Python脚本调用程序,而不是输出输出。
但是,如果要迭代某个程序输出的行,则可以按以下步骤进行操作:
python script.py | while read -r; do
./program "$REPLY" # or do whatever you want with "$REPLY"
done
如果您在循环中所做的全部工作是运行一个程序,则也可以使用xargs
来代替将行作为参数传递:
python script.py | xargs -n1 ./program
您可能根本不需要您的Python脚本。例如,如果您只想列出所有四位数的数字,则可以
seq -w 0 9999
(-w
选项将0
填充到0000
,1
填充到0001
等)
与xargs
相结合
seq -w 0 9999 | xargs -n1 ./program
或者您可以在shell中编写整个循环:
for ((i=0; i<=9999; i++)); do
# using printf to pad the number to 4 places
./program "$(printf '%04d' $i)"
done
答案 1 :(得分:-1)
您可以将上面的代码设置为一个函数,然后将其导入到您正在运行的任何程序中。
def组合(数字='0123456789'):
for length in range(1, 3): # only do lengths of 1 + 2
to_attempt = product(chars, repeat=4)
for attempt in to_attempt:
print(''.join(attempt))
然后,您可以在导入文件后在另一个程序中调用该文件:name_of_file.combinations(numbers ='0123456789')