Tuesday, November 15, 2011

les listes cha�n�es en langage c


Lorsque vous cr�ez un algorithme utilisant des conteneurs, il existe diff�rentes mani�res de les impl�menter, la fa�on la plus courante �tant les tableaux, que vous connaissez tous. Lorsque vous cr�ez un tableau, les �l�ments de celui-ci sont plac�s de fa�on contigu� en m�moire. Pour pouvoir le cr�er, il vous faut conna�tre sa taille. Si vous voulez supprimer un �l�ment au milieu du tableau, il vous faut recopier les �l�ments temporairement, r�-allouer de la m�moire pour le tableau, puis le remplir � partir de l'�l�ment supprim�. En bref, ce sont beaucoup de manipulations co�teuses en ressources.


Une liste cha�n�e est diff�rente dans le sens o� les �l�ments de votre liste sont r�partis dans la m�moire et reli�s entre eux par des pointeurs. Vous pouvez ajouter et enlever des �l�ments d'une liste cha�n�e � n'importe quel endroit, � n'importe quel instant, sans devoir recr�er la liste enti�re.
Nous allons essayer de voir ceci plus en d�tail sur ces sch�mas :
 
Vous avez sur ce sch�ma la repr�sentation que l'on pourrait faire d'un tableau et d'une liste cha�n�e. Chacune de ces repr�sentations poss�de ses avantages et inconv�nients. C'est lors de l'�criture de votre programmeque vous devez vous poser la question de savoir laquelle des deux m�thodes est la plus int�ressante.
  • Dans un tableau, la taille est connue, l'adresse du premier �l�ment aussi. Lorsque vous d�clarez un tableau, la variable contiendra l'adresse du premier �l�ment de votre tableau.
    Comme le stockage est contigu, et la taille de chacun des �l�ments connue, il est possible d'atteindre directement la case i d'un tableau.
  • Pour d�clarer un tableau, il faut conna�tre sa taille.
  • Pour supprimer ou ajouter un �l�ment � un tableau, il faut cr�er un nouveau tableau et supprimer l'ancien. Ce n'est en g�n�ral pas visible par l'utilisateur, mais c'est ce que realloc va souvent faire. L'adresse du premier �l�ment d'un tableau peut changer apr�s un realloc, ce qui est tout � fait logique puisque realloc n'aura pas forcement la possibilit� de trouver en m�moire la place n�cessaire et contigu� pour allouer votre nouveau tableau. realloc va donc chercher une place suffisante, recopier votre tableau, et supprimer l'ancien.
  • Dans une liste cha�n�e, la taille est inconnue au d�part, la liste peut avoir autant d'�l�ments que votre m�moire le permet.
    Il est en revanche impossible d'acc�der directement � l'�l�ment i de la liste cha�n�e.
    Pour ce faire, il vous faudra traverser les i-1 �l�ments pr�c�dents de la liste.
  • Pour d�clarer une liste cha�n�e, il suffit de cr�er le pointeur qui va pointer sur le premier �l�ment de votre liste cha�n�e, aucune taille n'est donc � sp�cifier.
  • Il est possible d'ajouter, de supprimer, d'intervertir des �l�ments d'un liste cha�n�e sans avoir � recr�er la liste en entier, mais en manipulant simplement leurs pointeurs.
Chaque �l�ment d'une liste cha�n�e est compos� de deux parties :
  • la valeur que vous voulez stocker,
  • l'adresse de l'�l�ment suivant, s'il existe.
    S'il n'y a plus d'�l�ment suivant, alors l'adresse sera NULL, et d�signera le bout de la cha�ne.
    Voil� deux sch�mas pour expliquer comment se passent l'ajout et la suppression d'un �l�ment d'une liste cha�n�e. Remarquez le symbole en bout de cha�ne qui signifie que l'adresse de l'�l�ment suivant ne pointe sur rien, c'est-�-dire sur NULL.
D�claration en C d'une liste cha�n�e :
typedef struct n{

int info ;
struct n* suivant ;
} NOEUD ;
On cr�e le type NOEUD qui est une structure contenant un entier (info) et un pointeursur �l�ment (suivant), qui contiendra l'adresse de noeud suivant. 

Manipuler les listes cha�n�es:

Initialiser une liste cha�n�e

Initialiser une liste cha�n�e:

NOEUD* initialiser(){
return NULL ;
}
void main(){
NOEUD* ptrNoeud ;
ptrNoeud = initialiser() ;
}

Initialiser une liste cha�n�e avec un noeud factice au d�but:

NOEUD* initialiser(){
NOEUD* ptrNoeud ;
ptrNoeud = (NOEUD*)malloc( sizeof( NOEUD ) ) ;
if( ptrNoeud != NULL ){
ptrNoeud->suivant = NULL ;
}
return ptrNoeud ;
}

void main(){
NOEUD* debut ;
debut = initialiser() ;
}

Initialiser une liste cha�n�e avec un noeud factice au d�but et � la fin:

NOEUD* initialiser(){
NOEUD* z, *debut ;
z = (NOEUD*)malloc( sizeof( NOEUD ) ) ;
if( z != NULL ){
z->suivant = z ;
debut = (NOEUD*)malloc( sizeof( NOEUD ) ) ;
if( debut != NULL ){
debut->suivant = z ;
}
}
return debut ;
}

void main(){
NOEUD* debut ;
debut = initialiser() ;
}

Ins�rer dans une liste cha�n�e

Ins�rer dans une liste cha�n�e avec un argument de type pointeur:
 

NOEUD* insererEnTete( NOEUD* debut, int i ){
NOEUD* nouveau ;
nouveau = (NOEUD*)malloc( sizeof( NOEUD ) ) ;
if( nouveau != NULL ){
nouveau->suivant = debut ;
nouveau->info = i ;
}
return nouveau ;
}

void main(){
NOEUD* debut ;
debut = initialiser() ;
debut = insererEnTete( debut, 20 ) ;
}


Ins�rer dans une liste cha�n�e avec un argument de type pointeur de pointeur :

void main(){
NOEUD* debut ;
int res ;
debut = initialiser() ;
res = insererEnTete(&debut, 20 ) ;
}

int insererEnTete(NOEUD**,debut, int i ){
NOEUD* nouveau ;
nouveau = (NOEUD*)malloc( sizeof( NOEUD ) ) ;
if( nouveau != NULL ){
nouveau->suivant =*debut;
nouveau->info = i ;
*debut= nouveau ;
return 1 ;
} else {
return 0 ;}
}

Ins�rer dans une liste cha�n�e avec un n�ud factice au d�but :

int insererEnTete( NOEUD* debut, int i ){
NOEUD* nouveau ;
nouveau = (NOEUD*)malloc( sizeof( NOEUD ) ) ;
if( nouveau != NULL ){
nouveau->suivant = debut->suivant ;
nouveau->info = i ;
debut->suivant = nouveau ;
return 1 ;
} else {
return 0 ;
}
}

void main(){
NOEUD* debut ;
int res ;
debut = initialiser() ;
res = insererEnTete( debut, 20 ) ;
}

Ins�rer dans une liste cha�n�e avec un n�ud factice au d�but et � la fin :

int insererEnTete( NOEUD* debut, int i ){
NOEUD* nouveau ;
nouveau = (NOEUD*)malloc( sizeof( NOEUD ) ) ;
if( nouveau != NULL ){
nouveau->suivant = debut->suivant ;
nouveau->info = i ;
debut->suivant = nouveau ;
return 1 ;
} else {
return 0 ;
}
}

Rechercher dans une liste cha�n�e

Rechercher un �l�ment :

Noeud* recherchePrecedent( Noeud* debut, int i ){
while( debut!=NULL && debut->info!=i ){ /*tant que info du suivant � i*/
debut = debut ->suivant ; /*continuer la recherche*/
}
return debut ;
}

Rechercher un �l�ment dans un liste ayant un noeud factice � la fin :
Noeud* recherchePrecedent( Noeud* debut, int i ){
while( debut->info != i ){ /*tant que info du suivant � i*/
debut = debut ->suivant ; /*continuer la recherche*/
}
return debut ;
}




Friday, November 11, 2011

L'installation et la configuration du DNS sous fedora (distribution LINUX)


Le Domain Name System (ou DNS, syst�me de noms de domaine) est un service permettant d'�tablir une correspondance entre une adresse IP et un nom de domaine et, plus g�n�ralement, de trouver une information � partir d'un  nom de domaine . Il fut cr�e en 1983 par Paul Mockpetris.
Avant le DNS, la r�solution d'un nom sur Internet devait se faire gr�ce � un fichier texte appel� HOSTS.TXT maintenu par le NIC(Network Information Center) du Stanford Research Institute (SRI) et recopi� sur chaque ordinateur par transfert de fichier.

Le syst�me DNS contient :
  • Un espace de noms hi�rarchique permettant de garantir l'unicit� d'un nom dans une structure arborescente comme le syst�me de fichier d'UNIX.
  • Un syst�mes de serveurs distribu�s permettant de rendre disponible l'espace de noms.
  • Un syst�me de clients permettant de r�soudre les noms de domaines, c'est � dire demander au serveur le nom d'une IP ou l'IP d'un nom.
Installation et configuration DNS:

Chaque �tape sera li�e avec la commande linux correspondante : 
1) V�rification d'existence du Package :  rpm _qa bind bind-utils
2) Installation du Package : yum -y install bind bind-utils

Maintenant place � la configuration :
1) Installation du Package : vim /etc/named.conf.
Dans ce fichier de configuration on doit d�clarer les zones qui sont servies par le DNS.
Le d�tail de chaque zone se trouve dans un fichier s�par� .
Ci dessous le contenu du fichier de configuration /etc/named.conf.





Configuration de la zone directe :

Le fichier de configuration est le suivant : vim /var/named/3isi.iga.lan
La configuration de ce fichier est la suivante : 
Configuration de la zone inverse :

Le fichier de configuration est le suivant : vim /var/named/2.0.10.db
La configuration de ce fichier est la suivante : 

