BTS IRIS 2 – Informatique et Reseaux pour l`Industrie et les Services

publicité
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
INVENTAIRE
D'UN PARC INFORMATIQUE
Client UNIX
Session 2006 – 2007
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page1/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
Lycee de formation: Lycee Jean Lurcat
SOMMAIRE
1. Presentation du projet
2. Description
3. Analyse UML
1. Diagramme de cas d'utilisations generale
2. Diagramme de cas d'utilisation
3. Diagramme de sequence acteur / systeme
4. Diagramme de sequence client / serveur
5. Diagramme d'activite
6. Diagramme de classe
5. Programmation
1. Tests et prototypes
6. Conclusion
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page2/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
1. Presentation du projet
1. Description
Il s'agit de développer un systeme d'inventaire en temps réel.
A la mise en service d'un poste sur le réseau pédagogique de l'établissement, celui ci
devra être reconnu par le système, qui récuperera dans une base de données les
informations matérielles et logicielles du matériel connecté.
2. Cahier des charges (voir annexe)
Ce projet se divise en trois parties:

Serveur

Détecter la connexion d'un poste client.

Recevoir le relevé d'informations du client..

Mettre a jour la base de données inventaire.

Un utilisateur autorisé pourra configurer le service.

Base de données

Récuperer la base de données.

Extraire des informations depuis la base de données.

Exécuter des requetes pre-programmées sur la base de données.

Client

Récupérer et ordonner les informations du poste.

Comparer les données mises a jour.

Envoyer les informations au serveur d'inventaire.
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page3/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
3. Approfondissement de la partie client
La récuperation des données se fait lors du démarrage du poste, l'utilisateur ne peut
pas intervenir lors de l'execution du programme.
Les données sont envoyées par le réseau Ethernet (protocole TCP/IP), en liaison
asynchrone avec le serveur (pas de réponse attendue de la part du serveur), par le
biais de socket via le port 60000.
Nous utiliserons des adresses IP temporaires: 192.0.0.119 pour le serveur Win,
192.0.0.117 pour le serveur Unix, et 192.0.0.111 pour le client Unix.
La compatibilité des systemes d'exploitation du serveur et du client devra rester
fonctionnelle: l'envoi des données doit marcher vers un serveur UNIX et Windows.
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page4/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
2.
Analyse UML
1. Diagramme de cas d'utilisation générale
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page5/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
2. Diagramme de cas d'utilisation
L'utilisateur n'intervient pas dans le déroulement du programme.
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page6/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
3. Diagramme de sequence acteur / systeme
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page7/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
Comme dit avant, l'utilisateur n'intervient pas dans le déroulement du programme.
4. Diagramme de sequence client / serveur
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page8/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
5. Diagramme d'activite
[different]
La boucle d'écoute client du serveur doit etre demarrée avant que le client n'envoie
ses données. Le cas échéant, le client n'envoie pas les données et continue le
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page9/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
démarrage du poste apres avoir renvoyé une erreur de connexion.
6. Diagramme de classes
La partie client se compose de deux programmes, un écrit en script shell et un autre
en C++. Nous verrons dans la partie Programmation le déroulement du script qui
s'occupe de la rotation des bases de données, le relevé d'informations,
l'ordonnancement des informations relevées, et l'appel du programme en C++ qui se
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page10/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
compose de 3 classes en plus du programme principal main.cpp.
La classe main fait appel a a la classe c_Client qui contient l'algorithme de
comparaison, qui elle meme decide d'envoyer la base de données au serveur ou non.
Si la decision d'envoi est positive, c_Client::Comp() fait appel a
c_NetworkCommunication::SendToServer() qui contient l'algorithme d'envoi. Elle
établi une connection avec le serveur par le biais de
c_NetworkCommunication::CallSocket(), puis envoie la base de données en appelant
c_NetworkCommunication::SendBuffer().
La fonction c_FileAcces::Verif() est utilisée par les deux autres classes pour verifier
l'acces aux bases de données.
5. Programmation
1. Tests et prototypes
1. Script Shell
#!/bin/sh
#Programme d'inventaire - client UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues
#Creation des fichiers d'inventaire
touch log.txt
touch log.txt.old
#Rotation des fichiers d'inventaire
mv -f `pwd`/log.txt `pwd`/log.txt.old
#date
date >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Systeme d'exploitation
uname >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Adresse MAC
/sbin/ifconfig | grep HWaddr >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Processeur
more /proc/cpuinfo | grep vendor_id >> `pwd`/log.txt
more /proc/cpuinfo | grep model\ name >> `pwd`/log.txt
more /proc/cpuinfo | grep cpu\ MHz >> `pwd`/log.txt
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page11/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
more /proc/cpuinfo | grep cache\ size >> `pwd`/log.txt
echo >> `pwd`/log.txt
#disques durs
df -h >> `pwd`/log.txt
echo >> `pwd`/log.txt
#memoire vive
free >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Carte son
/sbin/lspci -v | grep Multimedia\ audio\ controller >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Carte graphique
/sbin/lspci -v | grep VGA\ compatible\ controller >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Cartes reseau
/sbin/lspci -v | grep Network\ controller >> `pwd`/log.txt
/sbin/lspci -v | grep Ethernet\ controller >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Configuration reseau
/sbin/ifconfig | grep inet\ adr >> `pwd`/log.txt
echo >> `pwd`/log.txt
#Logiciels
rpm -qa | sort -u | uniq -w 3 >> `pwd`/log.txt
#Envoi
`pwd`/main.exe 192.0.0.119
exit
Le script est une suite de commande écrites en shell.
La commande touch permet de créer les fichiers textes s'ils n'existent pas déja.
La deuxieme commande permet de supprimer la base de données actuelle en la
renommant en ancienne base de données, ce qui a pour effet d'écraser l'ancienne.
Les commandes suivantes stockent dans la nouvelle base de données les informations
logicielles dans l'ordre des commentaires, puis les informations logicielles. La
nouvelle base de données est automatiquement crée. Ensuite, le script appelle le
programme écrit en C++.
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page12/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
2. Main.cpp
/*#Programme d'inventaire - CLIENT UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues*/
/*Script d'inventaire automatise*/
/*Ce programme s'execute a la fin du releve d'informations,
compare mot par mot les deux bases de donnees
et, si elles sont differentes,
envoie la base de donnees la plus recente au serveur */
/*-----------------------------------------------------------------*/
#include <ios>
#include <iostream>
#include "lib.h"
using namespace std;
int main ( int argc, char* argv[] )
{
int Res;
try
{
c_Client Comm;
if ( ( Res = Comm.Comp ( argv[1] ) < 0 ) ) throw 0;
}
catch ( ... )
{
cerr << "erreur dans la comparaison" << endl;
return -1;
}
return Res;
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page13/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
}
3. lib.h
/*#Programme d'inventaire - CLIENT UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues*/
class c_Client
{
public: int Comp ( char* );
};
class c_NetworkCommunication
{
public:
int SendToServer ( char*, char* );
// private:
int CallSocket ( char* );
int SendBuffer ( char*, int, const char* );
};
class c_FileAcces
{
public: int Verif ( char*, char* );
};
lib.h contient les entetes des classes incluses dans main.cpp
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page14/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
4. lib.cpp
/*#Programme d'inventaire - CLIENT UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues*/
/*Script d'inventaire automatise*/
/*Ce programme s'execute a la fin du releve d'informations,
compare mot par mot les deux bases de donnees
et, si elles sont differentes,
envoie la base de donnees la plus recente au serveur */
/*#Programme d'inventaire - CLIENT UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues*/
#include <ios>
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <sstream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>
#define PORT_SERVER 60000
#include "lib.h"
using namespace std;
/* int Verif ( char*, char* ) verifie l'acces aux fichiers dont le chemin est passe en parametre*/
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page15/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
int c_FileAcces::Verif ( char* Path_File, char* Path_OldFile = NULL )
{
//Creation des flux de lecture
ifstream File( Path_File );
ifstream OldFile( Path_OldFile );
//Verification de l'ouverture des fichier
if ( File.bad() )
{
cerr << "Ouverture de \"log.txt\" echouee" << endl;
return -1;
}
if ( OldFile.bad() )
{
cerr << "Ouverture de \"log.txt.old\" echouee" << endl;
return -1;
}
return 0;
}
/*CallSocket() renvoie le descripteur Socket apres avoir etabli la communication avec le serveur*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
int c_NetworkCommunication::CallSocket ( char* IP_SERVER )
{
struct sockaddr_in serv_addr;
struct hostent *Host_Port;
int Sock;
// Resolution du serveur
if ( ( Host_Port = gethostbyname( IP_SERVER ) ) == NULL )
{
cerr << "Impossible de resoudre le serveur" << endl;
return(-1);
}
// Creation socket
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons( PORT_SERVER );
memcpy( &serv_addr.sin_addr.s_addr, Host_Port->h_addr, Host_Port->h_length );
if ( ( Sock = socket( Host_Port->h_addrtype, SOCK_STREAM, 0 ) ) < 0 )
{
cerr << "Impossible de creer le socket" << endl;
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page16/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
return( -1 );
}
// Connexion au serveur
if ( connect( Sock, ( struct sockaddr * ) &serv_addr, sizeof( serv_addr ) ) < 0 )
{
cerr << "Impossible de se connecter au serveur" << endl;
close( Sock );
return -1 ;
}
return( Sock );
}
/*SendBuffer() envoie la base de donnees au serveur---------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
int c_NetworkCommunication::SendBuffer ( char* Path_File, int Sock, const char* BufToSend )
{
if ( send( Sock, BufToSend, strlen ( BufToSend ), 0 ) < 0 )
{
cerr << "Impossible d'envoyer \"" << "BufToSend" << "\" au serveur" << endl;
return -1;
}
return 0;
}
/*SendToServer() stocke le fichier dans un buffer et envoie ce buffer a la fonction SendBuffer(),
avec le socket et le chemin du fichier*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
int c_NetworkCommunication::SendToServer ( char* Path_File, char* IP_SERVER )
{
//Creation des flux de lecture
ifstream File( Path_File );
if ( File ) // ce test échoue si le fichier n'est pas ouvert
{
stringstream Buffer;
// Ouverture socket
int Sock = CallSocket( IP_SERVER );
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page17/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
const char *BufToSend;
string tmp;
// Lecture du fichier
Buffer << File.rdbuf();
tmp = Buffer.str();
BufToSend = tmp.c_str();
// Envoi Buffer
int SendBuffer_State = SendBuffer ( Path_File, Sock, BufToSend );
// Fermeture du fichier
File.close();
}
else
{
cerr << "ifstream File echoue" << endl;
return -1;
}
return 0;
}
/*Comp() contient l'algorithme de comparaison des deux fichiers texte, il les compare mot a mot
apres avoir verifier l'acces aux fichiers, et fait appel a la fonction Comp() s'ils sont differents.*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
int c_Client::Comp ( char* IP = "192.0.0.117" )
{
char* IP_SERVER = IP;
char* Path_File = "log.txt";
char* Path_OldFile = "log.txt.old";
//Buffer de mot
string Word;
string OldWord;
bool Id = true;
//---------------------------------------------Ouverture Fichiers--------------------------------------------//Creation des flux de lecture
ifstream File( Path_File );
ifstream OldFile( Path_OldFile );
c_FileAcces Verification;
Verification.Verif( Path_File, Path_OldFile );
//---------------------------------------------Traitement Fichiers--------------------------------------------//Lecture du fichier
for ( unsigned i = 0; !OldFile.eof() && Id; ++i )
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page18/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
{
File >> Word;
OldFile >> OldWord;
//Comparaison
if ( Word != OldWord )
{
Id = false;
File.close();
c_NetworkCommunication Envoi;
Envoi.SendToServer( Path_File, IP_SERVER );
}
}
//---------------------------------------------Fermeture Fichiers--------------------------------------------File.close();
OldFile.close();
return 0;
}
6.
Conclusion
Les normes de communications ont été établies avec l'équipe Serveur.
On utilisera le protocole TCP/IP via une communication Socket.
L'algorithme de comparaison fonctionne.
Le relevé d'informations ordonnées fonctionne.
Le transfert du relevé fonctionne.
L'exécution automatique du script au démarrage fonctionne.
A travailler:
Masques de sous reseaux
Securisation de la communication
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page19/20
BTS IRIS 2 – Informatique et Reseaux pour l'Industrie et les Services techniques
E-6 PROJET INFORMATIQUE
Revue n1
Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n1
Page20/20
Téléchargement