AMSER4 - Sécurisation des communications

Document de cours

Communication réseau
1. Dans Spyder, ouvrir 2 onglets terminal.
2. Dans le premier terminal, exécuter le programme `chat_client.py`
3. Dans le second terminal, exécuter le programme `chat_serveur.py`

4. Testez la communication 
🐍 Script Python
#!/usr/bin/env python3
#  -*- coding: utf-8 -*-

import socket ##### CLIENT UDP #####

# Adresse et port du serveur :
PORT = 12345 # N'importe quel port non réservé (> 1023)
HOTE = "127.0.0.1" # <---Adresse du serveur, À ADAPTER À VOTRE SITUATION !! 
sCli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
TAILLE_MAX_PAQUET = 1024 # Utile pour la réception uniquement.
print("Saisir vos messages, suivi de [ENTRÉE].")
print("Écrire FIN pour terminer, voire STOP pour arrêter aussi le serveur.\n")

while 1 : # On envoie des
    msg = input("===(FIN / STOP pour terminer)==> ") # octets, donc on
    sCli.sendto(bytes(msg, encoding="utf8"), (HOTE,PORT)) # doit encoder
    # les chaînes...
    #### Facultatif : afficher l'accusé de réception #############
    paquet_recu, src = sCli.recvfrom(TAILLE_MAX_PAQUET)
    msg_recu = str(paquet_recu, encoding='utf-8')
    print("Serveur :", msg_recu)
    ##############################################################
    if msg == "FIN" or msg == "STOP" :
        sCli.close()
        print("Bye !")
        break
🐍 Script Python
# coding: utf-8
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import socket ##### SERVEUR UDP #####

HOTE = "127.0.0.1" # <---Adresse IP À ADAPTER À VOTRE SITUATION ex. 'localhost' en local
PORT = 12345 # N'importe quel port non réservé (> 1023)
TAILLE_MAX_PAQUET = 1024
sSrv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # On crée le socket
sSrv.bind((HOTE,PORT)) # On l'associe à un couple (adresse_IP ; port)
print("Serveur en attente de message, sur le port", HOTE)
print("Saisir STOP sur un client pour arrêter le serveur.\n")
while 1 :
paquet, source = sSrv.recvfrom(TAILLE_MAX_PAQUET)    # Réception du paquet (octets)
msg_recu = str(paquet, encoding='utf-8')             # transformé en chaîne

# /!\ On reçoit des octets, à re-coder ici en texte !
print("↳ Reçu du client d'IP", source[0], "sur le port", source[1], ":", msg_recu)
# Là aussi, source = (adresse_IP , port)


#########################################################################
# /!\ Idem ici, on a converti : chaîne msg --> octets à envoyer

if msg_recu == "STOP" :
        sSrv.close()
        print("Message 'STOP' reçu, serveur arrêté !")
        break   

#### Facultatif : envoi d'accusé de réception ###########################
message = input(">> ")
sSrv.sendto(bytes(message, encoding="utf8"), (source[0], source[1]))

a. avec la méthode len()

🐍 Script Python
def longueur(ma_liste):    
    return len(ma_liste)

b. sans la méthode len()

🐍 Script Python
def longueur(ma_liste):
    ct = 0    
    while ma_liste != []:
        ma_liste.pop()
        ct += 1
    return ct