Réseaux avancés : interconnexion et TCP/IP

1 Les réseaux locaux
1.1 Pré-requis (Ethernet)
    

La norme ISO 8802.3 Exemple de fonctionnement Bits de brouillage L'adressage Format de la trame

1.2 Construire un réseau local
      

Les types de relais classiques Démocratisation des commutateurs Le Spanning Tree Les réseaux virtuels Les commutateurs ATM Structure de la cellule ATM Routage dans un nuage ATM

1.3 Configuration IP
     

Hypothése de travail Les protocoles d'Internet L'adressage IP Exemple d'adresse Résolution d'adresse (DHCP) Paquet DHCP

1.4 La communication dans les réseaux locaux
   

Principe de la résolution d'adresse Résolution d'adresse Ethernet Classical IP sur ATM Émulation LAN sur ATM

1.5 Le routage entre réseaux locaux
        

Les classes d'adresses IP Notion de sous-réseaux Principes du routage IP Exemple de table de routage Exemple de route par défaut Principe de la table de routage Introduction d'une stratégie de routage Exemple de routage de sous-réseaux Plan du réseau de l'UVSQ

2 Protocoles TCP/IP
2.1 Protocole réseau IP

 

Format des paquets IP Fragmentation des paquets

2.2 Protocole de contrôle ICMP
   

Format des paquets ICMP Gestion de congestion Gestion d'erreurs de routage Utilitaires basés sur ICMP

2.3 Protocole de transport UDP
   

Adressage UDP Les caractéristiques d'UDP Format des datagrammes Exemple de datagramme

2.4 Protocole de transport TCP
       

Adressage TCP Les caractéristiques de TCP Format des datagrammes Options TCP Fiabilité Adaptabilité Quelques types d'attaques Exemple de datagramme

3 Programmation réseau : les sockets
3.1 Généralité sur les sockets
     

Présentation Caractéristiques des sockets Les familles de sockets Les modes de connexion Les adressages Les adressages

3.2 Primitives communes
 

Création d'une socket Contrôle d'une socket

3.3 Primitives pour le mode connecté
    

Schéma de principe Primitives pour le serveur Primitive pour le client Exemple de serveur Exemple de client

3.4 Primitives pour le mode non connecté

Schéma de principe

  

Primitives de communication Exemple de serveur Exemple de client

3.5 Fonctions de bibliothèque
    

Obtention des adresses IP (fonctions) Trouver l'adresse de socket Numéros de ports Numéros de protocoles Exemples de résolution

3.6 Le super-serveur Unix
   

Définition d'un démon Le super-serveur d'Unix Schéma de fonctionnement Exemples de serveurs

A Annexes
A.1 Démonstrations
     

Construire un réseau local Configuration IP de base La communication dans les réseaux locaux Le routage entre réseaux locaux Programmation réseau Protocoles TCP/IP

A.2 Programmation en Bourne Shell
 

Serveur Web en Bourne Shell Exemple de page Web

A.3 Sources pour RPC
   

Makefile pour le serveur et le client RPC Définition des RPC Fichier C du serveur Fichier C du client

This document was translated from LATEX by HEVEA and HACHA.

o pour les 10 premiers essais max=2n-1 . Ce décalage est la tranche de temps d'Ethernet. o émettre la trame en attente .1. o arrêter l'émission si collision .000 km/s . o taille minimale la trame T=64 octets . Principe de la méthode : o vérifier que le bus est libre .1 Les réseaux locaux 1.1.1 Pré-requis (Ethernet) 1. 1. o tirage aléatoire entre 0 et max unités . .3    Utilise la méthode CSMA/CD persistant .1 La norme ISO 8802. o après 16 essais la trame est jetée.1. Calcul de la taille maximal du câble : o vitesse du signal vpropagation=200. o ré-émettre après un temps aléatoire.2 µs .3 Bits de brouillage  Décalage dans la détection de collision :    Décalage temporel maximal : 2× tpropagation. Calcul du temps avant ré-émission : o l'unité de temps est 51. o ensuite max est fixé à 1023 .2 Exemple de fonctionnement 1.

1 Les types de relais classiques  Les répéteurs (couche physique) : .5 Format de la trame 1.2 Construire un réseau local 1. soit environ 5 km (en pratique 2. longueur maximale du câble l .03.04 Digital  Adresse de diffusion ff:ff:ff:ff:ff:ff 1.4 L'adressage  Adresse sur 6 octets 08:00:20:10:E5:C5  Adresse unique liée au matériel préfixe constructeur 00:00:1B Novell 10:00:5A IBM 08:00:09 Hewlett Packard AA:00:00.2.5 km). 1.o o o débit du médium d=10 Mbit/s .1. équation reliant les termes : T 2 o o l v propagatio n d longueur maximale du médium l=vpropag× T/2d.1.

o TCP/IP => SMB (microsoft) . Les ponts (couche liaison) :  Les routeurs (couche réseau)  Les convertisseurs (couches supérieures) o TCP/IP => SNA (ibm) .2.2 Démocratisation des commutateurs   Commutateur <=> pont avec plus de 2 ports. Étapes de l'évolution des réseaux : o Un réseau local à diffusion : o Vers des réseaux segmentés : . o TCP/IP => IPX (netware) . 1. o TCP/IP => AppleTalk (apple) .

2. la commutation totale:   Trois méthodes de relais : o Cut Through (Fast Forward) .o Le but. Techniques de commutation : 1.3 Le Spanning Tree  Liens redondants pour la robustesse : . o Store and Forward . o Fragment Free (64 octets).

.. o messages BPDU échangés entre éléments (Bridge Protocol Data Units).  . Eviter les doublons dans les réseaux . élection d'un port racine (le plus proche de l'élément racine) : . Grandes lignes de l'algorithme : o Election d'un élément racine (plus petit identifiant) : o Par élément. o un algorithme itératif pour casser les cycles... mais surtout éviter les boucles.   Principe de fonctionnement du Spanning Tree : o un identifiant associé à chaque élément.

4 Les réseaux virtuels  Concept de réseaux virtuels (VLAN) :    Encapsulation des trames (ISL) ou ajout de champs dans la trame. adresses MAC ou adresses IP. o 1.2. Définition des VLAN par ports. Importance du choix de l'élément racine. élection d'un élément priviligié :  Les port non marqués sont désactivés (uniquement réception des BPDU).o Par segment. Communication inter-VLAN par routeur. .

 STS-48 2.7 Routage dans un nuage ATM  Phase de création d'un circuit virtuel : .  indique la QoS désirée...  .2. Gestion de la congestion (et de la QoS) : o le champ Contrôle de flux :  à l'interface avec l'utilisateur . Technologie utilisée dans les réseaux locaux.. 1.5 Les commutateurs ATM        ATM = Asynchronous Transfert Mode. Couche physique : o paire torsadée (25 Mbit/s) o fibre optique (Synchronous Optical NETwork) :  STS-3c 155 Mbit/s . Mode connecté (circuits virtuels). de la voix. o le bit Priorité .6 Structure de la cellule ATM  Format de la trame :   Identification des circuits virtuels : o VCI (Virtual Channel Identification) . 1..  STS-12 622 Mbit/s . et commutateur surchargé. Transport des données. . o le champ Type :  cellule utilisateur ou de contrôle .. o VPI (Virtual Path Identification) ...  indique la rencontre de congestion. Temps de commutation de l'ordre de la ms.2. o un VPI regroupe plusieurs VCI . o commutation possible au niveau VPI. Commutation de cellules (53 octets).4 Gbit/s.2.  destruction de cellule si à 1 .

 Des tables au niveau de chaque commutateur :   Cellules livrées dans l'ordre (perte possible) Deux types de commutateurs : 1. Les protocoles sont encapsulés : .3.1 Hypothése de travail   Une hypothèse : utilisation d'Ethernet.3 Configuration IP 1.

48.4 Exemple d'adresse      Adresse de oleron.255.48. o un numéro de machine. .2 Les protocoles d'Internet Les protocoles liés à Internet 1.0.64. o les bits machine à un => la diffusion.3.fr : 0xC1304027. Masque de réseau : 255.3. Adresse usuelle : 193.0. Adresse de diffusion : 193.39. Quelques codes Ethernet de protocoles : 0600 XNS 0800 IP 0805 X.255.64. Adresse de réseau : 193.3.255.48.64.25 0806 ARP 6004 LAT 8035 RARP 8037 IPX 809B EtherTalk 80F3 AARP 814C SNMP 86DD IPv6 1.3 L'adressage IP      Au moins une adresse par interface. . L'adresse est la juxtaposition de : o une adresse de réseau . Adresses sur 32 bits. Notation quadruplet pointé.eudil. Deux adresses spéciales : o les bits machine à zéro => le réseau .

1. l'adresse de diffusion ... . o Le masque réseau.. . Base de données de paramètres réseau : o indexée par un identificateur unique ... o micro à accès Internet . o DHCP client sur le port UDP 68. o exemple : l'adresse Ethernet. Assignation automatique d'adresses réseau : o adresse assignée pour une période fixée . BOOTP et DHCP utilisent IP ! o DHCP serveur sur le port UDP 67 . BOOTstrap Protocol et son successeur . TTL.  efficacité : court-circuiter ARP. o assigner toujours la même adresse. o imprimantes réseau .. o terminaux X . o les paramètres MTU.5 Résolution d'adresse (DHCP)             Problème des machines amnésiques : o stations sans disque (diskless) . o DHCP non implantable sans IP.. Problème de l'oeuf et de la poule : o IP inutilisable sans l'adresse IP . Dynamic Host Configuration Protocol. Solution préconisée : o paquet DHCP diffusé sans adresse source ..3. DHCP décrit par le Request for Comments 1541. o protocole ARP inutilisable pour la réponse :  facilité : utiliser la diffusion . o les adresses de la passerelle et du DNS . si possible. Récuperer les informations réseau : o l'indispensable adresse IP . Protocole Reverse ARP (obsolète) . Dialogue entre serveurs et client DHCP : .

