###### tags: `Encodage` `ASCII` `NSI première` `Python`
:::info
Utilisation des fonctions de Python permettant de passer d'un type de codage vers un autre. Des conseils sont donnés pour résoudre le challenge.
On y trouve
* le parcours séquentiel d'un tableau
* Utilisation de bibliothèque.
:::
###### tags: `parcours séquentiel` `Représentation d'un texte`

###### tags: `Utilisation de bibliothèque`

###### tags: `Connexion à distance` `netcat` `Python`
:::info
:warning: Certains challenges nécessitent une connexion à distance à un serveur de questions.
On pourra dans un premier temps utiliser l'utilitaire **netcat** pour comprendre ce que le serveur attend comme réponse. Voici un exemple.
**On doit décoder 100 codes hexadécimaux envoyés successivement.**

* établir la connexion au serveur distant avec netcat
nc socket.cryptohack.org 13377

Le serveur attend que la chaine hexadécimale soit décodée, et renvoyée avec un formatage JSON, sûrement avec la valeur "decoded" en bonus.
L'observation du code source du serveur de confirme cela

De plus le type d'encodage n'est pas seulement de type hexadécimal !

La plateforme conseille d'utiliser la bibliothèque [pwntools](https://github.com/Gallopsled/pwntools) conçut pour le CTF. On peut aussi utiliser les fonctionnalités sockets présentent par défaut avec Python.
```python
import socket
"""
TCP - connexion Socket - CTF CSWA
Hôte 163.172.30.84
Protocole TCP
Port 4372
"""
# Adresse IP et port du serveur
SERVER_IP = '163.172.30.84'
SERVER_PORT = 4372
# Création du socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Connexion au serveur
client_socket.connect((SERVER_IP, SERVER_PORT))
print(f"Connecté au serveur {SERVER_IP}:{SERVER_PORT}")
# Réception de la réponse du serveur
data = client_socket.recv(1024)
print(f"Message reçu du serveur : {data.decode()}")
resultat = "Hello \n"
# envoie de la réponse au serveur
client_socket.sendall((resultat).encode())
# Réception de la réponse du serveur
data = client_socket.recv(1024)
print(f"Message reçu du serveur : {data.decode()}")
# Fermeture de la connexion
client_socket.close()
print("Connexion fermée")
except ConnectionRefusedError:
print("La connexion a été refusée.")
except Exception as e:
print(f"Une erreur s'est produite : {str(e)}"
```
:::