Python 试图破解猜测服务器

Python 试图破解猜测服务器,python,Python,我有一个小要求。我在学校有一个助手,我需要通过nc连接到服务器,然后猜出号码才能找到秘密消息。我有这个服务器的源代码,上周我一直试图破解它。如果你能给我指出正确的方向那就太好了 #!/usr/bin/python import socket import os, sys import ast import random def write(msg): sys.stdout.write(msg) sys.stdout.flush() def read(prompt=''): if

我有一个小要求。我在学校有一个助手,我需要通过nc连接到服务器,然后猜出号码才能找到秘密消息。我有这个服务器的源代码,上周我一直试图破解它。如果你能给我指出正确的方向那就太好了

#!/usr/bin/python

import socket
import os, sys
import ast
import random

def write(msg):
  sys.stdout.write(msg)
  sys.stdout.flush()

def read(prompt=''):
  if prompt:
    write(prompt)
  return sys.stdin.readline().strip()

def loop():
  RANGE = 1000000
  num = read('Select a number (0, 10000000000000000000000): ')
  try:
    num = ast.literal_eval(num) + 0
    assert 0 < num < 10000000000000000000000
  except:
    write("Oops! Wrong number!\n\n")
    return
  rand = num + int(random.random()*RANGE)
  guess = read('Guess a number in range: [{:n}, {:n}]: '.format(num, num+RANGE))
  try:
    guess = ast.literal_eval(guess)
  except:
    write("Oops! You probably didn't enter a number!\n\n")
    return
  if guess == rand:
    write('Wow! The secret is [...].\n')
    sys.exit(0)
  write('Better luck next time!\n\n')  

def main():
  write('Hello there in "Guess the number!"\nYou have 30 seconds.\n')
  while True:
    loop()

main()
#/usr/bin/python
导入套接字
导入操作系统,系统
导入ast
随机输入
def写入(msg):
系统标准输出写入(msg)
sys.stdout.flush()
def读取(提示=“”):
如果提示:
写入(提示)
返回sys.stdin.readline().strip()
def loop():
范围=1000000
num=read('选择一个数字(0,100000000000000000000):')
尝试:
num=ast.literal\u eval(num)+0
断言0
关键是
ast.literal\u eval
。它允许输入浮点数。浮点数的精度是在所有地方重复相同的数字。@AnttiHaapala loop()在每次执行中都会创建新的数字。“破解”的意思是你只能以指定的方式使用该程序?有了这个程序,你唯一的机会就是社会工程,或者只是多次尝试和纯粹的运气。在任何情况下,这都不是一个适合SO的编程问题。如果程序正常,可能是程序员网站的一个问题(“最有效地猜测数字的算法是什么”),但正如所写的,它没有希望。@Lemon先生,你有9999999/1000000的机会猜对。如果你猜得足够多,你会猜对的。你需要在低范围和猜测中输入它。啊,你比我快!注意,您也可以使用0.9e22,这有点。。“更好”?而且作者只要求提示,但我不知道给他什么样的提示。我认为关于Stackoverflow的问题和答案应该是关于一般用途和知识,而不是暗示给一个人。啊和0.9e22是不够的,有时它仍然会被取整,即使我在正确的方向上暗示它可能还不够,这对于一个不懂浮点的人来说根本不明显。这也可能是残酷的,尽管有时等待的号码似乎需要更多的时间才能弹出
Hello there in "Guess the number!"
You have 30 seconds.
Select a number in range (0, 10000000000000000000000): 0.999999999999999e22
Now guess a number in range: [1e+22, 1e+22]: 0.999999999999999e22
Wow! The secret is [...].
>>> 0.999999999999999e22 + 1000000 == 0.999999999999999e+22
True
>>> 0.9e22 + 999999 == 0.9e22
False