SlideShare une entreprise Scribd logo
1| Oussama ZERRYI ANDALOUSSI2019/2020
LP : SYSTEMES D'INFORMATION
ET GENIE LOGICIEL
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences Dhar El Mahraz-Fès
Mécanisme d’adresse IP Dynamique C/S
I. Présentation de problématique
Lors de la mise en place des applications client-serveur à travers internet, on a toujours besoin
d’une adresse IP priver ou bien public qui doit être fixe ce qui est difficile. L’achat des adresses
IP privés ainsi que la mise en place des solutions développées sur un serveur sont très chers,
sans oublier que la nature de chaque solution doit être déployer dans un environnement bien
précis.
II. Solution informatique
Pour résoudre ce problème on va adopter un mécanisme de synchronisation qui va rendre
l’adresse IP de serveur reconnu dans chaque instant , en se basant sur une api qui donne la
dernière adresse IP public du serveur à chaque fois cette dernière change on lance une requête
GET vers l’api qui fait la mise à jour de l’IP.
L’Api est un scripte PHP hébergé dans un serveur distant gratuit qui nous donne l’accès aux
différentes ressources déployées à travers une adresse url fixe, au moment d’accès à cette api en
mode lecture, il fournira des données sous forme JSON (on a choisi ce forma parce qu’il est
reconnu par les différents langages de programmations) et l’or d’accès en mode écriture il va
faire la mise à jour de l’adresse IP.
En revanche, avant que le client se connecte au serveur, il récupère son adresse IP actuel à
travers l’api pour établir la concession, et quand le serveur change sans adresse IP on lance la
requête vers cette api pour récupérer la mise à jour.
Ce mécanise rend l’adresse IP du coter serveur et client dynamique ; sans négliger que la
connexion va être établie pour chaque instant.
1
1
1
1
2
2 2
2
Serveur Milieu - IP
Fix
Mise à jour d’IP public
2| Oussama ZERRYI ANDALOUSSI2019/2020
LP : SYSTEMES D'INFORMATION
ET GENIE LOGICIEL
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences Dhar El Mahraz-Fès
III. La proche informatique
Pour expérimenter cette solution on utilise le python comme langage de développement dans
les deux partis à savoir ; client et serveur, ainsi on a développé l’api par PHP pour faciliter
l’hébergement du code écrit.
1. Api développer :
2. Python scripte Server
La partie serveur contient un thread qui se charge de la synchronisation de l’adresse IP
avec le serveur milieu.
a. Récupérer l’adresse IP public
Pour récupérer l’adresse IP publique affectée au réseau du serveur , on a interrogé un
site qui nous répond par IP public sous la forme JSON.
<?php
// connexion to DB
try{
$CN = new pdo("mysql:host=localhost;dbname=id9782423_1;charset=UTF8",
"id9782423_1","123456");
}catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
// test update the Ip Address in DB
if(isset($_GET["ip"])){
$smt= $CN->prepare("update ip set addr='".$_GET["ip"]."'");
$smt->execute();
}
// fetch Ip from DB and store in array
$ip=array();
foreach ($CN->query("SELECT * from ip") as $rc) {
$ip["ip"]=$rc["addr"];
}
// convert array to json format and send it on forme json content
header("content-type: application/json");
echo json_encode($ip);
?>
def getPubIp(self):
while True:
try:
external_ip = urlopen('https://ident.me').read().decode('utf8')
return external_ip
except:
print("wait to get Public Ip From Internet ...")
time.sleep(5)
3| Oussama ZERRYI ANDALOUSSI2019/2020
LP : SYSTEMES D'INFORMATION
ET GENIE LOGICIEL
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences Dhar El Mahraz-Fès
b. Récupérer l’adresse IP
IP courante est enregistrée dans le serveur milieu à travers l’api.
c. Mise à jour de IP
La mise à jour ce fait à travers l’api dans la base de données.
d. Mécanisme de synchronisation du coté serveur
Ce mécanisme Contient trois blocks dans une boucle while avec try pour gérer les
exceptions levées, Le premier block est en test si IP public est différente par rapport IP
enregistrer dans le serveur milieu pour faire la mise à jour et écrire sur un fichier journal.
while True:
try:
PubIp = self.getPubIp()
if self.IpServ != PubIp:
if 'U' not in self.stat.keys(): # the if for organize log file and
log printed
self.stat.clear() # organizhbhbation
print("{} | Updated from {} to
{}".format(datetime.datetime.now(), self.IpServ, PubIp))
with open('Server.log', 'a') as log:
log.write("{} | Updated from {} to
{}n".format(datetime.datetime.now(), self.IpServ, PubIp))
self.stat["U"] = "U" # organization
self.IpServ = self.updtIpServ(PubIp)
else:
def getIpServ(self):
while True:
try:
url = "https://oaz-tech.000webhostapp.com/oaz/api.php"
response = urlopen(url)
data = json.loads(response.read())
return data.get('ip')
except:
print("wait to get Ip From server ...")
time.sleep(5)
def updtIpServ(self,ip):
while True:
try:
urlopen('https://oaz-
tech.000webhostapp.com/oaz/api.php?ip={}'.format(ip))
return ip
except:
print("wait to Update Ip on server ...")
time.sleep(5)
4| Oussama ZERRYI ANDALOUSSI2019/2020
LP : SYSTEMES D'INFORMATION
ET GENIE LOGICIEL
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences Dhar El Mahraz-Fès
Au cas contraire, on passe au block else pour journaliser que l’IP est synchronisée.
Dans le cas d’une exception lever on l’enregistre dans le fichier journal , sinon on
attend 60 secondes et on reprend l’opération de la synchronisation.
3. Partie client.py
Cependant dans la partie client on va exploiter la fonction de getIpServ développé
dans la partie serveur pour récupérer l’IP a travers l’api
IP récupéré sera utilisée pour se connecter au serveur par le socket crée. Au cas d’une
erreur du connexion le programme va refaire le process afin d’établir la connexion.
else:
if 'S' not in self.stat.keys(): # organization
self.stat.clear() # organization
print("{} | Synchroniser sur {}".format(datetime.datetime.now(),
self.IpServ))
with open('Server.log', 'a') as log:
log.write("{} | Synchroniser sur
{}n".format(datetime.datetime.now(), self.IpServ))
self.stat["S"] = "S" # organization
except:
except:
if 'N' not in self.stat.keys(): # organization
self.stat.clear()
print("{} | No Synchroniser".format(datetime.datetime.now()))
with open('Server.log', 'a') as log:
log.write("{} | No
Synchronisern".format(datetime.datetime.now()))
self.stat["N"] = "N" # organization
time.sleep(60)
while True:
global s, con
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((getIpServ(), 9999))
print("Connexion au Serveur Etablie ...")
con = 1
while True:
print(s.recv(4096).decode("Utf8"), end="")
except:
s.close()
con=0
print("Connexion au Serveur couper. Patientez ...")
continue
5| Oussama ZERRYI ANDALOUSSI2019/2020
LP : SYSTEMES D'INFORMATION
ET GENIE LOGICIEL
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences Dhar El Mahraz-Fès
NB : le server doit tourner sur IP de broadcast 0.0.0.0 est le routeur doit être configurer
d’affecter l’adresse IP public a se périphérique (NAT).
On peut exploiter c’est solution pour n’importe quel projet pour assurer la connectivité.
Cas du chat à travers internet.
NB :
• Les exécutables de l’app ++C/S chat à travers internet : http://bit.ly/2wb1KjZ
• Lien GitHub du code source développer : http://bit.ly/38Pn1wZ
• Lien du rapport de solution : http://bit.ly/39V6j0x
• Email : Oussama_Andaloussi@yahoo.com

Contenu connexe

Similaire à Rapport de solution micanisme dynamic ip-python

[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
OVHcloud
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
Abdelkader Rhouati
 
Rapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKRapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKBelkacem KAID
 
Standards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étapeStandards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étape
FFFOD
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus Marcus
Marc NGIAMBA
 
Test_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerxTest_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerx
EnochBidima3
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
Lilia Sfaxi
 
Installation configuration OpenERP 7 - Windows
Installation   configuration OpenERP 7 - WindowsInstallation   configuration OpenERP 7 - Windows
Installation configuration OpenERP 7 - Windows
Sanae BEKKAR
 
Administration des services réseaux
Administration des services réseauxAdministration des services réseaux
Administration des services réseauxFethi Kiwa
 
Présentation OCS et GLPI aux Solutions Linux 2008
Présentation OCS et GLPI aux Solutions Linux 2008Présentation OCS et GLPI aux Solutions Linux 2008
Présentation OCS et GLPI aux Solutions Linux 2008
Nouh Walid
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
Xavier Leune
 
Utilisation d'une api web avec asp
Utilisation d'une api web avec aspUtilisation d'une api web avec asp
Utilisation d'une api web avec aspNovencia Groupe
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
Houda TOUKABRI
 
rapport.pptx
rapport.pptxrapport.pptx
rapport.pptx
NouHailaHM
 
Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debianyahyaf10
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
Sabri Bouchlema
 
Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...
Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...
Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...
Openhost
 
E4 sp2 Exchange
E4 sp2 ExchangeE4 sp2 Exchange
E4 sp2 Exchange
Armand LAUGA
 

Similaire à Rapport de solution micanisme dynamic ip-python (20)

[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
 
Symfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation GénéraleSymfony 2 : chapitre 1 - Présentation Générale
Symfony 2 : chapitre 1 - Présentation Générale
 
Rapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKRapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEK
 
Standards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étapeStandards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étape
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus Marcus
 
Test_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerxTest_Logiciel_appium Version2.ppt projet univerx
Test_Logiciel_appium Version2.ppt projet univerx
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Installation configuration OpenERP 7 - Windows
Installation   configuration OpenERP 7 - WindowsInstallation   configuration OpenERP 7 - Windows
Installation configuration OpenERP 7 - Windows
 
Administration des services réseaux
Administration des services réseauxAdministration des services réseaux
Administration des services réseaux
 
Présentation OCS et GLPI aux Solutions Linux 2008
Présentation OCS et GLPI aux Solutions Linux 2008Présentation OCS et GLPI aux Solutions Linux 2008
Présentation OCS et GLPI aux Solutions Linux 2008
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
 
Utilisation d'une api web avec asp
Utilisation d'une api web avec aspUtilisation d'une api web avec asp
Utilisation d'une api web avec asp
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Lp web tp3_idse
Lp web tp3_idseLp web tp3_idse
Lp web tp3_idse
 
rapport.pptx
rapport.pptxrapport.pptx
rapport.pptx
 
Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debian
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...
Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...
Hébergement cloud et logiciels de collaboration : l'étude de cas clients Open...
 
E4 sp2 Exchange
E4 sp2 ExchangeE4 sp2 Exchange
E4 sp2 Exchange
 

Rapport de solution micanisme dynamic ip-python

  • 1. 1| Oussama ZERRYI ANDALOUSSI2019/2020 LP : SYSTEMES D'INFORMATION ET GENIE LOGICIEL Université Sidi Mohamed Ben Abdellah Faculté des Sciences Dhar El Mahraz-Fès Mécanisme d’adresse IP Dynamique C/S I. Présentation de problématique Lors de la mise en place des applications client-serveur à travers internet, on a toujours besoin d’une adresse IP priver ou bien public qui doit être fixe ce qui est difficile. L’achat des adresses IP privés ainsi que la mise en place des solutions développées sur un serveur sont très chers, sans oublier que la nature de chaque solution doit être déployer dans un environnement bien précis. II. Solution informatique Pour résoudre ce problème on va adopter un mécanisme de synchronisation qui va rendre l’adresse IP de serveur reconnu dans chaque instant , en se basant sur une api qui donne la dernière adresse IP public du serveur à chaque fois cette dernière change on lance une requête GET vers l’api qui fait la mise à jour de l’IP. L’Api est un scripte PHP hébergé dans un serveur distant gratuit qui nous donne l’accès aux différentes ressources déployées à travers une adresse url fixe, au moment d’accès à cette api en mode lecture, il fournira des données sous forme JSON (on a choisi ce forma parce qu’il est reconnu par les différents langages de programmations) et l’or d’accès en mode écriture il va faire la mise à jour de l’adresse IP. En revanche, avant que le client se connecte au serveur, il récupère son adresse IP actuel à travers l’api pour établir la concession, et quand le serveur change sans adresse IP on lance la requête vers cette api pour récupérer la mise à jour. Ce mécanise rend l’adresse IP du coter serveur et client dynamique ; sans négliger que la connexion va être établie pour chaque instant. 1 1 1 1 2 2 2 2 Serveur Milieu - IP Fix Mise à jour d’IP public
  • 2. 2| Oussama ZERRYI ANDALOUSSI2019/2020 LP : SYSTEMES D'INFORMATION ET GENIE LOGICIEL Université Sidi Mohamed Ben Abdellah Faculté des Sciences Dhar El Mahraz-Fès III. La proche informatique Pour expérimenter cette solution on utilise le python comme langage de développement dans les deux partis à savoir ; client et serveur, ainsi on a développé l’api par PHP pour faciliter l’hébergement du code écrit. 1. Api développer : 2. Python scripte Server La partie serveur contient un thread qui se charge de la synchronisation de l’adresse IP avec le serveur milieu. a. Récupérer l’adresse IP public Pour récupérer l’adresse IP publique affectée au réseau du serveur , on a interrogé un site qui nous répond par IP public sous la forme JSON. <?php // connexion to DB try{ $CN = new pdo("mysql:host=localhost;dbname=id9782423_1;charset=UTF8", "id9782423_1","123456"); }catch(Exception $e){ die('Erreur : '.$e->getMessage()); } // test update the Ip Address in DB if(isset($_GET["ip"])){ $smt= $CN->prepare("update ip set addr='".$_GET["ip"]."'"); $smt->execute(); } // fetch Ip from DB and store in array $ip=array(); foreach ($CN->query("SELECT * from ip") as $rc) { $ip["ip"]=$rc["addr"]; } // convert array to json format and send it on forme json content header("content-type: application/json"); echo json_encode($ip); ?> def getPubIp(self): while True: try: external_ip = urlopen('https://ident.me').read().decode('utf8') return external_ip except: print("wait to get Public Ip From Internet ...") time.sleep(5)
  • 3. 3| Oussama ZERRYI ANDALOUSSI2019/2020 LP : SYSTEMES D'INFORMATION ET GENIE LOGICIEL Université Sidi Mohamed Ben Abdellah Faculté des Sciences Dhar El Mahraz-Fès b. Récupérer l’adresse IP IP courante est enregistrée dans le serveur milieu à travers l’api. c. Mise à jour de IP La mise à jour ce fait à travers l’api dans la base de données. d. Mécanisme de synchronisation du coté serveur Ce mécanisme Contient trois blocks dans une boucle while avec try pour gérer les exceptions levées, Le premier block est en test si IP public est différente par rapport IP enregistrer dans le serveur milieu pour faire la mise à jour et écrire sur un fichier journal. while True: try: PubIp = self.getPubIp() if self.IpServ != PubIp: if 'U' not in self.stat.keys(): # the if for organize log file and log printed self.stat.clear() # organizhbhbation print("{} | Updated from {} to {}".format(datetime.datetime.now(), self.IpServ, PubIp)) with open('Server.log', 'a') as log: log.write("{} | Updated from {} to {}n".format(datetime.datetime.now(), self.IpServ, PubIp)) self.stat["U"] = "U" # organization self.IpServ = self.updtIpServ(PubIp) else: def getIpServ(self): while True: try: url = "https://oaz-tech.000webhostapp.com/oaz/api.php" response = urlopen(url) data = json.loads(response.read()) return data.get('ip') except: print("wait to get Ip From server ...") time.sleep(5) def updtIpServ(self,ip): while True: try: urlopen('https://oaz- tech.000webhostapp.com/oaz/api.php?ip={}'.format(ip)) return ip except: print("wait to Update Ip on server ...") time.sleep(5)
  • 4. 4| Oussama ZERRYI ANDALOUSSI2019/2020 LP : SYSTEMES D'INFORMATION ET GENIE LOGICIEL Université Sidi Mohamed Ben Abdellah Faculté des Sciences Dhar El Mahraz-Fès Au cas contraire, on passe au block else pour journaliser que l’IP est synchronisée. Dans le cas d’une exception lever on l’enregistre dans le fichier journal , sinon on attend 60 secondes et on reprend l’opération de la synchronisation. 3. Partie client.py Cependant dans la partie client on va exploiter la fonction de getIpServ développé dans la partie serveur pour récupérer l’IP a travers l’api IP récupéré sera utilisée pour se connecter au serveur par le socket crée. Au cas d’une erreur du connexion le programme va refaire le process afin d’établir la connexion. else: if 'S' not in self.stat.keys(): # organization self.stat.clear() # organization print("{} | Synchroniser sur {}".format(datetime.datetime.now(), self.IpServ)) with open('Server.log', 'a') as log: log.write("{} | Synchroniser sur {}n".format(datetime.datetime.now(), self.IpServ)) self.stat["S"] = "S" # organization except: except: if 'N' not in self.stat.keys(): # organization self.stat.clear() print("{} | No Synchroniser".format(datetime.datetime.now())) with open('Server.log', 'a') as log: log.write("{} | No Synchronisern".format(datetime.datetime.now())) self.stat["N"] = "N" # organization time.sleep(60) while True: global s, con try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((getIpServ(), 9999)) print("Connexion au Serveur Etablie ...") con = 1 while True: print(s.recv(4096).decode("Utf8"), end="") except: s.close() con=0 print("Connexion au Serveur couper. Patientez ...") continue
  • 5. 5| Oussama ZERRYI ANDALOUSSI2019/2020 LP : SYSTEMES D'INFORMATION ET GENIE LOGICIEL Université Sidi Mohamed Ben Abdellah Faculté des Sciences Dhar El Mahraz-Fès NB : le server doit tourner sur IP de broadcast 0.0.0.0 est le routeur doit être configurer d’affecter l’adresse IP public a se périphérique (NAT). On peut exploiter c’est solution pour n’importe quel projet pour assurer la connectivité. Cas du chat à travers internet. NB : • Les exécutables de l’app ++C/S chat à travers internet : http://bit.ly/2wb1KjZ • Lien GitHub du code source développer : http://bit.ly/38Pn1wZ • Lien du rapport de solution : http://bit.ly/39V6j0x • Email : Oussama_Andaloussi@yahoo.com