=====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