Description du challenge
Le challenge consiste à inverser des chaînes de caractères envoyées par un service distant. Le service envoie une chaîne de caractères précédée de >>>
, et attend en retour la même chaîne, mais avec les caractères dans l’ordre inverse.
Résolution du challenge
Connexion au service
Commençons par nous connecter au service distant en utilisant la commande nc localhost 4000
dans le terminal. Cela nous permet de voir comment le service fonctionne et quel type de données il envoie.
Écriture du code Python
Ecrivons un script Python pour automatiser le processus d’inversion des chaînes de caractères. Le script utilise le module socket
pour se connecter au service, recevoir des données, inverser les chaînes de caractères et renvoyer les résultats.
Voici le code Python utilisé :
import socket
import time
def reverse_string(s):
return s[::-1]
def main():
# Créer une connexion TCP/IP
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connecter le socket à l'adresse du serveur
server_address = ('localhost', 4000)
sock.connect(server_address)
try:
while True:
time.sleep(1)
# Recevoir des données du serveur
data = sock.recv(1024)
print(f"Reçu : {data.decode()}")
# Diviser le message en lignes
lines = data.decode().split('\n')
if 'Congratulations!! Here is your flag:' in lines:
break
for line in lines:
# Vérifier si la ligne est une chaîne à inverser
if line.startswith('>>>'):
# Supprimer les '>>>' et les espaces blancs au début de la chaîne
line = line.lstrip('>>> ').rstrip()
# Inverser la chaîne de caractères
response = reverse_string(line)
print(f"Envoi : {response}")
# Ajouter un caractère de fin de ligne à la réponse
response += '\n'
# Renvoyer la chaîne inversée au serveur
sock.sendall(response.encode())
finally:
# Fermer la connexion
sock.close()
if __name__ == "__main__":
main()
Explication du code
J’ai rencontré quelques problèmes lors de l’exécution du script. Par exemple
-
le script ne recevait pas de nouvelles chaînes à inverser après avoir renvoyé la première réponse. J’ai résolu ce problème en ajoutant un caractère de fin de ligne (
\n
) à la fin de chaque réponse avant de l’envoyer au serveur. -
le serveur envoyait parfois plusieurs lignes de données en une seule fois, y compris des messages qui n’étaient pas des chaînes à inverser. Pour résoudre ce problème, j’ai modifié le script pour qu’il traite chaque ligne de données séparément et n’inverse que les lignes qui commencent par
>>>
.
Conclusion
Ce challenge permet de pratiquer nos compétences en programmation Python et en manipulation de chaînes de caractères, ainsi que notre compréhension des communications réseau. 🍀