如何传递python脚本作为参数?

时间:2019-06-06 05:14:12

标签: python linux shell

我正在开发一个程序,我需要用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))

关于如何将这些结果作为参数传递给程序的任何想法?

2 个答案:

答案 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填充到00001填充到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')