L3 EMO 2014-2015 - Déroulement réel des cours

La « pensée » du joudi 16 janbier 2019 , 15h59m18s :
-Où avez-vous attrapé ces mycoses?
-Désolé Docteur, un vrai amateur ne révèle pas ses coins à champignons.
  -- Le Chat (Philippe Geluck)

Semaine du dredi 16 janbier 2015 : TD n°1 (Cumul=3h)

Dernière modification : 25/8/2016

Semaine du dredi 23 janbier 2015 : TD n°2 (Cumul=6h)

  • Suite de la correction, dont quelques mots sur les logiciels libres.
  • La syntaxe des adresses, sur internet en général, et sur le web en particulier. Adresses IP, adresses domainisées. DNS.
  • Retours et compléments sur le codage de l'information (binaire), en particulier le codage des caractères (ASCII, unicode, etc.)
  • On travaillera exclusivement sous linux.
    Une présentation très complète : sur developpez.com.
  • Sous Linux, séparation du système d'exploitation et de l'interface graphique : plusieurs interfaces graphiques disponibles (KDE, Gnome, etc.) ; on choisit en fonction de ses goûts.
  • Répertoires : avec un explorateur, explorer l'arborescence, et vérifie que tout est répertoire dans une seule arborescence, où se trouvent les fichiers personnels, vérifier par la pratique la protection des autres répertoires (tenter de supprimer le répertoire système).
    Remarque : c'est ce qui rend linux insensible aux virus.
    Conséquence : pour que la sécurité soit vraiment assurée, toujours se déconnecter avant de partir.
  • Exercice d'application directe :
    1. Dans votre répertoire personnel, créer un répertoire TP1. Puis créer un répertoire tp1. Remarque ?
    2. Recopier dans le répertoire TP1 tout le contenu du répertoire /usr/sbin/.
    3. Déplacer dans le répertoire tp1 tout le contenu du répertoire /usr/sbin/. Remarque ?
    4. Renommer le répertoire tp1 en TP2, y créer un (sous-)répertoire sbin, et y déplacer tous les fichiers de TP1.
    5. Supprimer le répertoire TP2.
Dernière modification : 25/8/2016