4. Principe : o diffusion de "qui s'appelle xx. Dépendant de la couche matériel. fonction) . Protocole ARP (Address Resolution Protocol).2 Résolution d'adresse Ethernet      Résolution dynamique : IP => Ethernet.1 Principe de la résolution d'adresse    Communiquer => connaître l'adresse physique de la cible.3.1.yy ?" . 1.6 Paquet DHCP 1. aa:bb:cc:dd:ee:ff !". Deux principes : o résolution statique (table.5 Le routage entre réseaux locaux 1. Cache des réponses ARP récentes.4. o résolution dynamique. o réponse directe "moi. Format du paquet ARP :  Exemple de dialogue ARP : .yy.zz.

o le serveur stocke les couples (AdrIP. Utilisation du serveur ATMARP : o donnée : l'adresse IP du destinataire . o LAN Emulation Client (LEC). Localisation des services : . o des contacts réguliers (20 min) . o ouverture d'une liaison avec le destinataire. o les stations contactent le serveur .AdrATM).0 : o LAN Emulation Configuration Server (LECS) .4. o ouverture d'une liaison ATM avec le serveur .4. o Broadcast and Unknown Servers (BUS) . Mise à jour de la table du serveur : o adresse ATM du serveur connue . 1. Solution : un serveur ATMARP.4 Émulation LAN sur ATM   Une pléthore de services pour LANE V2. o LAN Emulation Server (LES) . o récupération de l'adresse ATM du destinataire .3 Classical IP sur ATM     Pas de diffusion possible sur ATM.1.

 Résolution d'adresse MAC :  Envoi d'un paquet unicast : .

Classe Nb réseaux Nb hôtes A 126 16. 1110 D 224.191. Routage entre ELAN : 1.0. -. LoopBack 127.1 Les classes d'adresses IP Les classes d'adresses : Classe Préfixe Intervalle 0 A 1.777. 110 C 192. -.384 65.255.239.255.5 Le routage entre réseaux locaux 1.0.097.536 C 2.0.0. -.223.152 256 D --LoopBack 1 1 .0.216 B 16.255. -.255.5. 10 B 128.255.126.

224 .2 Notion de sous-réseaux     Les adresses IP s'épuisent.5.3 Principes du routage IP Communication entre machines non directement connectées    Nombre de répéteurs limité. o un masque réseau 255.4 Exemple de table de routage Table de routage de soleil. o et en un numéro d'hôte.5.fr .1.0 .57.5. Solution : des tables de routage. Découper le numéro de machine : o en un numéro de sous-réseau . Exemple.uvsq.255.48. Diffusion impossible sur l'Internet. la classe des serveurs de l'EUDIL : o une classe C 193. Rentabiliser les classes C. 1.255. o soit 8 sous-réseaux de 32 machines : 1.

0 193.51.5. Cas simple : o la clef est un préfixe réseau (numéro et masque). attribut ).24.  masque de réseau (m) .51.51.30 1.51.51.0 193.0 193.12 défaut 193.24.uvsq.51.1 193.  un niveau de priorité.51.24. o algorithme de choix de la route :  table de routage à trois champs :  numéro de réseau (r) . o l'attribut est l'adresse du routeur.38.51.5 Exemple de route par défaut Table de routage de soleil. Raffinement (routage Linux > 2.25.12 1.  routeur (ar) choisi si ( a & m ) = r.24.0 193. Les préfixes les plus longs sont retenus.24.24.2 193.51.24.  le type de service.2) : o la clef comporte les éléments suivants :  le préfixe réseau.6 Principe de la table de routage        Liste de paires ( clef.51. Utilisation du premier couple ( préfixe.2 193. Routage du paquet sur l'adresse destination.réseau cible routeur 193.0 193.5.fr réseau cible routeur 193.0 193.51. Sélection des préfixes réseau convenables.51.  adresse du routeur (ar).1 193. o l'attribut comporte un type : unicast .  adresse de la destination : a.24.51.38.  généralisation aux sous-réseaux. adresse).25.24.

nat : réécriture de l'adresse destination..2 Il s'agit d'une liste séquentielle de règles.. prohibit : ICMP "communication interdite". 1. o marque du paquet.5. L'action consiste à utiliser une table de routage. o l'adresse destination du paquet. Il existe des règles de types différents : unicast : utiliser la route ad hoc de la table.5.uvsq. 1.. prohibit : ICMP "communication interdite". o interface de provenance du paquet.fr . . action). unreachable : ICMP "destination non atteignable". Le sélecteur s'applique sur plusieurs éléments : o l'adresse source du paquet. nat : réécriture de l'adresse source.: route normale.. . o type de service. unreachable : ICMP "destination non atteignable". blackhole : rien.7 Introduction d'une stratégie de routage       Stratégie de routage de Linux > 2.8 Exemple de routage de sous-réseaux Table de routage de soleil. blackhole : rien. Chaque règle est une paire ( sélecteur.

255.255.0.255.255.255.1 193.51.12 0.24.9 Plan du réseau de l'UVSQ .51.0 255.24.0 255.51.réseau cible masque réseau routeur 193.51.24.24.51.255.0 193.64 255.224 193.0 193.5.0.24.2 193.0 255.51.25.255.255.24.0 0.224 193.0.30 193.38.51.30 1.51.0 193.0.51.24.

Options IP :  Exemples d'options : o routage strict . o routage lâche . TCP(6). enregistrement de route . UDP(17).2 Protocoles TCP/IP 2.1 Format des paquets IP  Type de service :   Protocoles : ICMP(1).1 Protocole réseau IP 2. .1. enregistrement d'horloge.

1.. o ecrasement mémoire sur le destinataire . on diminue la taille des paquets. o . La taille des trames est variable. . Dép.. o charge CPU pour les routeurs et le destinataire. totale Drap. o bloquage des fragments par des filtres primitifs.. o on commence par des paquets de taille maximale. original lg-ent+1000 000 0 fragment 1 lg-ent+344 001 0 fragment 2 lg-ent+328 001 344 fragment 3 lg-ent+328 000 672    Ce procédé tombe en désuétude : o perte d'un fragment => perte du paquet.2 Fragmentation des paquets     Taille des paquets IP <= 65535. Fragmentation des paquets :  Découpage à l'identique :  Puis modification de l'entête : Paquet Lg. Principe de découverte du MTU sur le chemin : o paquets envoyés avec le bit "pas de fragmentation". Attaque "Ping of Death" : o forger un fragment dépassant les 64Ko. plantage du système d'exploitation. o sur réception d'ICMP "fragmentation impossible" .... o ..2.. Les réseaux ne sont pas identiques.

Véhicule les erreurs réseau. Format général :  Types de message : Type Description 0 Réponse d'écho 3 Destination inaccessible 4 Limitation du débit de la source 5 Modification de route 8 Demande d'écho 11 Datagramme trop vieux 12 Problème de paramètre 13 Demande d'estampille de temps 14 Réponse d'estampille de temps 17 Demande de masque 18 Réponse de masque  Codes possibles pour le type 3 : Code Description 0 Réseau inaccessible 1 Machine inaccessible 2 Protocole inaccessible 3 Port inaccessible 4 Fragmentation impossible 5 Route impossible à suivre 2. Protocole encapsulé dans IP.2 Gestion de congestion  Résolution de congestion : o diversité des liens sur Internet : .1 Format des paquets ICMP     ICMP (Internet Control Messages Protocol).2.2.2 Protocole de contrôle ICMP 2.2.

o réception d'un paquet ICMP de type 11 ...3.1 Adressage UDP     IP : communication de machine à machine.. Notion de ports UDP (sur 16 bits) : . obtenir une réponse de la machine visée.2.4 Utilitaires basés sur ICMP   Utilisation d'ICMP dans ping : o envoi d'un paquet ICMP de type 8 (Echo Request) ..3 Gestion d'erreurs de routage  Redirection de paquets : o origine : une erreur de routage : (M1 route pour M2 par R1) o o le fautif est averti de son erreur .o o o un routeur peut être submergé . le paquet est ré-orienté. o (+) calcul d'un délai de propagation . Utilisation d'ICMP dans traceroute : o émission d'un paquet IP avec un TTL=0 .. o . o augmentation du Time To Live jusqu'à . o . o réception d'un paquet ICMP de type 0 (Echo Reply) . 2. émis par la 1ère passerelle du chemin .. 2. la source réduit son débit.3 Protocole de transport UDP 2..2. UDP : plusieurs points d'accès par hôte. émission du paquet Source Quench . 2. o (+) émission de plusieurs Echo Request..

3. 2.2 Les caractéristiques d'UDP UDP c'est IP offert aux utilisateurs : (+) simplicité (+) rapidité (+) robustesse (-) non fiable (-) messages non ordonnés (-) programmation complexe 2.3.4 Exemple de datagramme 2.Port Nom Description 7 echo Y a de l'écho 9 discard Trou noir 37 time Serveur de date 53 domain Serveur de noms 67 bootps Serveur d'adresses 69 tftp Transfert de fichiers 137 netbios-ns Serveur de noms NETBIOS 517 talk Utilitaire de conversation  Une queue de messages par port.3 Format des datagrammes 2.4 Protocole de transport TCP .3.

4.port cible) 2. . transferts tamponnés (performances) .2.port source) (machine cible. transfert bi-directionnel.1 Adressage TCP  Comme UDP. flux de données séquentiel .4. TCP utilise les ports : Port Nom Description 21 ftp Transfert de fichiers 23 ssh Connexion à distance sécurisée 23 telnet Connexion à distance 25 smtp Service de messagerie 80 www Explorateur hypertexte 110 pop3 Messagerie pour micros 119 nntp Groupes de discussion 6000 X11 X-Windows (version 11)  TCP est orienté connexion : (machine source. remise dans l'ordre .2 Les caractéristiques de TCP TCP est une couche transport orientée connexion :      remise des messages assurée .

2.3 Format des datagrammes 2. L'option maximum segment o format de l'option : o  o rôle : donne la taille maximum d'un segment TCP en réception. .4 Options TCP  L'option No operation o format de l'option :  rôle : aligner sur des mots.4. L'option window scale o format de l'option : o rôle : multiplicateur de la fenêtre de réception (multiplication par décalage de bits sur la gauche).4.

 Les options Selective Acknowledgment o formats des options :  o rôle : accuser réception de données hors séquence. Les options d'écho (obsolètes) o formats des options :  rôle : calculer un temps d'aller-retour.4. L'option d'estampille de temps o formats des options : o o rôle : calculer un temps d'aller-retour. 2.5 Fiabilité  Accusé de réception : o Attendre une confirmation de réception : .

o Retransmettre après un délai :  Efficacité due au fenétrage :  Une connexion concertée : .

Calcul d'un temps moyen aller-retour : 0  Temporisateurs constamment adaptés :  Prise en compte des erreurs réseau.7 Quelques types d'attaques  Attaque : prédiction de numéros de séquence : . 2. Une déconnexion concertée : 2.4.4.6 Adaptabilité   Fenêtre mobile (la cible décide).

Attaque : inondations de paquets SYN. o suppression de la queue de connexions (liste de cookies). o diminution des temporisations. 2.1 Généralité sur les sockets . Solutions : o augmentation de la taille des tampons.8 Exemple de datagramme 3 Programmation réseau : les sockets 3. o vérification adresse d'entrée / de sortie.   Solution : numéros aléatoires.4.

descripteur de fichier <=> descripteur de socket Une socket appartient à une famille. .1 Présentation     Intégration d'IP dans Unix BSD (1981). Interface de programmation «socket» (1982) : o la plus utilisée . Schéma des couches logicielles :      Représentation gros-boutiste des données : #include <netinet/in. ICQ). o nouveaux services (Web. À chaque famille un adressage.h> unsigned long int htonl(unsigned long int hostlong). Il existe d'autres interfaces : o Remote Procedure Call (NFS) . Il existe plusieurs modes de connexion. 3.3 Les familles de sockets  Détermine le protocole réseau : Protocole PF_UNIX.3.1. unsigned long int ntohl(unsigned long int netlong). o intégrée dans le noyau . PF_LOCAL Tubes nommés PF_INET Protocoles TCP et UDP PF_INET6 Protocoles IPv6 PF_APPLETALK Protocole AppleTalk PF_IPX Protocole Novell PF_X25. unsigned short int htons(unsigned short int hostshort).. Une interface semblable à celle des fichiers.2 Caractéristiques des sockets      Une interface de programmation générique. unsigned short int ntohs(unsigned short int netshort). o . o Transport Layer Interface (OSI) . IRC.1. 3..1. PF_CCITT Protocole X25 Famille  Des caractéristiques liées au protocole.

5 Les adressages  L'adressage dépend du protocole : Unix : un nom de fichier .h> et <sys/socket. SOCK_RAW .121 . o accès direct au protocole : SOCK_RAW.h>      struct sockaddr_un { unsigned short int sun_family.  Les modes courants : o mode connecté : SOCK_STREAM . Exemple : Famille PF_INET : Fichier d'inclusion <netinet/in. }. marque et champ d'utilisation .1.h>     struct sockaddr { unsigned short int sa_family.  Une structure d'adresse générique : Fichiers d'inclusion <sys/types. }. Plusieurs modes par famille : Unix : SOCK_DGRAM.h>     struct in_addr { unsigned int s_addr. 3. Exemple : Famille PF_UNIX : Fichier d'inclusion <sys/un. X25 : SOCK_SEQPACKET. SOCK_STREAM. SOCK_STREAM . .4 Les modes de connexion   Détermine la qualité de connexion.2 Primitives communes 3. unsigned char sa_data[14]. IPv6 : adresse IPv6. 3.1. IPv4 : adresse IPv4 et numéro de port .3.1. }. char sun_path[UNIX_PATH_MAX]]. numéro de port. o mode non connecté : SOCK_DGRAM . IP : SOCK_DGRAM.6 Les adressages   Une structure compatible par famille. struct sockaddr_in { unsigned short int sin_family. X25 : adresse X.

SOL_UDP). L'option est codée par option :  .h> #include <sys/socket.3 Primitives pour le mode connecté 3. o SOCK_RAW utilise ICMP.1 Création d'une socket        Réservation des ressources par socket : #include <sys/types.2.}.u6_addr16 #define s6_addr32 in6_u. struct in_addr sin_addr.h> int bind(int sockfd.SOL_TCP. o SOCK_DGRAM utilise UDP . o un port joker : 0. unsigned short int u6_addr16[8]. struct sockaddr_in6 { unsigned short int sin6_family. etc. }.h> #include <sys/socket. Le protocole doit correspondre au mode. unsigned short int sin6_port. Assignation d'une adresse par bind : #include <sys/types. unsigned int sin6_scope_id. unsigned int sin6_flowlabel. Exemple : la famille AF_INET : o SOCK_STREAM utilise TCP . Cas particulier de la famille PF_INET : o une adresse joker : INADDR_ANY . struct in6_addr sin6_addr.int mode.int length).2. unsigned char sin_zero[8].int level.u6_addr32 }. char *arguments.int option.        Retourne un descripteur de socket.2 Contrôle d'une socket       Positionnement des options d'une socket par setsockopt : #include <sys/types. o soit au niveau protocole (SOL_IP.h> #include <sys/socket. unsigned int u6_addr32[4].int number). 3. Mettre protocol à zéro 0 pour le protocole par défaut.h> int socket(int famille. #define s6_addr in6_u. } in6_u. IPIP.int protocol).h> int setsockopt(int sockfd.struct sockaddr *address. Exemple : Famille PF_INET6 : Fichier d'inclusion <netinet/in6. 3.     unsigned short int sin_port.u6_addr8 #define s6_addr16 in6_u. Niveau level de l'option : o soit au niveau socket (SOL_SOCKET) .h>                  struct in6_addr { union { unsigned char u6_addr8[16]. Coercition de l'adressage de la famille.

