python自动运行程序点击输入_自动输入bruteforce一个用Python在cli中运行的程序

我目前正在努力完成所有关卡上的窃贼'战争游戏'。在

其中一个级别(级别24)要求我连接到一个端口,该端口上正在运行守护程序。此守护程序要求输入密码和4位pin。密码已知(在上一级末尾提供),pin未知。有迹象表明,有必要对其进行“暴力”处理。在

输入错误的pin会导致以下消息:“错误!请输入正确的密码。再试一次。”。在

我决定编写一个python脚本来自动执行这个过程。脚本将:

1) 通过netcat连接到端口

2) 输入密码和随机生成的pin

3) 读取输出,如果其中有单词“again”(再次),则通过循环重复,直到猜到pin。在

但是,尽管我的脚本运行并连接,但是一旦与它的端口建立了连接,它就无法与守护进程通信。在

我得到的只是守护进程的提示,请求密码和pin。在

这是我的代码:import subprocess

import random

# Initialise variables

pin = ''

output = "Wrong! Please enter the correct pincode. Try again."

# Connect to the port

def connect_to_port():

subprocess.call(["nc localhost 30002"], shell=True)

# Generate pin

# TO DO: skip pins that were proven incorrect

def generate_pin():

pin = ''

pin_len = 0

while pin_len < 4:

pin += str(random.randint(0, 9))

pin_len += 1

return pin

# Connect to port

# Loop: check if 'again' is in 'output',

# if it is, generate a pin and input password and pin

def main():

connect_to_port()

while 'again' in output:

pin = generate_pin()

out = subprocess.check_output(["UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ", pin])

output = out.decode("utf-8")

main()

我怀疑我没有正确地使用subprocess模块,但我真的不明白如何使用。为什么我的剧本不起作用?在

请原谅我对相关术语的初步使用。在

编辑:我发现subprocess.check_out()的用法是完全错误的。正如答案和注释中所建议的,我需要的是打开一个管道并使用communicate()来写入子进程的stdin(每次修改pin)并读取它的stdout,但我不知道该怎么做。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值