=====Réseau LPROB===== ====Sockets==== Explication sur le modèle OSI, les différentes couches: https://fr.wikipedia.org/wiki/Mod%C3%A8le_OSI https://fr.wikipedia.org/wiki/Couche_r%C3%A9seau {{https://bvdp.inetdoc.net/files/iut/tp_lpro_reseau/reseau01.png}} {{https://bvdp.inetdoc.net/files/iut/tp_lpro_reseau/reseau02.png}} ====VLAN==== {{https://bvdp.inetdoc.net/files/iut/tp_lpro_reseau/reseau03.png}} {{https://bvdp.inetdoc.net/files/iut/tp_lpro_reseau/reseau04.png}} {{https://bvdp.inetdoc.net/files/iut/tp_lpro_reseau/reseau05.png}} ====Adressage==== {{https://bvdp.inetdoc.net/files/iut/tp_lpro_reseau/reseau06.png}} Expliquer réseau local: commutation de paquet hors réseau local-> passerelle et routage ====Outils d'analyse Wireshark==== Wireshark est un logiciel permettant d'analyser les échanges réseau sur une interface (notamment réseau ethernet) d'un PC. La fenêtre de Wireshark est divisée en trois zones: - La première affiche les différentes trames capturées, numérotées, datées, etc... cliquer sur une trame pour la sélectionner. - La seconde permet d'analyser la trame sélectionnée aux différentes couches réseau. Les différentes couches peuvent être détaillées en cliquant sur la flèche à gauche de son nom. Les quatres couches réseau présentées sont dans l'ordre: Couche Physique, Couche Réseau, Couche Transport, Couche Services. - La troisième permet de visualiser le contenu en hexa et en ascii de la trame. La figure suivante montre une capture d'écran de l'application. La trame n°489 est affichée. La couche Réseau est détaillée, notamment l'adresse MAC du destinataire de la trame. L'affichage de la valeur en hexadécimal est visible (zone sélectionnée dans la partie inférieure de la fenêtre). {{https://bvdp.inetdoc.net/files/iut/tp_pic/wireshark.png}} ===Installation de Wireshark=== Télécharger et installer sur D: https://bvdp.inetdoc.net/files/reseauLPROB/wireshark-portable-3-5-0.exe ===Filtrage avec Wireshark=== exemples de filtre: tcp && ( (ip.src==10.6.11.65 && ip.dst==10.6.7.124) || (ip.src==10.6.7.124 && ip.dst==10.6.11.65)) udp && ( ip.addr==172.16.6.59) =====Administration réseau sous Windows 10===== Pinger un hôte: ping ipv4 Lister les voisins: netsh int ipv4 show nei Lister la table de routage: netsh int ipv4 show route Lister les interfaces réseau et les adresses: netsh int ipv4 show addr Ne plus utiliser ipconfig /all car il ne liste pas les plusieurs adresses IPv4 que peut avoir une même interface Pour renouveler les baux dhcp, ce n'est pas automatique sous windows à la déconnexion/reconnexion, il faut faire: ipconfig /renew Pour déterminer l'adresse IP d'un site web à partir de son nom: nslookup nom_du_site Liste des numéros de ports TCP et UDP réservés: https://fr.wikipedia.org/wiki/Liste_de_ports_logiciels ====Application client TCP pour middleWare ==== Nous allons maintenant simuler un client TCP afin que vous puissiez l'utiliser depuis votre PC sans avoir besoin de SRS. Pour cela, enregistrer dans le dossier R:\lprob\“nom_prenom” le code du programme suivant (en faisant clic droit sur le nom puis enregistrer sous) import socket HOST = '172.16.6.59' # The server's hostname or IP address PORT = 30000 # The port used by the server with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) s.sendall(b'r 158 161 162') data = s.recv(1024) print('Received', repr(data)) Editer ce fichier avec idle pour l'adapter selon les consignes données en séance en modifiant les variables, en tapant dans la commande windows: C:\"Program Files"\Python39\Lib\idlelib\idle simu_client_srs.py Après édition, sauver le fichier et l’exécuter depuis idle en faisant F5: ====Application récepteur UDP pour middleWare==== import socket HOST = '127.0.0.1' # The server's hostname or IP address PORT = 4242 # The port used by the server with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.bind(('', 10000)) while True: msg, addr = s.recvfrom(8192) # This is the amount of bytes to read at maximum print("Got message from %s: %s" % (addr, msg )) ====Émetteur et récepteur UDP==== Exemples tirés de: https://wiki.python.org/moin/UdpCommunication import socket UDP_IP = "" #recevoir des requetes depuis toutes les ip UDP_PORT = 5005 sock = socket.socket(socket.AF_INET, # Internet socket.SOCK_DGRAM) # UDP sock.bind((UDP_IP, UDP_PORT)) while True: data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes print("received message: %s" % data) import socket UDP_IP = "127.0.0.1" UDP_PORT = 5005 MESSAGE = b"Hello, World!" print("UDP target IP: %s" % UDP_IP) print("UDP target port: %s" % UDP_PORT) print("message: %s" % MESSAGE) sock = socket.socket(socket.AF_INET, # Internet socket.SOCK_DGRAM) # UDP sock.sendto(MESSAGE, (UDP_IP, UDP_PORT)) ====Client et serveur TCP==== Exemples tirés et adaptés de https://python.doctor/page-reseaux-sockets-python-port # coding: utf-8 import socket hote = "localhost" port = 15555 socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket.connect((hote, port)) print ("Connection on "+str(port)) socket.send("Hey my name is Bertrand!".encode('utf-8')) print("Close") socket.close() # coding: utf-8 import socket socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket.bind(('', 15555)) #recevoir des requetes depuis toutes les ip while True: socket.listen(5) client, address = socket.accept() print(str( address )+ " connected") response = client.recv(255) if response != "": print(response) print("Close") client.close() stock.close() Avec Wireshark, espionner la boucle locale avec filtre tcp.port==15555 puis faire une requête http depuis le navigateur web pour voir la requête GET sur le serveur TCP: b'GET / HTTP/1.1\r\nHost: localhost:15555\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\nAccept-Language: fr,fr-FR;q=0' ===Gestion du multrithreading pour le serveur=== https://python.doctor/page-reseaux-sockets-python-port ====Serveur http simple==== exemple tiré de: https://www.linuxtricks.fr/wiki/python-creer-un-petit-serveur-web-a-la-volee python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... faire un fichier index.html contenant coucou accéder au serveur via: http://localhost:8000/ pour ouvrir le serveur sur le port 80: sudo python3 -m http.server 80 ====Serveur http à peine plus évolué==== import http.server PORT = 8888 server_address = ("", PORT) server = http.server.HTTPServer handler = http.server.CGIHTTPRequestHandler handler.cgi_directories = ["/index.html"] print("Serveur actif sur le port :", PORT) httpd = server(server_address, handler) httpd.serve_forever() ====Serveur http plus évolué avec Flask==== from flask import Flask cpt=0 app = Flask(__name__) @app.route('/') def index(): return 'Hello world' ''' global cpt chaine = 'Hello world cpt='+str(cpt) cpt=cpt+1 return chaine ''' app.run(debug=True, host='0.0.0.0', port=5000) ====Serveur web apache==== https://bvdp.inetdoc.net/tpreseau/simple.htm montrer (s)ftp via fileZilla