Semaine du dredi 30 janbier 2015 : TD n°3 (Cumul=9h)

  • Retour sur l'authentification sur les serveurs de mail (serveur pop, serveur smtp, imap, webmail). SMTP vs SMTP authentifié.
  • L'architecture client/serveur. Métaphore : serveur brasserie/client qui a soif.
  • Manipulations de base dans une fenêtre de commandes :
    • Lancer une fenêtre de commandes, la fermer, des onglets...
    • Exécuter une commande sous linux : dans un terminal ou ALT+F2.
      Lancer une commande en arrière plan dans un terminal (&).
    • Les touches pour gérer le shell. En plus des touches classiques (flèches droite et gauche, SUPPR et BACKSPACE) pour se déplacer et modifier, on a aussi :
      • ORIG (ou HOME) et FIN pour aller directement en début et fin de ligne de commandes.
      • Flèches haut et bas (se déplacer dans l'historique des commandes)
      • CTRL + U (efface depuis le curseur jusqu'au début de la ligne de commande, et place dans le presse-papier)
      • CTRL + K (efface depuis le curseur jusqu'à la fin de la ligne de commande, et place dans le presse-papier)
      • CTRL + Y (recopie le presse-papier sur la ligne de commande depuis la position du curseur)
      • TAB (complétion du nom d'un fichier présent dans le répertoire actif)
      • CRTL + C (interrompt la commande en cours)
      • CTRL + ALT + SUPPR (arrête la session, mais ne marche pas dans toutes les interfaces graphiques)
    • clear (efface l'écran)
    • Comment se déplacer dans l'arborescence (cd). Chemin absolu et chemin relatif.
      Comment savoir où on est (pwd).
      Comment monter dans le répertoire père. Comment descendre dans un répertoire fils. Comment revenir au répertoire home.
      Comment lister le contenu d'un répertoire (ls).
    • Obtenir des informations : man (ou http://man.developpez.com/), apropos, whatis, whois, file, who, whoami.
    • Les commandes de gestion des processus.
      • top (affiche l'utilisation des ressources par les processus en temps réel)
      • ps (process search)
        • ps
        • ps -l (affichage long des processus de l'utilisateur )
        • ps -e (affiche les processus en cours)
        • ps -ef (affiche les processus en cours en détail)
        • ps -efl (affichage long et en détail des processus en cours)
        • ps -ef | grep user
        • ps -aux
        • ps -aefx
        • ps -aef | grep "vi"
        • ps -aux | wc -l
      • kill (envoie un signal à un processus, SIGHUP, SIGTERM)
        • kill PID (demande la fermeture propre du processus)
        • kill -9 PID (ferme autoritairement le processus, ce qui peut provoquer des pertes de données et/ou la création de fichier d'erreur, les fichiers "core" peuvent être de très grandes tailles parce qu'ils contiennent des images de toutes les données traitées par le processus bloqué)
      • killall
        • killall telnet (pour supprimer les processus proliférant ("spawning process" comme telnet lpd) qui se reproduisent à chaque nouvelle requête)
    • Aller voir les répertoires des autres quand c'est possible.
      Parenthèse sur les droits d'accès. On verra plus tard comment les changer.
      Vocabulaire : Selon que vous veniez du monde windows ou du monde linux, le vocabulaire ne sera peut-être pas identique : on dira « dossier » et « document » dans le monde windows, tandis qu'on dira plutôt « répertoire » et « fichier » dans le monde linux ; ces différences en doivent pas vous pertuber, les mots sont différents mais les concepts sont identiques. Vous pouvez considérer sans aucun risque que « dossier » et « document » sont respectivement synomymes de « répertoire » et « fichier ».
    • Créer des répertoires (mkdir), des fichiers, puis les effacer (rm et rmdir). Caractères joker, ou génériques (* et ?).
      En profiter pour vérifier les droits et l'impossibilité d'effacer les fichiers des autres.
    • Copier des fichiers (cp) : entre ses propres répertoires, depuis les répertoires des autres. Copier des répertoires.
    • Renommer un fichier, un répertoire (mv). Déplacer (mv).
    • Créer un fichier vide, modifier la date de dernière modification d'un fichier existant (touch).
Dernière modification : 25/8/2016

Semaine du dredi 6 fébrier 2015 : TD n°4 (Cumul=12h)

  • Illustration des infos sur les virus, le phishing et l'usurpation d'identité
    La DSI de Lille 3 a envoyé ce message :
    Bonjour,
    Plusieurs universités, dont la COMUE et Artois, viennent d'être victimes d'un virus chiffrant les fichiers des postes de travail infectés et demandant une rançon de plusieurs centaines de dollars pour pouvoir les récupérer.

    Le virus se propage par courriel rédigé en français ressemblant à une facture.
    Vous trouverez à l'adresse suivante une capture d'écran d'un exemple de ces messages malveillants (ils peuvent toutefois prendre d'autres formes) :
    https://owncloud.univ-lille3.fr/public.php?service=files&t=53315e9d5282c08dc536d3be03aa2ca3

    Ce virus n'étant pas encore détecté par la plupart des antivirus, la DSI a renforcé, à titre conservatoire, le filtrage des pièces jointes pour bloquer les fichiers ZIP.

    Nous rappelons par ailleurs que la plus grande vigilance est demandée vis-à-vis des messages reçus et des fichiers qui peuvent y être attachés. Il ne faut jamais ouvrir une pièce jointe ou cliquer sur un lien dans un message si on n’est pas sûr de l’expéditeur. Dans le doute, il ne faut surtout pas hésiter à demander une confirmation à l’expéditeur.

    Cordialement.

    --
    Cedric Foll
    Direction des Systèmes d'Information
  • Commandes linux, exercice d'application directe
    1. Dans votre répertoire personnel, créer un répertoire TP1. Puis créer un répertoire tp1. Remarque ?
      cd
      mkdir TP1
      mkdir tp1

      On peut remarquer que ça ne pose pas de problème, les majuscules et minuscules sont réellement différenciées.
    2. Recopier dans le répertoire TP1 tout le contenu du répertoire /usr/sbin/.
      cp /usr/sbin/* TP1
    3. Déplacer dans le répertoire tp1 tout le contenu du répertoire /usr/sbin/. Remarque ?
      mv /usr/sbin/* tp1
      Ça ne marche pas... On ne peut pas modifier/effacer/déplacer les fichiers systèmes.
    4. Renommer le répertoire tp1 en TP2, y créer un (sous-)répertoire sbin, et y déplacer tous les fichiers de TP1.
      mv tp1 TP2
      mkdir TP2/sbin
      mv TP1/* TP2/sbin
    5. Supprimer les répertoires TP1 et TP2.
      rmdir TP1
      rm -rf TP2
  • Les commandes linux, suite
    • history (affiche la liste des commandes de historique) :
      • history -c (efface la liste de l'historique)
      • !! (rappelle de la commande précédente équivalent à "!-1")
      • !x (rappelle de la commande de N°x)
      • !-x (rappelle la commande dans l'ordre inversé, en commençant par la fin)
      • !cp (rappelle la dernière commande qui commence par "cp")
    • Afficher le contenu d'un fichier :
      • cat (et tac en ordre inverse)
      • Afficher le début d'un fichier : head. Afficher la fin : tail.
      • Afficher écran par écran : more et less.
      • Numérotation des lignes : nl ou cat -n.
      • Affichage avec tri : sort.
    • Les pipes («|»).
      Exemple : tac script.txt | nl | head -n5 | tail -n3 | tac
  • Le spam :
    • Qu'est-ce que le spam ?
      Spam est une marque de corned-beef ! Plus précisément SPAM est un acronyme pour Spiced Pork And Meat (pâté épicé à base de porc et de viandes). C'est donc bien ce truc dégueu que tous les Américains se sont enfilés pendant la seconde guerre mondiale. On pourrait croire que l'explication s'arrête là : spam = truc dégueu.
      Mais l'utilisation du terme Spam pour désigner des courriers électroniques abusifs est due aux Monty Python (ce qui n'est pas pour nous déplaire). Dans un de leurs célèbres sketches, déguisés en Vikings amateurs de Spam, les célèbres comiques britanniques éructaient une chanson de leur crû : « Spam spam spam spam, spam spam spam spam, spam spam spam spam... ». La chanson, interminable et interprétée crescendo, couvrait les propos des autres protagonistes du sketch.
      Le texte précédent est tiré de cette page : http://www.arobase.org/spam/comprendre/qu-est-ce-que-le-spam.htm. Vous y trouverez aussi d'autres renseignements sur le spam (celui du courrier électronique).
    • Le texte du sketch des Monty Python, et sa traduction.
    • Description du sketch sur Wikipedia
    • Le sketch sur Youtube
    • En prime, les Monty Python sur Wikipedia, le sketch du Ministry Of Silly Walks sur Youtube, avec sous-titres en français. Rien à voir avec le spam, mais si ça peut aider à répandre la culture...
  • Exercice
    Créez, dans votre répertoire personnel, un répertoire CommandesLinux contenant l'arborescence suivante :
    .
    ├── couleur
    │   └── froide
    └── forme
        ├── angle
        └── courbe
    cd
    mkdir CommandesLinux
    mkdir CommandesLinux/couleur
    mkdir CommandesLinux/couleur/froide
    mkdir CommandesLinux/forme
    mkdir CommandesLinux/forme/angle
    mkdir CommandesLinux/forme/courbe
    1. Copiez le fichier /etc/services dans votre répertoire CommandesLinux.
      En étant dans le répertoire CommandesLinux :
        cp -R /etc/services .
    2. À qui appartient le fichier que vous venez de copier ? Quelle est sa date de sa dernière modification ?
      Il vous appartient, et sa date de modification est l'heure de la copie.
    3. Créez dans le répertoire CommandesLinux les fichiers ne contenant aucune donnée et dont les noms sont : rond.txt, triangle.txt, carre.txt, rectangle.txt, vert.txt et bleu.txt.
      touch rond.txt triangle.txt carre.txt rectangle.txt vert.txt bleu.txt
Dernière modification : 25/8/2016

Semaine du dredi 13 fébrier 2015 : TD n°5 (Cumul=15h)

Le contrôle n°1 aura lieu le lundi 23 mars, de 13h à 14h30 dans les conditions suivantes :
  • sur feuille,
  • tous documents PAPIER autorisés,
  • aucun document électronique (liseuse, tablette, ordinateur, téléphone, etc.).
  • Suite de l'exercice
    Créez, dans votre répertoire personnel, un répertoire CommandesLinux contenant l'arborescence suivante :
    .
    ├── couleur
    │   └── froide
    └── forme
        ├── angle
        └── courbe
    cd
    mkdir CommandesLinux
    mkdir CommandesLinux/couleur
    mkdir CommandesLinux/couleur/froide
    mkdir CommandesLinux/forme
    mkdir CommandesLinux/forme/angle
    mkdir CommandesLinux/forme/courbe

    ou
    cd
    mkdir CommandesLinux CommandesLinux/couleur CommandesLinux/couleur/froide CommandesLinux/forme CommandesLinux/forme/angle CommandesLinux/forme/courbe

    ou
    cd
    mkdir CommandesLinux
    cd CommandesLinux
    mkdir couleur
    mkdir forme
    cd couleur
    mkdir froide
    cd ../forme
    mkdir angle
    mkdir courbe
    1. Copiez le fichier /etc/services dans votre répertoire CommandesLinux.
      En étant dans le répertoire CommandesLinux :
        cp -R /etc/services .
    2. À qui appartient le fichier que vous venez de copier ? Quelle est sa date de sa dernière modification ?
      Il vous appartient, et sa date de modification est l'heure de la copie.
      Ces informations sont accessibles par la commande ls -lah
    3. Créez dans le répertoire CommandesLinux les fichiers ne contenant aucune donnée et dont les noms sont : rond.txt, triangle.txt, carre.txt, rectangle.txt, vert.txt et bleu.txt.
      touch rond.txt triangle.txt carre.txt rectangle.txt vert.txt bleu.txt
    4. Déplacez le fichier rond.txt dans le répertoire courbe et les fichiers triangle.txt, carré.txt, rectangle.txt dans le répertoire angle.
      mv rond.txt forme/courbe
      mv triangle.txt carre.txt rectangle.txt forme/angle
    5. Déplacez les fichiers vert.txt et bleu.txt dans le répertoire froide.
      mv vert.txt bleu.txt couleur/froide
    6. Allez dans le répertoire couleur et afficher le contenu du répertoire de façon récursive.
      cd couleur
      ls -R
    7. Copier le répertoire froide sous le nom chaude.
      cp -R froide chaude
    8. Allez dans le répertoire chaude et renommez le fichier bleu.txt en rouge.txt, et vert.txt en jaune.txt.
      cd chaude
      mv bleu.txt rouge.txt
      mv vert.txt jaune.txt
    9. Remontez dans le répertoire CommandesLinux et renommez le répertoire couleur en peinture.
      cd ../..
      mv couleur peinture
    10. Affichez le contenu du fichier /etc/issue. Que contient-il ?
      cat /etc/issue
      Il contient le message affiché lors d'une connexion sur un terminal.
    11. Affichez page par page le contenu du fichier /etc/services. Que contient-il ?
      more /etc/services ou less /etc/services
      Il fournit une correspondance entre un nom intelligible décrivant un service Internet et l'ensemble numéro de port/protocole utilisé.
      Chaque programme réseau devrait consulter ce fichier pour obtenir le numéro de port et le protocole sous-jacent au service qu'il fournit.
  • Le droit sur internet : différents types de logiciels (freeware, shareware, logiciels commerciaux, logiciels libres, licence GPL, brevets logiciels, etc.), la copie frauduleuse ou contrefaçon (droits d'auteurs, etc.), droit à l'image.
    Voir aussi le chapitre « Droit et logiciels ? » de http://www.grappa.univ-lille3.fr/polys/reseaux-DG/
  • Les virus, les vrais et les faux ; le spam ; les hoaxes, http://www.hoaxbuster.com/
  • Quelles traces laissez-vous quand vous surfez ? cookies, cache, proxies.
    Comment un site peut-il espionner ses visiteurs ? Voilà un exemple des informations que l'on peut obtenir sans douleur sur vous.
    1. Les informations sur votre navigateur :
      • Le navigateur que vous utilisez : Default Browser.
      • La version de votre navigateur : 0.0.
      • Votre système d'exploitation : unknown.
      • est-ce qu'il accepte les cookies (le vôtre accepte les cookies) ;
      • est-ce qu'il gère les applets java, javascript ? (Le vôtre ne gère pas les applets java, ne gère pas javascript.)
    2. Savoir d'où vous venez :
      • la page d'où vous venez.  ;
      • l'adresse IP de votre machine : 34.224.102.60, et son adresse domainisée (pour vous il s'agit de « ec2-34-224-102-60.compute-1.amazonaws.com »).
        En plus le nom de la machine permet peut-être de deviner votre pays.
    3. Les cookies :
      Les cookies doivent être vus comme des variables qui peuvent être conservées entre deux exécutions de la page. Ils sont enregistrés sur la machine cliente. Une utilisation pourrait être :
      C'est votre 1° visite.
    4. En tant qu'internaute, ces indiscrétions sont-elles dangereuses ?
      Elles permettent en tout cas pas mal de choses :
      • N'importe quel site marchand peut vous pister ainsi, et garder l'historique de vos connexions. Il lui suffit d'enregistrer un identifiant sur votre machine, et d'enregistrer dans ses bases de données l'historique de vos actions dans ses pages (vos clics, vos déplacements, ce que vous remplissez dans les formulaires, le temps passé sur chaque page que vous visitez, etc.).
      • N'oubliez pas que votre fournisseur d'accès connaît toutes les pages que vous avez consultées par son intermédaire.
      Il y a quand même des bonnes nouvelles dans tout ça :
      • Si vous vous connectez à internet par l'intermédiaire d'un fournisseur d'accès, votre adresse IP (34.224.102.60) change à chaque connexion... Votre machine devient beaucoup moins facilement identifiable, en tout cas sans la complicité de votre fournisseur d'accès (qui, lui, sait toujours à tout moment à quel utilisateur correspond chaque adresse IP).
        Il faut remarquer que c'est de moins en moins vrai avec les connexions par cable ou ADSL, et il faut éteindre votre box pour que cela se produise.
      • Grâce aux cookies, un site est en effet capable de savoir si vous êtes déjà venu le voir, MAIS :
        • Il ne sait pas réellement qui vous êtes : il sait seulement que vous êtes l'utilisateur n°X ; cela lui permet de savoir ce que vous avez fait d'autre chez lui, en tant qu'utilisateur n°X, mais c'est tout.
          Il n'est pas capable de deviner ce que vous n'avez pas dit : votre nom, votre numéro de carte de crédit, votre numéro de téléphone, l'endroit où vous vivez (bien que l'adresse IP de votre machine lui permette sans doute de deviner votre pays, voir plus haut).
          Attention : si vous donnez ce genre de renseignements (nom, numéro de carte de crédit, numéro de téléphone, endroit où vous vivez) quelque part, ne vous étonnez pas qu'on s'en souvienne...
        • Il suffit de les désactiver, pour que les cookies deviennent inoffensifs (voir ci-dessous).
    5. Comment s'en protéger ?
      • Il est facile de se protéger des cookies. Vous pouvez, au choix :
        • régler votre navigateur pour qu'il refuse les cookies ; cependant certains sites ne vous laissent pas entrer si vous avez désactivé l'option Cookies. Vous allez peut-être avoir envie de laisser les cookies actifs pour visiter ces sites ; si vous êtes vraiment certain que cela en vaut la peine, vous avez peut-être intérêt à regarder les deux points suivants ;
        • régler votre navigateur pour qu'il accepte les cookies, mais qu'il les efface à chaque nouvelle session ;
        • effacer vous-même à la main les cookies ; par exemple dans Firefox, vous allez dans la suite de menus Édition/Préférences/Vie privée, et vous pouvez effacer les cookies (et d'autres choses).
      • Le reste fait partie de la norme HTML. C'est ce qui concerne l'identification de votre machine, de son système d'exploitation et de son navigateur, des pages qui ont été visitées, de votre provenance. La protection est beaucoup plus difficile.
    6. Plus de lecture : http://www.cnil.fr/. Et en particulier Surfer sur internet, ça laisse des traces et Vos traces sur internet.
Dernière modification : 25/8/2016

Semaine du dredi 20 fébrier 2015 : TD n°6 (Cumul=18h)

  • Les commandes linux, suite :
    • Trouver l'adresse IP de sa propre machine : ifconfig (ou /sbin/ifconfig) sous linux ou ipconfig sous windows.
      Trouver l'adresse d'une machine (et plein d'autre chose) : ping
    • telnet/ssh : « prise de contrôle » d'une machine distante. Se connecter par ssh sur gwpedagotec.univ-lille3.fr (IP : 172.31.7.1, accessible seulement depuis l'intérieur du domaine).
      En profiter pour tester la commande who.
    • su (switch user ou substitute user, ouvrir un shell avec un autre compte utilisateur)
      • su patrick (lance un shell avec le compte utilisateur "patrick")
      En profiter pour tester la commande whoami.
    • Le trajet suivi sur internet : traceroute.
  • « Légères » notions de programmation avec Python...
    • Qu'est-ce qu'un langage informatique ? (Voir http://www.grappa.univ-lille3.fr/polys/php/ch02.html)
    • Présentation de l'algorithmique.
      Lecture utile : Initiation à l'algorithmique, de Fabien Torre.
    • Page de ressources, y compris le poly pour python 3.
    • Présentation de Python, page VIII de la préface.
    • Chapitre 1, À l'école des sorciers :
      • L'activité essentielle d'un programmeur est de résoudre des problèmes.
      • Langage machine-langage de programmation.
      • Code source, interprétation
      • Mise au point d'un programe, les différents types d'erreur
    • Chapitre 2, Premiers pas :
      • Calculer avec Python.
      • Données et variables.
      • Noms de variables et mots réservés.
      • Affectation (ou assignation).
      • Afficher la valeur d’une variable.
      • Typage des variables.
      • Affectations multiples.
      • Exercices page 18.
      • Opérateurs et expressions.
      • Exercice page 19.
      • Priorité des opérateurs.
      • Composition.
    • Chapitre 3, contrôle du flux d'instructions :
      • Séquence.
      • Alternative.
      • Opérateurs de comparaison.
      • Instructions composées – blocs d’instructions.
      • Instructions imbriquées.
Dernière modification : 25/8/2016

Semaine du dredi 20 môrs 2015 : TD n°7 (Cumul=21h)

« Légères » notions de programmation avec Python, suite
  • Chapitre 3, contrôle du flux d'instructions :
    • Séquence.
    • Alternative.
    • Opérateurs de comparaison.
    • Instructions composées – blocs d’instructions.
    • Instructions imbriquées.
  • Chapitre 4, instructions répétitives :
    • Réaffectation.
    • Répétitions en boucle – L’instruction while.
    • Premiers scripts, ou comment conserver nos programmes.
  • Chapitre 5, principaux types de données :
    • Les données numériques.
    • Les données alphanumériques.
    • Les listes (première approche).
  • Chapitre 6, fonctions prédéfinies :
    • La fonction print().
    • Interaction avec l’utilisateur : la fonction input().
    • Importer un module de fonctions.
    • Un peu de détente avec le module turtle.
    • Véracité/ fausseté d’une expression.
    • Révision.
Dernière modification : 25/8/2016

Semaine du dredi 27 môrs 2015 : TD n°8 (Cumul=24h)

Faire communiquer des programmes par le réseau
Une série de petits exemples en Python pour comprendre comment des programmes peuvent communiquer.
  • Première version simpliste : une connexion
    1. ##############################################################
    2. #
    3. # Démonstration de connexion - SERVEUR
    4. #
    5. # source: http://openclassrooms.com/courses/apprenez-a-programmer-en-python/le-reseau
    6. ##############################################################
    7.  
    8. # pour les  connexions par socket
    9. import socket
    10.  
    11. # création d'une socket avec adresses Internet et protocole TCP
    12. connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13.  
    14. # associer le port 12800 pour écouter (on peut prendre n'importe
    15. # lequel, mais le client devra se connecter par le même port)
    16. connexion_principale.bind(('', 12800))
    17.  
    18. # lancer l'écoute (on traite au maximum 5 demandes en même temps, mais
    19. # on peut avoir beaucoup plus de connexions actives en même temps)
    20. connexion_principale.listen(5)
    21.  
    22. # accept bloque le programme en attendant une demande de connexion
    23. # d'un client
    24. connexion_avec_client, infos_connexion = connexion_principale.accept()
    25.  
    26. # quand le programme se débloque (une connnexion a été demandée),
    27. # afficher les infos de connexion
    28. print(infos_connexion)
    29.  
    et
    1. ##############################################################
    2. #
    3. # Démonstration de connexion - CLIENT
    4. #
    5. # source: http://openclassrooms.com/courses/apprenez-a-programmer-en-python/le-reseau
    6. ##############################################################
    7.  
    8. # pour les  connexions par socket
    9. import socket
    10.  
    11. # création d'une socket avec adresses Internet et protocole TCP
    12. connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13.  
    14. # tentative de connexion sur le port 12800 du serveur, sur la machine
    15. # locale (si le serveur est sur une autre machine, mettre l'adresse IP
    16. # ou l'adresse domainisée de la machine cible)
    17. connexion_avec_serveur.connect(('localhost', 12800))
    18.  
  • Deuxième version  : début de communication
    1. ##############################################################
    2. #
    3. # Démonstration de communication - SERVEUR
    4. #
    5. # source: http://openclassrooms.com/courses/apprenez-a-programmer-en-python/le-reseau
    6. ##############################################################
    7.  
    8. # pour les  connexions par socket
    9. import socket
    10.  
    11. # création d'une socket avec adresses Internet et protocole TCP
    12. connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13.  
    14. # associer le port 12800 pour écouter (on peut prendre n'importe
    15. # lequel, mais le client devra se connecter par le même port)
    16. connexion_principale.bind(('', 12800))
    17.  
    18. # lancer l'écoute (on traite au maximum 5 demandes en même temps, mais
    19. # on peut avoir beaucoup plus de connexions actives en même temps)
    20. print("Serveur en atente de connexion...")
    21. connexion_principale.listen(5)
    22.  
    23. # accept bloque le programme en attendant une demande de connexion
    24. # d'un client
    25. connexion_avec_client, infos_connexion = connexion_principale.accept()
    26.  
    27. # quand le programme se débloque (une connexion a été demandée),
    28. # afficher les infos de connexion
    29. print("Connexion acceptée depuis l'IP", infos_connexion[0], "sur le port",infos_connexion[1])
    30.  
    31. # envoi d'un message vers le client, la valeur en retour est le nombre
    32. # d'octets envoyés
    33. nbre = connexion_avec_client.send(b"Je viens d'accepter la connexion.")
    34. print(nbre,'octets envoyés')
    35.  
    36. # fermer la connexion
    37. connexion_avec_client.close()
    38. connexion_principale.close()
    39. print("Connexion fermée")
    40.  
    et
    1. ##############################################################
    2. #
    3. # Démonstration de communication - CLIENT
    4. #
    5. # source: http://openclassrooms.com/courses/apprenez-a-programmer-en-python/le-reseau
    6. ##############################################################
    7.  
    8. # pour les  connexions par socket
    9. import socket
    10.  
    11. # création d'une socket avec adresses Internet et protocole TCP
    12. connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    13.  
    14. # tentative de connexion sur le port 12800 du serveur, sur la machine
    15. # locale (si le serveur est sur une autre machine, mettre l'adresse IP
    16. # ou l'adresse domainisée de la machine cible)
    17. print("Tentative de connexion au serveur...")
    18. connexion_avec_serveur.connect(('localhost', 12800))
    19. print("Connexion au serveur réussie.")
    20.  
    21. # Attente d'un éventuel message venant du serveur, et affichagedu message
    22. msg_recu = connexion_avec_serveur.recv(1024)
    23. print ("Message reçu: ", msg_recu)
    24.  
    25. # fermer la connexion
    26. connexion_avec_serveur.close()
    27. print("Connexion fermée")
    28.  
  • Troisième version  : vraie communication
    1. ##############################################################
    2. #
    3. # Démonstration de communication - SERVEUR amélioré
    4. #
    5. # source: http://openclassrooms.com/courses/apprenez-a-programmer-en-python/le-reseau
    6. ##############################################################
    7.  
    8. # pour les  connexions par socket
    9. import socket
    10.  
    11. # paramètres de la connexion côté serveur
    12. hote = ''
    13. port = 12800
    14.  
    15. # création d'une socket avec adresses Internet et protocole TCP
    16. connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    17.  
    18. # associer le port pour écouter
    19. connexion_principale.bind((hote, port))
    20.  
    21. # lancer l'écoute (on traite au maximum 5 demandes en même temps, mais
    22. # on peut avoir beaucoup plus de connexions actives en même temps)
    23. connexion_principale.listen(5)
    24. print("Le serveur écoute à présent sur le port {}".format(port))
    25.  
    26. # attente bloquante d'une demande de connexion
    27. connexion_avec_client, infos_connexion = connexion_principale.accept()
    28.  
    29. # quand le programme se débloque (une connexion a été demandée),
    30. # afficher les infos de connexion
    31. print("Connexion acceptée depuis l'IP", infos_connexion[0], "sur le port",infos_connexion[1])
    32.  
    33. # boucler tant qu'on qu'on ne reçoit pas le message "fin" qui fermera
    34. # la connexion
    35. msg_recu = b""
    36. while msg_recu != b"fin":
    37.     msg_recu = connexion_avec_client.recv(1024)
    38.     # (L'instruction ci-dessous peut lever une exception si le message
    39.     # Réceptionné comporte des accents)
    40.     # affichage du message reçu et envoi de la confirmation
    41.     print(msg_recu.decode())
    42.     connexion_avec_client.send(b"5 / 5")
    43.  
    44. # fermer la connexion
    45. print("Fermeture de la connexion")
    46. connexion_avec_client.close()
    47. connexion_principale.close()
    48.  
    et
    1. ##############################################################
    2. #
    3. # Démonstration de communication - CLIENT amélioré
    4. #
    5. # source: http://openclassrooms.com/courses/apprenez-a-programmer-en-python/le-reseau
    6. ##############################################################
    7.  
    8. # pour les  connexions par socket
    9. import socket
    10.  
    11. # paramètres de la connexion côté serveur
    12. hote = "172.30.110.11"
    13. port = 12800
    14.  
    15. # création d'une socket avec adresses Internet et protocole TCP
    16. connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    17.  
    18. # tentative de connexion sur le serveur
    19. connexion_avec_serveur.connect((hote, port))
    20. print("Connexion établie avec le serveur sur le port {}".format(port))
    21.  
    22. # boucler tant qu'on qu'on n'envoie pas le message "fin" qui fermera
    23. # la connexion
    24. msg_a_envoyer = b""
    25. while msg_a_envoyer != b"fin":
    26.     msg_a_envoyer = input("> ")
    27.     # Peut planter si vous tapez des caractères spéciaux
    28.     msg_a_envoyer = msg_a_envoyer.encode()
    29.     # On envoie le message
    30.     connexion_avec_serveur.send(msg_a_envoyer)
    31.     # réception de la réponse du serveur
    32.     msg_recu = connexion_avec_serveur.recv(1024)
    33.     print(msg_recu.decode()) # Là encore, peut planter s'il y a des accents
    34.  
    35. print("Fermeture de la connexion")
    36. connexion_avec_serveur.close()
    37. print("Connexion fermée")
    38.  
  • Version évoluée : communication simultanée avec plusieurs clients
    1. ##############################################################
    2. #
    3. # Démonstration de communication - SERVEUR évolué (fonctionne avec CLIENT amélioré)
    4. #
    5. # source: http://openclassrooms.com/courses/apprenez-a-programmer-en-python/le-reseau
    6. ##############################################################
    7.  
    8. import socket
    9. import select
    10.  
    11. hote = ''
    12. port = 12800
    13.  
    14. connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    15. connexion_principale.bind((hote, port))
    16. connexion_principale.listen(5)
    17. print("Le serveur écoute à présent sur le port {}".format(port))
    18.  
    19. serveur_lance = True
    20. clients_connectes = []
    21. adresses={}
    22. while serveur_lance:
    23.     # On va vérifier que de nouveaux clients ne demandent pas à se connecter
    24.     # Pour cela, on écoute la connexion_principale en lecture
    25.     # On attend maximum 50ms
    26.     connexions_demandees, wlist, xlist = select.select([connexion_principale],
    27.         [], [], 0.05)
    28.    
    29.     for connexion in connexions_demandees:
    30.         connexion_avec_client, infos_connexion = connexion.accept()
    31.         # On ajoute le socket connecté à la liste des clients
    32.         clients_connectes.append(connexion_avec_client)
    33.         adresses[connexion_avec_client]=infos_connexion[0]+":"+str(infos_connexion[1])
    34.         print(adresses[connexion_avec_client],"vient de se connecter\n")
    35.     # Maintenant, on écoute la liste des clients connectés
    36.     # Les clients renvoyés par select sont ceux devant être lus (recv)
    37.     # On attend là encore 50ms maximum
    38.     # On enferme l'appel à select.select dans un bloc try
    39.     # En effet, si la liste de clients connectés est vide, une exception
    40.     # Peut être levée
    41.     clients_a_lire = []
    42.     try:
    43.         clients_a_lire, wlist, xlist = select.select(clients_connectes,
    44.                 [], [], 0.05)
    45.     except select.error:
    46.         pass
    47.     else:
    48.         # On parcourt la liste des clients à lire
    49.         for client in clients_a_lire:
    50.             # Client est de type socket
    51.             msg_recu = client.recv(1024)
    52.             # Peut planter si le message contient des caractères spéciaux
    53.             msg_recu = msg_recu.decode()
    54.             print("Reçu de",adresses[client],": {}".format(msg_recu))
    55.             client.send(b"5 / 5")
    56.             if msg_recu == "fin":
    57.                 serveur_lance = False
    58.  
    59. print("Fermeture des connexions")
    60. for client in clients_connectes:
    61.     client.close()
    62.  
    63. connexion_principale.close()
    64.  
    On peut utiliser le client précédent (n°3).
HTML/CSS, avant-propos (x)HTML
  • En-tête d'une page HTML5 : pour passer les tests du W3C une page doit avoir la structure suivante :
    <!DOCTYPE html>
    <html>
      <head lang="fr">
        <meta charset="utf-8">
        <title>Un titre si possible intelligent...</title>
      </head>
      <body>
        ....
        ....
      </body>
    </html>
    
    À comparer avec celle nécessaire pour xHTML visible dans la section 2.5 du poly.
    Contrairement à xHTML, l'utilisation des majuscules & minuscules n'est pas différenciée en HTML5.
  • Quelques balises de base (dans leur version la plus simple) valables dans toutes les versions de (x)HTML(5): <h1>, <h2>, etc., <p>, <ul>, <ol>, <li>, <span>, <div> (section 2.6 du poly).
Application directe
Réalisez les trois pages site01.html, site02.html et site03.html. Vos pages doivent absolument passer avec succès les tests du W3C. Vous ne vous occuperez bien entendu pas du tout de la présentation : ce sera fait avec l'étude des CSS.
Sur les machines des salles pédagogiques, vous enregistrez vos pages sous votre répertoire www et vous les visualisez dans le navigateur à l'adresse
http://webserv.pedago.local/~votreLogin/chemin
chemin est le chemin relatif vers votre page depuis www

Dernière modification : 25/8/2016

Semaine du dredi 3 averil 2015 : TD n°9 (Cumul=27h)

Exercice de réflexion

Pourquoi le titre d'un article récent de FranceTVInfo (Piratage de TV5 Monde par des jihadistes : "Du jamais-vu en trente ans") est-il au minimum une grosse ânerie ?
Pour vous aider dans vos réflexions, allez consulter l'historique du web sur Wikipedia.)

HTML5 plus particulièrement
  • Nouveautés en HTML5 : nous nous concentrerons sur les nouvelles balises qui apportent de la sémantique au texte. Vous pourrez comprendre la philosophie derrière HTML5 en vous polongeant dans le livre Dive into HTML5 : http://diveintohtml5.info/. (Voir la page https://fr.wikipedia.org/wiki/HTML5 pour une simple liste de toutes les nouveautés.)
    • main : Définit le contenu principal de la page, il doit être unique dans la page.
    • section : Section générique regroupant un même sujet, une même fonctionnalité, de préférence avec un en-tête, ou bien section d'application web.
    • nav : Section possédant des liens de navigation principaux (au sein du document ou vers d'autres pages).
    • article : Section de contenu indépendante, pouvant être extraite individuellement du document ou syndiquée (flux RSS ou équivalent), sans pénaliser sa compréhension.
    • aside : Section dont le contenu est un complément par rapport à ce qui l'entoure, qui n'est pas forcément en lien direct avec le contenu mais qui peut apporter des informations supplémentaires.
    • hgroup : La balise <hgroup> n'existe plus en HTML5. Eh oui, ce sont des choses qui arrivent quand on travaille sur un truc pas entièrement finalisé.
    • mark : Définit un texte marqué. Surligneur de texte.
    • header : Section d'introduction d'un article, d'une autre section ou du document entier (en-tête de page).
    • footer : Section de conclusion d'une section ou d'un article, voire du document entier (pied de page).

    Vous trouverez sur le web de nombreuses images illustrant l'utilisation de ces balises, comme par exemple celle-ci qui provient de Alsacréation :

    Imbication des balises de base en HTML5

    Inconvénients : elles ne sont pas forcément compatibles avec tous les navigateurs... En particulier les anciens, et en particulier toutes les anciennes versions de IE jusqu'à IE8 compris. Visitez http://html5test.com/ pour connaître le niveau de compatibilité de votre navigateur.

    Les navigateurs autres que IE se contentent d'ignorer les balises qu'ils ne connaissent pas. Votre page ne sera pas présentée selon vos souhaits, mais le contenu sera là quand même.
    IE, lui, ignore le texte qui se trouvent dans de telles balises... Votre page risque d'être intégralement vide... Gênant...

    Pour vous protéger, vous pouvez placer les fichiers html5shiv.js et html5shiv-printshiv.js dans votre répertoire, et ajouter le code suivant dans vos pages web, juste avant </head> :

          <!--[if lt IE 9]>
             <script src="html5shiv.js"></script>
             <script src="html5shiv-printshiv.js"></script>
          <![endif]-->        
    
Acid Test :
Si vous ne comprenez pas pourquoi les informaticiens vous cassent la tête en essayant de vous expliquer qu'Internet Explorer c'est vraiment pas bon, utilisez l'Acid Test, pour tester la compatibilité de votre navigateur avec les standards du W3C (l'organisme mondial chargé d'élaborer et de gérer les standards du web) : (x)HTML
  • Finir les pages de l'exercice et ajouter des liens entre les pages.
Gestion des couleurs en HTML (et CSS) CSS
  • Feuille de style, séparation données-présentation, syntaxe d'une feuille de style.
  • Comme c'est beau les feuilles de style (chapitre 6 du poly).
  • Premier essai : sans CSS et avec CSS.
Dernière modification : 25/8/2016

Semaine du dredi 10 averil 2015 : TD n°10 (Cumul=30h)

Exercice de réflexion

Pourquoi le titre d'un article récent de FranceTVInfo (Piratage de TV5 Monde par des jihadistes : "Du jamais-vu en trente ans") est-il au minimum une grosse ânerie ?
Pour vous aider dans vos réflexions, allez consulter l'historique du web sur Wikipedia.)

CSS Exercice
  • Réaliser le site décrit au chapitre 10 du poly, en adaptant bien entendu à votre propre cas.
    Le résultat de votre travail devra réussir les tests du W3C pour HTML et CSS.
Dernière modification : 25/8/2016

Semaine du dredi 17 averil 2015 : TD n°11 (Cumul=33h)

CSS (suite)
  • Les bugs d'Internet Explorer, les contourner, les utiliser : voir le chapitre 14 du poly.
  • Signature : http://mammouthland.free.fr/cours/css/cours5.php.
  • Feuilles de style différentes pour l'écran et l'impression
         <link rel="stylesheet" type="text/css" href="ecran.css" media="screen" />
         <link rel="stylesheet" type="text/css" href="imprime.css" media="print" />
    Ou aussi dans une même feuille CSS :
          @media print {
             h1 { ... }
          }
          @media screen {
             h1 { ... }
          }
  • Propriétés des liens. (Rappel : hover existe pour n'importe quelle balise.)
  • Propriété display : cacher/montrer une partie du texte, changer le comportement block/inline, etc.
Exercice récapitulatif
  • Réalisez ce site: Les girafes.
  • Ce n'est pas forcément un modèle à essayer de reproduire aveuglément, mais plutôt un exemple destiné à vous donner des idées et vous montrer quelques possibilités des CSS. Vous pouvez utiliser vos propres idées.
    Mais n'oubliez pas que c'est votre dernier exercice de révision avant le contrôle.
  • Vous pouvez d'abord limiter vos ambitions, en particulier sur le menu déroulant, et prendre cette version-ci comme modèle.
Dernière modification : 25/8/2016

Semaine du dredi 24 averil 2015 : TD n°12 (Cumul=36h)

Exercice récapitulatif
  • Réalisez ce site: Les girafes.
  • Ce n'est pas forcément un modèle à essayer de reproduire aveuglément, mais plutôt un exemple destiné à vous donner des idées et vous montrer quelques possibilités des CSS. Vous pouvez utiliser vos propres idées.
    Mais n'oubliez pas que c'est votre dernier exercice de révision avant le contrôle.
  • Vous pouvez d'abord limiter vos ambitions, en particulier sur le menu déroulant, et prendre cette version-ci comme modèle.
Dernière modification : 25/8/2016
Dernière modification : 25/8/2016