Eval me 1
Challenge
Solution
import socket
import ast
import operator as op
# Evaluation safe d'une expression mathématiques
operators = {
ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul,
ast.Div: op.truediv, ast.Pow: op.pow, ast.BitXor: op.xor,
ast.USub: op.neg
}
def eval_expr(expr):
return eval_(ast.parse(expr, mode='eval').body)
def eval_(node):
match node:
case ast.Constant(value) if isinstance(value, int):
return value # integer
case ast.BinOp(left, op, right):
return operators[type(op)](eval_(left), eval_(right))
case ast.UnaryOp(op, operand): # e.g., -1
return operators[type(op)](eval_(operand))
case _:
raise TypeError(node)
# Connexion au serveur
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('vps.ctfrei.fr', 5002))
while True:
try:
# Récupération et affichage du message du serveur
data = client.recv(2048).strip().decode()
print(data)
# Récupération de l'expression à résoudre dans le message
expr = data.split('\n\n')[-1]
# Evaluation de l'expression
answer = eval_expr(expr)
# Envoie de la réponse
client.send(f"{answer}\n".encode())
except:
# Quitte la boucle si une exception est levée
breakMis à jour