La configuration est � pr�sent termin�e. Il ne reste qu'a lancer le d�mon named.

Test de r�solution directe:

Test de r�solution inverse:

Conclusion:

Le service DNS et malgr� ses failles de s�curit� intrins�ques reste un service incontournable et irrempla�able afin de garantir le lien @IP - Nom d'h�te au sein d'un r�seau qui peut s'�tendre sans influencer en aucun cas sur le fonctionnement du DNS. 


L'installation et la configuration de FTP sous Fedora (distribution Linux)



Dans un r�seau, le transfert de fichiers d�un ordinateur � un autre se pratique couramment. Bien qu�il existe plusieurs protocoles de transfert bas�s sur TCP/IP, ftp (File Transfert Protocol) est certainement le plus utilis�.
Le protocole FTP est un protocole tr�s utilis� pour le transfert de fichiers (texte, image, son, document format�, etc) sur Internet ou bien un serveur d'un Intranet.



Il utilise un mod�le classique Client/Serveur et deux ports pour la connexion.
-          Le port num�ro 21/TCP pour les commandes FTP
-          Le port num�ro 20/TCP pour le transfert de donn�es.

Le r�le de FTP :

-          Permettre un partage de fichiers entre machines distantes.
-          Permettre une ind�pendance aux syst�mes de fichiers des machines clientes et serveur.
-          Permettre de transf�rer des donn�es de mani�re efficace.

Type de connexions :

Le protocole utilise deux types de connexions TCP:

-          Une connexion de contr�le initialis�e par le client, vers le serveur.
-          Une connexion de donn�es initialis�e par le client ou le serveur.

Les modes de fonctionnement FTP :

-          Le Mode Actif.
-          Le Mode Passif.


Mode Actif

-          C'est le mode par d�faut des clients FTP.
-          �tablissement d�une session TCP sur le port 21 du serveur "control Channel".
-          �tablissement d�une session TCP sur le port Source 20 du serveur vers un port dynamique du client "data Channel".

Inconv�nients de mode actif :

Ce mode ne peut pas passer par un NAT car il n�cessite une connexion entrante vers la machine client. 


Mode passif :

-          Il faut garder en m�moire que le mode passif est conseill� � partir du moment ou les clients peuvent se trouver derri�re un Firewall/NAT.
-          En effet dans ce mode, toutes les initialisions de sessions TCP se font � partir du client.
-          Comme pour le FTPactif, le client �tabli une premi�re session TCP sur le port 21 (FTP) du serveur ("control channel").
-          Une fois la session �tablie et l'authentification FTP accept�e, on demande au serveur de se mettre en attente de session TCP.
-          Alors le client peut �tablir une seconde session TCP sur un port dynamique vers le serveur ("data channel").
-          Le num�ro de port dynamique est transmis du serveur vers le client.

La variante de FTP :

FTPS

-          La variante de FTPprot�g�e par les protocoles SSL ou TLS (SSL �tant le pr�d�cesseur de TLS).
-          Il permet au visiteur de v�rifier l'identit� du serveur auquel il acc�de gr�ce � un certificat d'authentification.
-          Il permet �galement de chiffrer la communication.


FTP avec chiffrement SSL implicite:

-          La connexion au serveur se fait sur le port 990 qui est le port de commande et sur lequel la n�gociation SSLs'effectue.
-          Le port de donn�es est le 989 et est lui aussi chiffr�.
-          Cette approche est semblable au fonctionnement du HTTPS d�crit dans la RFC 2818
-           
FTP avec chiffrement SSL ou TLS explicite :

-          La connexion s'effectue sur le port 21, le port de commande FTP standard, et la commande "AUTH SSL" ou "AUTH TLS-P" demande au serveur de chiffrer le transfert de commande et de donn�es.

Le serveur  vsftpd :

vsftpd est un serveur FTP pour les syst�mes d'exploitation de type UNIX et il fonctionne sur des plates-formes telles que Linux, *BSD, Solaris, HP-UX et IRIX. Il poss�de de nombreuses caract�ristiques qui manquent sur les autres serveurs FTP, comme:
-          tr�s haut niveau de s�curit�
-          limitation de la bande passante
-          bonne ajustabilit�
-          possibilit� de d�finir des utilisateurs virtuels
-          support IPnG : IP New Generation.
-          performance meilleure que la moyenne
-          haute vitesse

Installation et & configuration

1-V�rification d�existence du package    :   Rpm-q vsftpd
2-Installation du package     : Yum -y install vsftpd
3-�dition du fichier de configuration       : vi/etc/vsftpd/vsftpd.conf








Conclusion :

Malgr� les failles de s�curit� du FTP, il reste toujours un protocole incontournable actuellement dans les r�seaux informatiques et les t�l�communications parce que les clients FTPsont une partie de tous les syst�mes d'exploitation et les navigateurs Web.
Pour plus de s�curit�, Il existe deux protocoles qui proposent une alternative s�curis�e au transfert de fichiers par FTP:

SFTP: SSH File Transfer Protocol(standard SSH-2)
SCP : Secure Copy Protocol(standard SSH-1)