破坏 rootme TCP 回到大学挑战:将其转换为字节后发送正确的结果,但我不断得到错误的答案

问题描述 投票:0回答:1

在这个挑战中,我必须读取服务器正在打印的内容,提取2个整数值val1和val2,计算val1的平方根并乘以val2并将结果发送到服务器。

我设法做到了这一切,但我不断得到错误的答案。 这是我的代码:

import math
import socket

HOST = "challenge01.root-me.org"  # The server's hostname or IP address
PORT = 52002  # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    data = s.recv(1024)
    print(data)
    print("a="+str(data[171:174]))
    print("b="+str(data[191:195]))
    a=math.sqrt(int(data[171:174]))
    b=int(data[191:195])*a
    print(b)
    c=bytes(str(b)+"\n",'utf-8')
    print("c="+c.decode())

    # s.send(c.encode())
    s.send(c)
    data2=s.recv(1024)

print(f"Received {data2!r}")

将结果发送到服务器需要将结果转换为字节以及“ ”,所以我想可能转换出错了,但是当我将其转换回字符串时,我得到了相同的结果。

Example of execution of the code

所以我真的看不出问题所在。

感谢您的帮助。

python sockets byte
1个回答
0
投票

这是因为你有 a 将 b 四舍五入到小数点后两位。创建一个 round 变量并使用 round.() 函数。 r= 圆(b, 2)

import math

进口插座

HOST = "challenge01.root-me.org"  # The server's hostname or IP address
PORT = 52002  # The port used by the server

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    data = s.recv(1024)
    print(data)
    print("a="+str(data[171:174]))     #WHY HOW ? ?W? ? ? ? 
    print("b="+str(data[191:195]))
    a=math.sqrt(int(data[171:174]))
    b=int(data[191:195])*a
    r= round(b, 2)
    print(r)
    c=bytes(str(r)+"\n",'utf-8')
    print("c="+c.decode())

    # s.send(c.encode())
    s.send(c)
    data2=s.recv(1024)

print(f"Received {data2!r}")
© www.soinside.com 2019 - 2024. All rights reserved.