size représente la taille du tampon.  SO_REUSEADDR : réutilisation immédiate . o Une option au niveau SOL_TCP :  TCP_NODELAY : pas de tampon en sortie.  Attente des connexions des clients : o primitive système accept : o o o o o o #include <sys/types. l'adresse du correspondant est address .  IP_PMTU_DISCOVER : calcul du MTU minimum.int size). une nouvelle socket est retournée .  SO_SNDBUF : taille du tampon . length est utilisée en entrée et sortie.3 Primitive pour le client    Connexion au serveur.h> #include <sys/socket.h> int accept(int sockfd. Primitive système connect : #include <sys/types.  IP_TTL : durée de vie . o 3. 3.3.1 Schéma de principe 3.Quelques options au niveau SOL_SOCKET :  SO_KEEPALIVE : teste la socket . o Quelques options au niveau SOL_IP :  IP_TOS : type de service .struct sockaddr *address.int *length).2 Primitives pour le serveur  Définition du tampon des connexions : o primitive système listen : o o int listen(int sockfd.  SO_DONTROUTE : pas de routage .3.h> .3.  SO_RCVBUF : taille du tampon.

statut=bind(df. if(df<0){ perror("initialisationServeur. struct sockaddr_in adresse. adresse. int statut.int connexions) { int df. return df. if(statut<0){ perror("initialisationServeur.struct sockaddr *address.(struct sockaddr *)&adresse. adresse. exit(-1). /* Initialisation de l'ecoute */ statut=listen(df. if(statut<0) return -1.4 Exemple de serveur                                                          La fonction d'initialisation du serveur : int initialisationServeur(short int *port. /* Creation d'une socket */ df=socket(PF_INET.sin_addr.(struct sockaddr *)&adresse. if(statut<0) return -1.} } } int gestionClient(int sd){ int pid. /* Passage de la socket de dialogue a la fonction de traitement */ if(traitement(dialogue)<0){ close(ecoute).int (*traitement)(int)) { struct sockaddr_in adresse. while(1){ /* Attente d'une connexion */ dialogue=accept(ecoute.&taille). if(dialogue<0) return -1.sin_family=AF_INET. /* On recupere le numero du port utilise */ statut=getsockname(df. int dialogue. int taille=sizeof adresse.s_addr=INADDR_ANY.   #include <sys/socket. 3. } *port=ntohs(adresse.sizeof(adresse)). .SOCK_STREAM. return 0.sin_port).sin_port=htons(*port). L'adresse du serveur est dans address.socket").connexions).h> int connect(int sockfd. } /* On fixe l'adresse de la socket */ adresse. int taille=sizeof adresse. } La fonction de gestion des clients : int boucleServeur(int ecoute. exit(-1).(struct sockaddr *)&adresse.getsockname").0).int length).&taille).3.

if(df<0){ perror("connexionServeur. exit(-1). pid=fork(). /* Descripteur de la SOCKET */ /* Lecture des arguments de la commande */ analyseArguments(argc.&adresseIP).NULL).} if(pid!=0) close(sd). } La fonction principale : int main(int argc. struct in_addr adresseIP.sin_addr=adresseIP.5 Exemple de client                                La fonction de connexion au serveur : int connexionServeur(char *hote.int port) { int df.2). else{ dup2(sd.3. statut=execl(CHEMIN_PROGRAMME. dup2(sd.sin_port=htons(port).0).0).CHEMIN_PROGRAMME.socket").SOCK_STREAM. if(statut<0) return -1. else return df. /* Mise en place de la procedure de recuperation de la mort d'un fils */ signal(SIGCHLD.MAX_CONNEXIONS). /* Initialisation du serveur */ s=initialisationServeur(&port.argv).gestionClient). /* Lancement de la boucle d'ecoute */ boucleServeur(s. struct sockaddr_in adresse. /* Descripteur de la SOCKET */ . adresse. adresse.char *argv[]) { int s. } /* Connection de la socket a l'hote */ statut=nomVersAdresse(hote. dup2(sd. if(pid<0){perror("fork"). } 3. /* Creation d'une socket */ df=socket(PF_INET.(struct sockaddr *)&adresse.char *argv[]) { struct sockaddr_in adresse. } return 0.mortdefils).1). exit(-1).sin_family=AF_INET. /* Stocke le statut des primitives */ int s. } La fonction principale : int main(int argc. adresse.                             int statut. int statut.sizeof(adresse))<0) return(-1). if(connect(df. /* Adresse du serveur distant */ char statut.

                          

/* Lecture des arguments de la commande */ analyseArguments(argc,argv); /* Connection au serveur */ s=connexionServeur(machine,port); if(s<0){ fprintf(stderr,"Erreur de connexion au serveur\n"); exit(-1); } /* Boucle de communication avec le serveur */ while(1){ fd_set ens_lecture; char tampon[MAX_TAMPON]; int taille; FD_ZERO(&ens_lecture); FD_SET(0,&ens_lecture); FD_SET(s,&ens_lecture); statut=select(s+1,&ens_lecture,NULL,NULL,NULL); if(statut<0){perror("select"); exit(-1);} if(FD_ISSET(0,&ens_lecture)){ if((taille=read(0,tampon,MAX_TAMPON))<=0) break; if(write(s,tampon,taille)!=taille) break; } if(FD_ISSET(s,&ens_lecture)){ if((taille=read(s,tampon,MAX_TAMPON))<=0) break; if(write(1,tampon,taille)!=taille) break; } } }

3.4 Primitives pour le mode non connecté

3.4.1 Schéma de principe

3.4.2 Primitives de communication

Envoi d'un message (datagramme) par sendto : o le prototype :
o #include <sys/types.h>

retourne le nombre d'octets envoyés ; le message est contenu dans message ; la longueur du message est size ; l'adresse cible est dans address ; le drapeau flag contrôle les options :  MSG_OOB : messages urgents ;  MSG_DONTROUTE : interdit le routage. Réception d'un message par recvfrom : o le prototype :
o o o o o o o o o #include <sys/types.h> #include <sys/socket.h> int recvfrom(int sockfd,char *message,int size,int flag, struct sockaddr *address,int *length);

o o o o o o o o

#include <sys/socket.h> int sendto(int sockfd,char *message,int size,int flag, struct sockaddr *address,int length);

retourne le nombre d'octets reçus ; le message est stocké dans message ; la taille du tampon message est size ; l'adresse source est dans *address ; le drapeau flag contrôle les options :

MSG_OOB : messages urgents ; MSG_PEEK : le système garde le message. MSG_WAITALL : remplit le tampon. 

Des primitives de dialogue plus concises : o les prototypes :
o o o o o o o o o o o o o o o o o o o o #include <sys/types.h> #include <sys/socket.h> int send(int sockfd,char *message,int size,int flag); int recv(int s,char *message,int size,int flag); Utilisable en mode SOCK_DGRAM après un connect. Utiles en mode SOCK_STREAM pour les messages urgents : static void sig_urg(int signo){ int n; char c; if((n=recv(servfd,&c,1,MSG_OOB))<0){ perror("recv error"); exit(-1); } ... } void main(void){ ... signal(SIGURG,sig_urg); ... }

3.4.3 Exemple de serveur
int main(int argc,char *argv[]) { int s; /* Descripteur de la SOCKET */ struct sockaddr_in adresseServeur; /* Structure adresse du serveur */ int taille; int statut; /* Lecture des arguments de la commande */ analyseArguments(argc,argv); /* Creation de la SOCKET d'ecoute du serveur */ s=socket(AF_INET,SOCK_DGRAM,0);

if(s<0) {perror("socket"); exit(-1);} /* Preparation de la structure adresse du serveur */ adresseServeur.sin_family=AF_INET; adresseServeur.sin_addr.s_addr=INADDR_ANY; adresseServeur.sin_port=htons(port); /* Installation du serveur a la bonne adresse */ statut=bind(s,(struct sockaddr *)&adresseServeur,sizeof adresseServeur); if(statut<0) {perror("bind"); exit(-1);} /* On recupere le numero du port utilise */ statut=getsockname(s,(struct sockaddr *)&adresseServeur,&taille); if(statut<0){perror("getsockname"); exit(-1); } port=ntohs(adresseServeur.sin_port); fprintf(stdout,"Le serveur est sur le port %d.\n",port); /* Attente de la connexion d'un client puis dialogue avec ce client */ while(1){ struct sockaddr_in adresseClient; /* Structure adresse du client */ int taille=sizeof adresseClient; /* Taille de cette adresse */ char tampon1[MAX_TAMPON]; char tampon2[MAX_TAMPON]; int nboctets; nboctets=recvfrom(s,tampon1,MAX_TAMPON-1,0, (struct sockaddr *)&adresseClient, &taille); tampon1[nboctets]='\0'; sprintf(tampon2,"%s%s",PREFIXE,tampon1); sendto(s,tampon2,strlen(tampon2),0, (struct sockaddr *)&adresseClient,taille); } }

3.4.4 Exemple de client
int main(int argc,char *argv[]) { int s; /* Descripteur de SOCKET */ struct sockaddr_in adresse; /* Adresse de la SOCKET du serveur */ int statut; /* Stocke le statut des commandes */ /* Analyse des arguments */ analyseArguments(argc,argv); /* Creation de la SOCKET du client */ s=socket(AF_INET,SOCK_DGRAM,0); if(s<0){perror("socket"); exit(-1);} /* Preparation de la structure adresse du serveur */ nomVersAdresse(machine,&adresse.sin_addr); adresse.sin_family=AF_INET; adresse.sin_port=htons(port); /* Dialogue avec le serveur */ { char tampon[MAX_TAMPON]; int taille; fgets(tampon,MAX_TAMPON,stdin); sendto(s,tampon,strlen(tampon),0,(struct sockaddr *)&adresse,sizeof adresse); taille=recvfrom(s,tampon,MAX_TAMPON,0,NULL,NULL); fputs(tampon,stdout); } /* Fermeture de la SOCKET de dialogue */ close(s); exit(0);

h> #include <arpa/inet. L'adresse peut être obtenue par inet_aton : #include <sys/socket. On souhaite connaitre l'adresse de l'émetteur. L'adresse address doit être en binaire . L'adresse IP et le port se retrouvent dans address.int length. #define h_addr h_addr_list[0] Trouver une machine à partir de l'adresse par gethostbyaddr : #include <netdb.} 3.h> int inet_aton(const char *string. o un protocole (UDP ou TCP).1 Obtention des adresses IP (fonctions)                        Trouver une machine à partir du nom par gethostbyname : #include <netdb.h> #include <netinet/in. Exemple de fichier /etc/services : smtp 25/tcp mail time 37/tcp timserver domain 53/udp nameserver nntp 119/tcp readnews printer 515/tcp spooler talk 517/udp . /* liste des surnoms */ int h_addrtype. 3. Il faut utiliser la fonction getpeername : #include <sys/socket. /* nom officiel */ char **h_aliases. o port/proto : le type de port (UDP ou TCP) . Les champs d'une ligne de ce fichier : o service : nom officiel du service .5.h> struct hostent *gethostbyname(char *name). 3.5. int length).5. /* taille des adresses */ char **h_addr_list. struct in_addr *address).5 Fonctions de bibliothèque 3.2 Trouver l'adresse de socket        On ne connait parfois que le descripteur de socket. Fichier de description : /etc/services. En pratique le type type est AF_INET .3 Numéros de ports           Un port de transport est défini par : o un numéro (sur 16 bits) .h> int getpeername(int sockfd.h> struct hostent *gethostbyaddr(char *address. /* liste des adresses */ }. struct sockaddr *address.int type). Très utile pour les serveurs sous le super-démon Unix. /* type de l'adressage */ int h_length. Tout est dans la structure hostent : struct hostent { char *h_name. o synonymes : surnoms du service.

/* liste des surnoms */ int p_proto. 3. o numéro : numéro du protocole .char *nom) { struct sockaddr_in adresse.5. /* On cherche l'adresse via le DNS */ h=gethostbyname(hote). /* numero de port */ char *s_proto.h> struct servent *getservbyname(char *name. /* protocole */ }.          Trouver le numéro de port d'un service par getservbyname : #include <netdb.struct in_addr *adresse) { struct hostent *h. /* nom officiel */ char **p_aliases. if(h!=NULL) memcpy(adresse.&taille). /* liste de surnoms */ int s_port.h->h_length).getpeername").h->h_addr_list[0]. exit(-1). } . int statut. 3. /* Recupere l'adresse de la socket distante */ statut=getpeername(ds. /* numero de protocole */ }. } Résolution d'adresse de machine (en fonction du descripteur) : int socketVersNom(int ds.5 Exemples de résolution                           Résolution d'adresse de machine (en fonction du nom) : int nomVersAdresse(char *hote. return 0.5. if(statut<0){ perror("socketVersNom. Les champs d'une ligne de ce fichier : o protocole : nom officiel du protocole . La réponse est une structure servent : struct servent { char *s_name. struct hostent *machine. int taille=sizeof(adresse). /* nom officiel */ char **s_aliases. else return -1.char *protocol). Exemple de fichier /etc/protocols : ip 0 IP icmp 1 ICMP tcp 6 TCP udp 17 UDP Trouver le numéro d'un protocole par getprotobyname : #include <netdb. La réponse est une structure protoent : struct protoent { char *p_name.(struct sockaddr *)&adresse. o synonymes : surnoms du protocole.h> struct protoent *getprotobyname(char *name).4 Numéros de protocoles                 Fichier de définitions : /etc/protocols.

6 Le super-serveur Unix 3. sizeof(adresse.syslog.2) : fermer les descripteurs inutiles . if(machine==NULL){ strcpy(nom. o openlog. o un fichier de configuration inetd. o Processus du super-utilisateur .conf . return 0. } } Résolution de nom de service : int cherchePortTCP(char *nom) { struct servent *pinfo.6. int noclose). return ntohs(pinfo->s_port). o chdir("/") : évite d'empêcher un démontage .2 Le super-serveur d'Unix   Problèmes avec les serveurs : o phase d'initialisation identique .1 Définition d'un démon     Caractéristiques : o Processus serveur ordinaire . erreurs.sin_addr). o Processus fils du processus init . } 3. pinfo=getservbyname(nom. o umask(022) : pour créer des fichiers non modifiables .sin_addr)). o setsid() : pour se détacher du terminal courant .1. soit stream protocole voir /etc/protocols traitement soit nowait.6. Le super-serveur inetd : o résout les problèmes mais ralentit le traitement . return -1. Nouvelle fonction (4 premières étapes) : #include <unistd. o Même durée de vie que le système. Réalisation : o fork() : pour se lancer en tâche de fond .inet_ntoa(adresse. 3. } else{ strcpy(nom.AF_INET).                     /* Recupere le nom de la machine */ machine=gethostbyaddr((const char *)&(adresse. o une ligne contient les champs : voir /etc/services mode soit dgram.sin_addr). o appropriation de ressources systèmes.closelog : avertissements. o close(0.machine->h_name).h> int daemon (int nochdir."tcp"). soit wait user généralement root service .

conf : ftp stream tcp nowait root /usr/sbin/wu.pop3d in.pop3d 3.telnetd talk dgram udp wait root /usr/sbin/in.ftpd wu.6.ftpd telnet stream tcp nowait root /usr/sbin/in.ntalkd pop3 stream tcp nowait root /usr/sbin/in.3 Schéma de fonctionnement  Mode connecté :  Mode non connecté : .exécutable chemin complet du serveur arguments arguments de l'exécutable o o o o o exemple du fichier inetd.ntalkd in.telnetd in.

closelog(). } Serveur UDP utilisant inetd : int main(int argc. envoiFichier(url. /* Envoi eventuel du fichier demande */ url=requeteValide(stdin). } /* Fermeture de la session SYSLOG */ syslog(LOG_INFO. printf("%s\nContent-Type: %s\n\n". } else{ printf("%s\n".6.url).url). exit(0)."Echec. requete invalide ".stdout). fichier %s envoye"."Succes.type).4 Exemples de serveurs                                    Serveur TCP utilisant inetd : int main(int argc.char **argv) { char tampon[MAX_TAMPON].3.LOG_DAEMON). /* Stocke le message de la sonde */ .REP_ERREUR).char **argv) { char *url."Fin du traitement de la requete"). syslog(LOG_INFO. syslog(LOG_INFO."Traitement d'une requete").REP_SUCCES. /* Nom du fichier demande */ /* Ouverture de la session SYSLOG */ openlog(NOM_SERVEUR.LOG_PID. syslog(LOG_INFO. if(url!=NULL){ char *type=typeDeFichier(url).

LOG_PID.0254."Sonde en provenance de %s".sin_addr).b452.7310 Dynamic 8 FastEthernet0/1 .LOG_DAEMON).d420 Dynamic 8 FastEthernet0/1 0005.2442 Dynamic 8 FastEthernet0/1 0010.-------------------0000. Fa0/24 4 STUDENTS active Fa0/9. /* Taille de cette adresse */ /* Ouverture de la session SYSLOG */ openlog(NOM_SERVEUR.texte). syslog(LOG_INFO."Traitement d'un paquet-sonde"). Fa0/8. /* Fermeture de la session SYSLOG */ syslog(LOG_INFO. sendto(0.ECHO_PREFIXE.tampon.tampon).------------------------------1 default active Fa0/6. { char *texte=inet_ntoa(adresse. /* On retourne les donnees avec un prefixe */ longueur=recvfrom(0.8873 Dynamic 8 FastEthernet0/1 0000. Fa0/10.strlen(reponse). tampon[longueur]='\0'. /* Stocke la reponse a la sonde */ struct sockaddr_in adresse. exit(0)."%s%s"..taille).4bce.0. .e899. /* Adresse de socket de l'emetteur */ int taille=sizeof(adresse).MAX_TAMPON-1.1968 Dynamic 8 FastEthernet0/1 0000. Fa0/7. } A Annexes A."Fin du traitement").4b5b.-----------. Fa0/23.95c1 Dynamic 11 FastEthernet0/1 0000.1 Démonstrations A.e8ee.--------. closelog(). syslog(LOG_INFO.80e2 Dynamic 7 FastEthernet0/1 0000. /* Longueur du message */ char reponse[MAX_TAMPON].b45c.0276.8557 Dynamic 3 FastEthernet0/1 0010.1.reponse. Fa0/20 2 SERVERS active 3 STAFF active Fa0/22.1 Construire un réseau local                               Adresses apprises sur un commutateur : RG20-4# show mac-address-table Dynamic Address Count: 142 Secure Address (User-defined) Count: 0 Static Address (User-defined) Count: 0 System Self Address Count: 50 Total MAC addresses: 192 Maximum MAC addreses: 8192 Non-static Address Table: Destination Address Address Type VLAN Destination Port ------------------.---.e1cf Dynamic 3 FastEthernet0/1 0000. Fa0/11.0.-------------------------------.9f41 Dynamic 8 FastEthernet0/1 0005..9431.b438.&adresse. Définition des VLANS : RG20-2# show vlan VLAN Name Status Ports ---. Fa0/12. } sprintf(reponse.&adresse.&taille).                         int longueur.

topology change 0. Fa0/18. Fa0/21 active active active Spanning tree : RG20-2# show spanning-tree vlan 4 Spanning tree 4 is executing the IEEE compatible Spanning Tree protocol Bridge Identifier has priority 32768.588f.26. notification 2 hello 2. Tables de routage d'un commutateur ATM : 8540# show atm vc .588f. address 00d0. RG20-2# show running-config Current configuration: ! version 11..2 service password-encryption ! hostname RG20-2924M-2 ! enable password 7 110E091D ! interface VLAN1 ip address 172.17 255.. notification 0 Interface Fa0/1 (port 13) in Spanning tree 4 is FORWARDING Port path cost 19. changes 2565 Times: hold 1. Fa0/15. topology change 35.. forward delay 0.3f83 Designated port is 13. address 00d0. address 00d0. Fa0/19. Fa0/14. hold 0 BPDU: sent 3504307.255. Port priority 128 Designated root has priority 32768.58f5.58f5. path cost 27 Timers: message age 0. Fa0/13. forward delay 15 Timers: hello 0. received 3203 .. Fa0/16.240.                                                                5 ADMIN 6 INSECURE 7 STAFF-PRIV . detected flag not set. Fa0/17.9083 Designated bridge has priority 32768..3f83 Configured hello time 2. address 00d0.. forward delay 15 Current root has priority 32768. cost of root path is 27 Topology change flag not set.9083 Root port is 42. max age 20. max age 20.224.0 no ip route-cache ! interface FastEthernet0/1 switchport mode trunk ! interface FastEthernet0/2 switchport mode trunk ! interface FastEthernet0/3 switchport mode trunk ! interface FastEthernet0/4 switchport mode trunk ! interface FastEthernet0/5 switchport mode trunk ! interface FastEthernet0/9 switchport access vlan 4 ! interface FastEthernet0/10 switchport access vlan 4 ! .

eudil.42.9.eudil.fr" T28:2887393279 (ttl 64.eudil. 15:29:27.eudil.priv.bootps: (reply) hops:1 xid:0x8382b23e Y:gayant05.fr. id 9180) 15:29:28.fr S:pevele.priv.fr.priv.priv.eudil..fr.437993 0:d0:bc:bf:6c:38 0:60:8:71:b9:82 ip 342: router-students.fr.fr G:router-students.438911 0:60:8:71:b9:82 0:d0:bc:bf:6c:38 ip 359: pevele.bootps > pevele. 16:18:33.priv.240.. id 9184) 15:29:28. sleep 5 .priv.356560 0:10:b5:7:34:a3 Broadcast arp 42: arp who-has phinaert07.eudil.255.48.fr NS:pevele.fr.       Interface ATM0/0/0 ATM0/0/0 ATM0/0/0 ATM0/0/0 ATM0/0/0 .priv.eudil.fr NS:pevele.255.fr DN:"priv.eudil.eudil. /etc/init..0 DG:router-students.bootps > pevele.eudil.priv. VPI 0 0 0 0 0 VCI 166 169 170 171 265 Type X-Interface SVC ATM0/0/1 SVC ATM3/0/0 SVC ATM0/1/3 SVC ATM0 SVC ATM1/0/2 X-VPI X-VCI Encap Status 0 49 UP 2 211 LANE UP 0 138 UP 0 846 LANE UP 0 129 UP A..bootps > router-students.priv.bootps: (request) hops:1 xid:0x8382b23e G:router-students.1.eudil.eudil.eudil..bootps > router-students.eudil.bootps: (reply) hops:1 xid:0x8382b23e Y:gayant05.456249 0:d0:bc:bf:6c:38 0:60:8:71:b9:82 ip 590: router-students.priv.fr.6.49 HN:"gayant05" T51:43200 T53:3 T54:3241163042 T50:2887389578 (ttl 255.28.priv.eudil. id 28934) 15:29:28.3.494105 0:60:8:71:b9:82 0:d0:bc:bf:6c:38 ip 347: pevele.fr ether 0:10:b5:7:34:a3 file "gayant05 vend-rfc1048 T53:5 T54:3241163042 T51:43200 SM:255.fr S:pevele.fr ether 0:10:b5:7:34:a3 vend-rfc1048 T57:548 T55:1.eudil.1.eudil.15.priv.fr tell gayant05 0001 0800 0604 0001 0010 b507 34a3 ac1a .fr" T28:2887393279 HN:"gayant05" (ttl 64. id 28946) A.eudil.eudil.eudil.fr.2 Configuration IP de base                                           Type de messages DHCP (T53) : 1 2 3 4 5 6 7 DHCPDISCOVER DHCPOFFER DHCPREQUEST DHCPDECLINE DHCPACK DHCPNAK DHCPRELEASE Analyse d'une session DHCP : pevele# tcpdump -vvv -s 1024 -e port bootps or port bootpc gayant05# /etc/init.fr ether 0:10:b5:7:34:a3 file "gayant05 vend-rfc1048 T53:2 T54:3241163042 T51:93600 T58:46800 T59:81900 SM:255.7.d/pump stop ..fr G:router-students.priv.3 La communication dans les réseaux locaux         Capture de paquets ARP : gayant05# tcpdump -vvv -s 1024 -e -x arp gayant05# ping phinaert07 gayant05# ping pevele gayant05# tcpdump .eudil.12.fr.fr HN:"gayant05" DN:"priv.0 DG:router-students.fr ether 0:10:b5:7:34:a3 vend-rfc1048 T53:1 (ttl 255.eudil.eudil.240.d/pump start pevele# tcpdump .bootps: (request) hops:1 xid:0x8382b23e G:router-students.

16.** LANE Bus: 47.00 connected.00D0BA265B02.00D058F5445D.00 370 1 667 direct 47.00918100000000D0BA265B01.00D058FB621D. Liste des LEC : RG20-1# session 1 RG20-1# show lane client LE Client ATM1.ba11.01 2P O 131 390 00d0.f59d 47.00918100000000D0BA265B01.00D058F52B1D.fr (172.00918100000000D0BA265B01.01 3P O 141 378 00d0.01 VCD rxFrames txFrames Type ATM Address 0 0 0 configure 47.01 4P O 170 393 00d0. Waiting.007900000000000000000000.03 (prio 0) active elan 'STUDENTS': un-restricted. elan-id 201 server 47.01 LECS used: 47.bcbf.priv.00918100000000D0BA265B01. 25685 packets proxy/ (ST: Init.00918100000000D0BA265B01.00D0BA265B03.00D0BA265B03.00D058FB6B5D..00D0BA265B03.00A03E000001.00D0BA265B03.                                                               118a 0000 0000 0000 ac1a 1166 Liste de la table ARP : gayant05# arp -a router-students.00D0BA265B37.ba26.01 8P O 464 431 00d0.26.00918100000000D0BA265B01. Reject.00918100000000D0BA265B01.007900000000000000000000.58fb.ba26.00D0BA265B03.58fb. Admin: up. elan-id 202 server 47.01 .102) at 00:10:B5:07:36:86 [ether] on eth0 Configurations d'un LECS : 8540# show lane default-atm-addresses interface ATM0: LANE Client: 47. Max Frame Size: 1516 locally set elan-id: not set elan-id obtained from LECS: 201 ATM address: 47.5b37 47.00918100000000D0BA265B01.00918100000000D0BA265B01.1 ELAN name: NETWORK Admin: up State: operational Client ID: 5 LEC up for 11 hours 23 minutes 17 seconds ELAN ID: 201 Join Attempt: 1326 Last Fail Reason: Fail to set up config VC HW Address: 00d0.00918100000000D0BA265B01..58fb.00D0BA265B02.01 11P O 787 1334 00d0.58fb.621d 47.** LANE Server: 47.00918100000000D0BA265B01.1) at 00:D0:BC:BF:6C:38 [ether] on eth0 hainaut.00505460ED90.01 .00918100000000D0BA265B01.60dd 47.ed90 47.00918100000000D0BA265B01.priv. 12 members.17.02 (prio 0) active elan 'STAFF': un-restricted server 47.00 8540# show lane database EUDIL LANE Config Server database table 'EUDIL' bound to interface/s: ATM0 no default elan elan 'NETWORK': un-restricted.04 (prio 0) active .00D058FB60DD.00918100000000D0BA265B01.01 10P O 488 1755 00d0.00D0BA11F59D. Elan name: NETWORK.00918100000000D0BA265B01.00D0BA265B03.00918100000000D0BA265B01. Conn.fr (172.6b5d 47.00D0BA265B03. State: operational Master/Backup: Master.00D058FB5E1D. Type: ethernet.58f5.fr (172.00918100000000D0BA265B01.2b1d 47.01 5P O 209 660 00d0. vcd 517 control distribute: vcd 554.1.** LANE Config Server: 47.00918100000000D0BA265B01. Operational.6c38 47. Adding.00918100000000D0BA265B01.eudil.00D058F53E5D..3e5d 47.00918100000000D0BA265B01..00918100000000D0BA265B01.00D0BCBF6C38.26.5e1d 47.00D0BA265B04.445d 47.priv.01 12P O 833 108 00d0. Liste des LES et BUS : 8540# show lane server LE Server ATM0.5460.00D058FB60DD.01 7P O 442 19304 00d0.01 6P O 357 377 00d0.16.2) at 00:60:08:71:B9:BE [ether] on eth0 phinaert07.58f5. Joined.60dd Type: ethernet Max Frame Size: 1516 VLANID: 1 ATM Address: 47.58f5.00918100000000D0BA265B01.01 9P O 473 400 00d0.01 (prio 0) active elan 'SERVERS': un-restricted server 47.26.58fb.00918100000000D0BA265B01.5b02 47. Term) lecid ST vcd pkts Hardware Addr ATM Address 1P O 78 167 0050.eudil.00A03E000001.eudil.00D0BA265B05.

01 Un peu de deverminage (LANE_ARP_REQ.0/0 [1/0] via 134.255.0 172.4 C 172.255..48.48.48.12 C 193.57.1. 00:00:04.65.3.255.0 172.48.0.57.206.102 C 134.1 C 172.240.80.68. ATM2/0.2 C 193. FastEthernet1/0 [120/1] via 134.00D0BA265B03.9 C 193.0/16 is variably subnetted.168. 00:00:04.0/255.0/24 [120/1] via 134.00918100000000D0BA265B01.0/24 [120/1] via 134.0/24 [120/2] via 134.3.0/20 is directly connected. ATM2/0. ATM2/0.255.26.68.255.240.3.64.0/255.246.3.255. RG20-7202# show ip route static S* 0.61.26.194.26.166.192 is directly connected.224 is directly connected.0/255.00D0BA265B04. ATM2/0.224 193.65.01 39459 0 forward 47.255.16.168. FastEthernet1/0 R 192.26.57.255. ATM2/0.26.255.103 7202# show ip route rip R 192.48. ATM2/0. FastEthernet1/0 R 192. ATM2/0.26. 00:00:04.32.32/255.7 C 172.26.68. FastEthernet1/0 C 192.0/255.3.1.101 C 192.192/255.206.168.0/24 is directly connected.206. ATM2/0.206.0/24 is directly connected.26.0/20 is directly connected. 00:00:08.0. ATM2/0.0 193.48.168. 25724 0 distribute 47.255.48.00505460ED90.0/255.0/24 is directly connected.0/255.49.225. ATM2/0..57.224 193.247.2.206.1.255.255.255.3.2 Exemple de la table de routage d'artois : . ATM2/0. 6 subnets.48.1.11 C 193. FastEthernet1/0 R 193.00918100000000D0BA265B01.7 R 195.206.48.0/25 is subnetted. ATM2/0..168.64.160 is directly connected. FastEthernet1/0 R 192.33.00D0BCBF6C38. 00:00:05.0/27 is subnetted.0/255.255.255.64.01 0 710 send 47.206.168.0/24 is directly connected.224 Exemple de la table de routage de portail : 7202# show ip route connected 172. ATM2/0.168.6 193. FastEthernet1/0 R 192.168.224.0/255.1.5 C 192. 00:00:04.1.48.255. FastEthernet1/0 R 192.0/27 is directly connected.         384 397 409 501 500 .26.91.48.0/16 is directly connected.255.0 is directly connected.0/20 is directly connected.26.0 193.0/255.60.48.13 C 172.32 is directly connected.48.4 Le routage entre réseaux locaux                                                    Exemple des classes d'adresses pour l'EUDIL : pevele# sed 's/^[^:]*:[^:]*:\([^:]*\):.48.26.10 C 193.01 2 0 data 47.00918100000000D0BA265B01. 2 masks C 172.168. 00:00:04.83. ATM2/0.0/24 is directly connected.. ATM2/0. 00:00:04.224/255.2.48.26. 4 subnets C 193. FastEthernet1/0 . ATM2/0.255.48.0 172.0/24 [120/1] via 134.0.240.3.26.48.255.3 193.224.1.57.160/255.16.80.1.00918100000000D0BA265B01.48.57.224 193.1.32. ATM2/0.206.0/24 [120/1] via 134.206.01 54 46 data 47.0.63.0/24 [120/1] via 134.3.64.00918100000000D0BA265B01.00D0BA265B04. 00:00:04. 1 subnets C 193.3.240.0/20 is directly connected.255.8 C 172.26.240.57.128 172.*$/\1/' /register/network/vlans 172.3.224 172.206.57.0/24 [120/1] via 172.0/20 is directly connected.LANE_ARP_RSP) : 7202# debug lane client all pevele# tail -f /var/log/cisco A.255.0 193.57.0 193.0/24 [120/1] via 134.

{sin_family=AF_INET. 8) = 0 alarm(0) =0 connect(3.0.0 U 0 0 0 eth1 default router-servers. {SIG_DFL}.0. SO_REUSEADDR. # # <service_name> <sock_type> <proto> <flags> <user> <server_path> <args> . SOCK_STREAM.0 U 0 0 0 tap0 172. [0 3].0.0.255. {SIG_IGN}.0. SOL_SOCKET. {SIG_DFL}. 1) =1 .240.0.255.0. sin_port=htons(4000). socket(PF_INET. Exemple de fichier /etc/inetd.0.0")}}.. {SIG_IGN}.48. sin_port=htons(4000). # strace nc -u localhost 4000 socket(PF_INET.255.255. SOL_SOCKET. {SIG_DFL}.255. 16) = 0 rt_sigaction(SIGALRM.0. . SOL_SOCKET.0 * 255..conf..0 UG 0 0 0 eth0 default router-students 0. NULL) = 1 (in [0]) read(0. 4) = 0 bind(3. 16) = 0 rt_sigaction(SIGALRM. Montrer le fonctionnement d'un serveur TCP : # strace -f /usr/sbin/ftpd -s -p 2121 # strace ftp localhost 2121 Montrer le fonctionnement d'un serveur UDP : # strace -f nc -u -l -p 4000 .0")}}.224 U 0 0 0 eth0 192. 4) = 0 rt_sigaction(SIGALRM.168..0 * 255. 8) = 0 alarm(0) =0 select(16. 1) =0 rt_sigaction(SIGALRM. {sin_family=AF_INET.0. sin_addr=inet_addr("0. NULL.1. "\n".230. "\n".16. "\n".5 Programmation réseau                                              Montrer les appels systèmes avec : $ strace nc -l -p 4000 . {SIG_IGN}. NULL) = 1 (in [3]) read(3. {sin_family=AF_INET.0.26.168.               artois# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 193. IPPROTO_TCP) = 3 setsockopt(3.255.64. 8192) =1 write(1.32 * 255. 8) = 0 alarm(0) =0 recvfrom(3.0 * 255. sin_port=htons(4000).48. sin_addr=inet_addr("127..255.0. sin_port=htons(4000). [1].0. 0.0. [1]. 8192) =1 write(3. SO_REUSEADDR.. 16) = 0 listen(3. NULL. NULL. {SIG_IGN}..0 UG 1 0 0 eth1 Exemple de la table de routage d'une machine avec vmware : avalon# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 193. sin_addr=inet_addr("127. 1) =1 . [0 3]...0 U 0 0 0 eth0 A.255.. [16]) = 0 select(16.0 * 255. [1].255. IPPROTO_UDP) = 3 setsockopt(3.57.0. socket(PF_INET.0 U 0 0 0 vmnet1 default * 0. {SIG_IGN}. SOCK_DGRAM.0 U 0 0 0 eth0 192. ..1")}}. 4) = 0 bind(3..1")}}. sin_addr=inet_addr("0. {sin_family=AF_INET. "\n". SOCK_DGRAM. SO_REUSEADDR. IPPROTO_UDP) = 3 setsockopt(3. 8) = 0 alarm(0) =0 accept(3. NULL.

26.26.7 ms 64 bytes from 172.17.rlogind exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.fr > gayant05: icmp: echo reply 4500 0054 b138 0000 ff01 8f26 ac1a 118b ac1a 118a 0000 51fe cc0e 0000 fd01 083a f1b3 0000 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 .fr (172. .priv.telnetd /usr/sbin/tcpd /usr/sbin/in.26.26.139: icmp_seq=2 ttl=255 time=1.0 ms 64 bytes from 172.17. exec and talk are BSD protocols.047075 0:10:b5:7:34:9c 0:10:b5:7:34:a3 ip 98: gayant06.eudil.eudil.139: icmp_seq=1 ttl=255 time=2.17.26.priv. login.priv.5 ms gayant05# tcpdump -e -x -s 128 icmp tcpdump: listening on eth0 14:22:05.046558 0:10:b5:7:34:a3 0:10:b5:7:34:9c ip 98: gayant05 > gayant06.tty /usr/sbin/tcpd /usr/sbin/kotalkd ntalk dgram udp wait root..6 Protocoles TCP/IP                                  Montrer les ICMP 8 et 0 de demande et de réponse d'écho : gayant05# ping gayant06 PING gayant06.rexecd talk dgram udp wait root.priv.fr: icmp: echo request 4500 0054 b534 0000 4001 4a2b ac1a 118a ac1a 118b 0800 49fe cc0e 0000 fd01 083a f1b3 0000 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 14:22:05.rshd login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.. # shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.26.telnetd #:BSD: Shell.tty /usr/sbin/tcpd /usr/sbin/ktalkd A..17.eudil.7 ms .3 ms 64 bytes from 172.139: icmp_seq=1 ttl=255 time=1.139): 56 data bytes 64 bytes from 172.139: icmp_seq=0 ttl=255 time=2.139): 56 data bytes 64 bytes from 172.17.eudil.fr (172..1.17.                           # #:INTERNAL: Internal services # echo stream tcp nowait root echo dgram udp wait root chargen stream tcp nowait root chargen dgram udp wait root discard stream tcp nowait root discard dgram udp wait root daytime stream tcp nowait root daytime dgram udp wait root time stream tcp nowait root time dgram udp wait root internal internal internal internal internal internal internal internal internal internal #:STANDARD: These are standard services.telnetd ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/wu-ftpd -l telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd /usr/sbin/in. # telnet stream tcp nowait telnetd.139: icmp_seq=2 ttl=255 time=1. Montrer les ICMP 5 de modification de route : gayant05# route add -host gayant06 gw router-students gayant05# ping gayant06 PING gayant06.26.17.17.139: icmp_seq=0 ttl=255 time=1.0 ms 64 bytes from 172.26.

38 byte packets 1 router-servers..fr (195.3.priv.fr: icmp: time exceeded in-transit [tos 0xc0] 45c0 0038 5202 0000 fe01 e5df 86ce 0302 c130 3922 0b00 9fc8 0000 0000 4500 0026 c7bd 0000 0111 be62 c130 3922 c353 7601 c7bb 829c 0012 0acd .eudil.eudil.503746 0:60:8:71:b9:82 0:d0:bc:bf:6c:38 ip 52: pevele.206.fr.976445 0:10:b5:7:34:a3 0:d0:bc:bf:6c:38 ip 98: gayant05 > gayant06.fr..lip6.jussieu.51131 > nephtys.118.                                                               gayant05# tcpdump -e -x -s 128 icmp tcpdump: listening on eth0 14:28:50.eudil.eudil.977596 0:d0:bc:bf:6c:38 0:10:b5:7:34:a3 ip 70: router-students.fr..eudil.fr > pevele.eudil.eudil.2) 3.lip6.52994 > nephtys.priv.504901 0:d0:bc:bf:6c:38 0:60:8:71:b9:82 ip 70: router-servers.108 ms 2 cisco1. 30 hops max.83.fr > gayant05: icmp: redirect gayant06.eudil.57.51131 > nephtys. 11 nephtys.fr (134.449608 0:60:8:71:b9:82 0:d0:bc:bf:6c:38 ip 52: pevele.univ-lille1.fr (193.507148 0:60:8:71:b9:82 0:d0:bc:bf:6c:38 ip 52: pevele.fr traceroute to nephtys.510803 0:d0:bc:bf:6c:38 0:60:8:71:b9:82 ip 70: cisco1..jussieu.eudil. 16:23:02. les paquets UDP de TTL croissants et le paquet ICMP 3 (destination inaccessible) : pevele# traceroute -q 1 ftp.1) 35.fr (195.fr: icmp: echo request 4500 0054 faa1 0000 4001 04be ac1a 118a ac1a 118b 0800 44ca 060f 0000 9203 083a 19e6 0e00 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 14:28:50.lip6.fr.eudil.lip6.univ-lille1.33445: udp 10 4500 0026 cf0d 0000 0b11 ad12 c130 3922 .1).priv.fr \) 14:32:37. Montrer les paquets ICMP 11 de datagramme trop vieux.fr > gayant05: icmp: echo reply 4500 0054 b18c 0000 ff01 8ed2 ac1a 118b ac1a 118a 0000 4cca 060f 0000 9203 083a 19e6 0e00 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 .33436: udp 10 4500 0026 c7bd 0000 0211 bd62 c130 3922 c353 7601 c7bb 829c 0012 0acd 0202 7504 083a f0bc 0700 14:32:37.fr to net gayant06.priv.978087 0:10:b5:7:34:9c 0:10:b5:7:34:a3 ip 98: gayant06..118.fr.fr.48.lip6..811 ms .33) 2.fr > pevele.eudil.fr: icmp: time exceeded in-transit [tos 0xc0] 45c0 0038 aa3e 0000 ff01 1c22 c130 3921 c130 3922 0b00 11ba 0000 0000 4500 0026 c7bc 0000 0111 be63 c130 3922 c353 7601 c7bb 829b 0012 98dc 14:32:37.eudil.83.33435: udp 10 [ttl 1] 4500 0026 c7bc 0000 0111 be63 c130 3922 c353 7601 c7bb 829b 0012 98dc 0101 7504 083a 63af 0700 14:32:37.629 ms pevele# tcpdump -e -x -s 128 \( icmp and dst host pevele \) or \ \( udp and dst host ftp.fr 4500 0038 a817 0000 ff01 99ed ac1a 1001 ac1a 118a 0500 ea80 ac1a 118b 4500 0054 faa1 0000 3f01 05be ac1a 118a ac1a 118b 0800 44ca 060f 0000 14:28:50.priv.

... $ ls -l /tmp/fich1 /vmlinuz -rw-r--r-.39 ! ..483371 0:d0:bc:bf:6c:38 0:60:8:71:b9:82 ip 80: nephtys. $ nc pevele 21 220-Welcome.eudil.. cat ) > /tmp/fich1 . gopher 70/tcp # Internet Gopher finger 79/tcp www 80/tcp http # WorldWideWeb HTTP .lip6.lip6..fr: icmp: nephtys.. $ nc -u localhost 4000 < /vmlinuz .64.                                                                c353 7601 cf02 82a5 0012 eb3a 0b0b 561e 083a 1fdc 0600 16:23:02. time 37/udp timserver .eudil.1 root root 69581 Nov 7 14:43 /tmp/fich1 -rw-r--r-..fr 13 Tue Nov 7 14:38:56 2000 $ netstat -A inet -u -a udp 0 0 *:bootps *:* udp 0 0 *:domain *:* udp 0 0 *:ntp *:* udp 0 0 *:netbios-dgm *:* udp 0 0 *:netbios-ns *:* udp 0 0 *:tftp *:* udp 0 0 *:talk *:* udp 0 0 *:ntalk *:* udp 0 0 *:time *:* udp 0 0 *:daytime *:* udp 0 0 *:discard *:* udp 0 0 *:chargen *:* udp 0 0 *:echo *:* udp 0 0 *:sunrpc *:* udp 0 0 *:syslog *:* .48.1 root root 716749 Oct 18 17:14 /vmlinuz Description du protocole TCP : $ cat /etc/services | grep tcp .. Montrer la perte de paquets avec les commandes : $ nc -u -l -p 4000 | ( sleep 10 .... archive user @193.fr > pevele.. bootps 67/udp bootpc 68/udp tftp 69/udp $ echo | nc -u pevele..fr udp port 33445 unreachable [tos 0xc0] 45c0 0042 a24b 0000 3601 ae08 c353 7601 c130 3922 0303 30c8 0000 0000 4500 0026 cf0d 0000 0111 b712 c130 3922 c353 7601 cf02 82a5 0012 eb3a 0b0b 561e 083a 1fdc 0600 Description du protocole UDP : $ cat /etc/services | grep udp echo 7/udp discard 9/udp sink null daytime 13/udp .. ftp-data 20/tcp ftp 21/tcp ssh 22/tcp # SSH Remote Login Protocol telnet 23/tcp smtp 25/tcp mail time 37/tcp timserver ..

timestamp 110933944 0.fr:ssh ESTABLISHED 1743/ssh .f:ftp-data ttmdy070188.186.64.51:auth LAST_ACK tcp 0 0 pevele..eudil.fr:smtp kipper02.fr:smtp 207.eudil.161.202:3362 FIN_WAIT2 tcp 0 1 pevele.eudil.64.fr..2137: S 3640171901:3640171901(0) ack 3611621682 win 32120 .fr.eudil..eudil. 220-please report them via e-mail to <root@pevele.eudil.nop..6. Montrer la non perte de paquets avec les commandes : $ nc -l -p 4000 | ( sleep 10 .eudil.priv..eudil.186. tcp *:ssh *:* LISTEN tcp *:telnet *:* LISTEN tcp *:smtp *:* LISTEN tcp 193.this will turn off the continuation 220-messages that may be confusing your ftp client..eudil.47.39:33414 pevele.eudi:4510 TIME_WAIT tcp 0 58400 pevele.2137 > pevele.124:1311 TIME_WAIT tcp 0 0 pevele.fr:61739 ESTABLISHED .montro:2582 ESTABLISHEDs tcp 0 0 pevele.eudil. please try using a dash (-) as the first 220-character of your password -.wscale 0> (DF) [tos 0x10] 4510 003c 94a3 4000 3f06 f097 ac1a 1004 c130 3922 0859 0015 d744 f931 0000 0000 a002 7d78 7ce4 0000 0204 05b4 0402 080a 069c b7b8 0000 0000 0103 0300 15:31:57.eudil. quit 221 Goodbye. cat ) > /tmp/fich1 .sackOK.64. $ netstat -A inet -t -a -p .priv.fr:ftp ttmdy070188.. gayant05# tcpdump -e -x -s 128 host pevele and port 21 15:31:57.fr:1031 212..eudil.montro:2566 ESTABLISHED tcp 0 0 pevele.48.fr:smtp 62.fr:smtp 62.1 root root 716749 Oct 18 17:14 /vmlinuz Montrer la phase de connexion TCP : gayant05# nc pevele 21 .eudil.fr:ssh goto..64.eudil.fr.161..priv.fr:866 ESTABLISHED tcp 0 77 pevele.39:33275 pevele..37.eudil.fr:pop3 phinaert03.39:33785 artois.124:1325 ESTABLISHED tcp 0 49 pevele. 220220-If you do have problems.1 root root 716749 Nov 7 15:28 /tmp/fich1 -rw-r--r-.189984 0:d0:bc:bf:6c:38 0:60:8:71:b9:82 ip 74: weppes.clients:smtp ESTABLISHED tcp 0 0 pevele.eudil.207.fr>. $ ls -l /tmp/fich1 /vmlinuz -rw-r--r-.fr FTP server (Version wu-2.fr:3128 ESTABLISHED 502/netscape tcp 193.fr:smtp 62.                                                                220220-The local time is: Tue Nov 7 14:51:25 2000 220220-This is an experimental FTP server..fr:1384 sofrer-nat.ftp: S 3611621681:3611621681(0) win 32120 <mss 1460.eudil.48.124:1317 TIME_WAIT tcp 0 0 pevele.ftp > weppes.48. 220220 pevele.fr:3128 ESTABLISHED 502/netscape tcp 193.eudi:netbios-ssn corse. $ nc localhost 4000 < /vmlinuz .161.39:33782 artois.priv.48.0(1) Fri Jun 23 08:07:11 CEST 2000) ready.eudil. Mode connecté : $ netstat -A inet -t Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 94 pevele.190068 0:60:8:71:b9:82 0:d0:bc:bf:6c:38 ip 74: pevele.fr.eudil.94.eudil.eu:2920 TIME_WAIT tcp 0 0 pevele.186.fr:ssh ESTABLISHED 2204/ssh tcp 193. If have any unusual problems.eudil.eudil.priv.eudil.

sackOK. traitement de la requete.eudil. fi done # # Analyse de la requete # set -.              <mss 1460.192459 0:d0:bc:bf:6c:38 0:60:8:71:b9:82 ip 66: weppes.2. protocole=$3 # . do if [ -z "${line}" ] . ack 1 win 32120 <nop.priv.wscale 0> (DF) 4500 003c 60c3 4000 4006 2388 c130 3922 ac1a 1004 0015 0859 d8f8 9d7d d744 f932 a012 7d78 888f 0000 0204 05b4 0402 080a 0b54 7279 069c b7b8 0103 0300 15:31:57. envoi du fichier) # while true .timestamp 110933945 190083705> (DF) [tos 0x10] 4510 0034 94a5 4000 3f06 f09d ac1a 1004 c130 3922 0859 0015 d744 f932 d8f8 9d7e 8010 7d78 b753 0000 0101 080a 069c b7b9 0b54 72791 A. then break .2137 > pevele.ftp: .timestamp 190083705 110933944.fr.eudil.1 Serveur Web en Bourne Shell #!/bin/sh # # Exemple de serveur HTTP en shell # # # Quelques constantes # NC=/usr/bin/nc PORT=8080 TTY_PREFIXE=/dev/tty PTY_PREFIXE=/dev/pty TTY_NUMERO=q3 REPERTOIRE=${HOME}/Scripts/Web # # Boucle principale # (ecoute sur le port.nop.${requete} commande=$1 . file=$2 .nop.2 Programmation en Bourne Shell A. do # # On ecoute sur le cote maitre du terminal virtuel # ${NC} -l -p ${PORT} 4<>${PTY_PREFIXE}${TTY_NUMERO} >&4 2>&4 <&4 & PID=$! # # On lance un sous-shell sur le cote esclave # ( stty -echo igncr # # Lecture de la requete HTTP # read requete # # Lecture des entetes (mises a la poubelle) # while read line .fr.

2 Exemple de page Web <html> <head> <title>Serveur web de demonstration</title> </head> Voici deux p't liens : <dl> <dt> <a href="/fichier1">Premier fichier</a> <dt> <a href="/fichier2">Second fichier</a> </dl> <p align=right> Serveur Script </p> </body> </html> A.o # Message pour la marche a suivre all: @echo -e "\ Tapez d'abord make generate pour obtenir le fichier d'inclusion ." # Generation des fichiers C par rpcgen generate: calc.o calc_xdr.o SERVER_OBJS=calc_server.1 Makefile pour le serveur et le client RPC # # Generation d'un client et d'un serveur RPC de demonstration # (simple addition et soustraction d'entiers).o calc_svc.# Reponse a la requete # if [ "${commande}" != "GET" -o ! -f "${REPERTOIRE}/${file}" ] .c\n\ puis lancez la compilation par make compile.o calc_clnt.h et\n\ les fichiers C.o calc_xdr. then echo "${protocole} 400 erreur" echo echo "Erreur !!" else echo "${protocole} 200 OK" echo "Content-type: text/html" echo cat "${REPERTOIRE}/${file}" fi ) 4<>${TTY_PREFIXE}${TTY_NUMERO} >&4 2>&4 <&4 # # On stoppe l'ecoute # kill ${PID} sleep 2 done A.3 Sources pour RPC A.c et calc_server. # # Quelques constantes liees au projet CLIENT_OBJS=calc_client.2. Modifiez les programmes calc_client.x rpcgen -a -C $^ .3.

/* AJOUT DE CODE : implantation de l'addition */ result=argp->x+argp->y. /* FIN D'AJOUT DE CODE */ .3. } = PROGRAM_NUMBER. }.c calc_server.c calc_clnt.o calc.h" int * add_1_svc(operandes *argp. struct svc_req *rqstp) { static int result.c rm -f calc_client.# Copie des fichiers modifies a la main sur leurs modeles copy: cp calc_client_modified. int y. /** Definition des RPC **/ program CALC_PROG { version CALC_VERSION { int ADD(operandes) = 1. A.c calc_xdr.2 Définition des RPC /********************************************************************/ /** Fichier de definition de RPC d'addition et de soustraction **/ /********************************************************************/ /** Quelques constantes **/ #define PROGRAM_NUMBER 19992000 #define VERSION_NUMBER 1 /** Structures des parametres des procedures **/ struct operandes { int x.c A.c calc_client.h calc_svc. } = VERSION_NUMBER.c cp calc_server_modified. int SUB(operandes) = 2. * These are only templates and you can use them * as a guideline for developing your own functions.c calc_server.c # Compilation des programmes C compile: client server client: ${CLIENT_OBJS} calc.3. */ #include "calc.3 Fichier C du serveur /* * This is sample code generated by rpcgen.h gcc -o client ${CLIENT_OBJS} server: ${SERVER_OBJS} calc.h gcc -o server ${SERVER_OBJS} # Regle de nettoyage clean: rm -f client server *.

"call failed:").x. struct svc_req *rqstp) { static int result. /* AJOUT DE CODE : implantation de la soustraction */ result=argp->x-argp->y. /** FIN D'AJOUT DE CODE **/ clnt_destroy( clnt ).add_1_arg. } main( int argc. } /** AJOUT DE CODE : affichage du resultat de la RPC **/ printf("%d + %d = %d\n". operandes add_1_arg. sub_1_arg.*result_1). clnt). /** FIN D'AJOUT DE CODE **/ /** AJOUT DE CODE : initialisation du parametre de la RPC **/ sub_1_arg. "call failed:").y.sub_1_arg. } int * sub_1_svc(operandes *argp.sub_1_arg.3. char* argv[] ) . int y ) /** FIN DE MODIFICATION DE CODE **/ { CLIENT *clnt. exit(1). clnt = clnt_create(host. if (result_1 == NULL) { clnt_perror(clnt.x = x . * These are only templates and you can use them * as a guideline for developing your own functions.h" void /** MODIFICATION DE CODE : ajout des operandes en parametre **/ calc_prog_1( char* host.y = y .y = y .return(&result). add_1_arg. /* FIN D'AJOUT DE CODE */ return(&result). int x. "udp"). } A. clnt).x = x .add_1_arg.x.%d = %d\n". if (result_2 == NULL) { clnt_perror(clnt. CALC_PROG.4 Fichier C du client /* * This is sample code generated by rpcgen. if (clnt == NULL) { clnt_pcreateerror(host). CALC_VERSION. operandes sub_1_arg. int *result_2.*result_2). /** FIN D'AJOUT DE CODE **/ result_2 = sub_1(&sub_1_arg. /** FIN D'AJOUT DE CODE **/ result_1 = add_1(&add_1_arg. } /** AJOUT DE CODE : affichage du resultat de la RPC **/ printf("%d . */ #include "calc. } /** AJOUT DE CODE : initialisation du parametre de la RPC **/ add_1_arg.y. int *result_1.

x. /** FIN DE MODIFICATION DE CODE **/ } . /** FIN DE MODIFICATION DE CODE **/ exit(1). y ).{ char *host. } host = argv[1]. /** FIN D'AJOUT DE CODE **/ /** MODIFICATION DE CODE : nouvelle syntaxe **/ if(argc < 4) { printf("usage: %s server_host op1 op2\n". /** AJOUT DE CODE : variables pour les operandes **/ int x. argv[0]).y. y = atoi(argv[3]). calc_prog_1( host. /** MODIFICATION DE CODE : recuperation et utilisation des operandes **/ x = atoi(argv[2]).

Sign up to vote on this title
UsefulNot useful