Blog ENI : Toute la veille numérique !
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
En raison d'une opération de maintenance, le site Editions ENI sera inaccessible le mardi 10 décembre, en début de journée. Nous vous invitons à anticiper vos achats. Nous nous excusons pour la gêne occasionnée
  1. Livres et vidéos
  2. Cyberdéfense
  3. Création d'outils avec Python
Extrait - Cyberdéfense La sécurité de l'informatique industrielle (domotique, industrie, transports)
Extraits du livre
Cyberdéfense La sécurité de l'informatique industrielle (domotique, industrie, transports) Revenir à la page d'achat du livre

Création d'outils avec Python

Introduction

Dans ce chapitre sera expliquée la manière de réaliser des outils simples à mettre en œuvre mais néanmoins efficaces. Avant toute chose, il faut définir la notion d’outil. Un outil (dans le sens employé ici) est un programme qui réalisera une suite d’actions et/ou de tests de façon automatisée afin de mettre à l’épreuve un système informatique ou industriel.

Afin de mettre ces notions en pratique, le support utilisé sera le langage Python qui dispose de nombreuses qualités et vous permettra de créer des outils relativement rapidement.

Le but ici n’est pas de passer en revue toutes les possibilités et subtilités de Python, mais d’acquérir les bases de ce langage.

À l’issue de ce chapitre, vous serez en possession de plusieurs outils que vous aurez développés dans le cadre de travaux pratiques, mais aussi, et surtout, vous serez en mesure de développer des outils répondant à vos besoins.

Pourquoi Python ?

Le choix de Python n’est pas anodin. En effet, comme précisé dans l’introduction, ce langage possède bien des avantages. En voici une liste non exhaustive :

  • Prise en main rapide.

  • Syntaxe « concise ».

  • Multi-plateformes.

  • Grande communauté, de nombreux forums traitant de Python existent.

  • Nombreuses bibliothèques (codes réutilisables) disponibles.

Même si aucun logiciel n’est requis pour développer un outil sous Python, un simple éditeur de texte suffisant, l’utilisation d’un environnement de développement intégré (EDI) appelé PyCharm sera privilégiée. Les procédures d’installation de Python et PyCharm pour Windows 7 et Ubuntu 14.04 sont détaillées ci-après.

La version de Python qui sera utilisée dans ce chapitre est la version 2.7. Une version plus récente existe ; cependant, certaines bibliothèques ne sont pas encore compatibles avec celle-ci.

Mise en place de l’environnement de test

1. Installation de Python et PyCharm sous Windows 7

 Avant toute chose, il faut installer Python. Rendez-vous sur http://www.python.org/downloads et cliquez sur Download Python 2.7.x. Ici c’est la version 2.7.6, mais le dernier chiffre peut être différent.

Téléchargement de Python

 Cliquez maintenant sur Windows X86-64 MSI Installer et téléchargez le fichier.

Installation de Python et PyCharm sous Windows 7

 Exécutez le fichier nouvellement téléchargé.

Un assistant va vous accompagner durant tout le processus d’installation. Le seul point de vigilance est qu’il faudra veiller à sélectionner le choix Add python.exe to path.

 Une fois l’installation terminée, rendez-vous sur www.jetbrains.com/pycharm/download afin de télécharger PyCharm.

Télécharger PyCharm - l'interface

 Cliquez sur Download Community, enregistrez le fichier et exécutez-le afin d’installer PyCharm. À nouveau, un assistant vous accompagnera dans le processus d’installation.

 Une fois l’installation terminée, lancez PyCharm une première fois afin de procéder à sa configuration. Lors du premier lancement, PyCharm vous propose de récupérer une ancienne configuration. Si c’est la première fois que vous installez PyCharm sur votre ordinateur, sélectionnez la ligne commençant par I do not have a previous [...] puis cliquez...

Débuter avec Python

Une fois notre environnement de développement en place, vient l’écriture des premiers programmes. Avant toute chose, il faut acquérir les bases de Python.

1. Hello World

Il est fréquent que le premier programme qu’une personne réalise soit un Hello World. Le programme ne fait rien de particulier si ce n’est afficher le message « Hello World ».

La première chose à faire est de lancer PyCharm afin de créer un nouveau projet.

 Sur l’écran d’accueil de PyCharm, cliquez sur Create New Project.

Le programme PyCharm Community Edition

 Un nom doit être choisi pour ce projet, par exemple nouveauProjet. Renseignez le champ puis cliquez sur OK.

Fenêtre nouveau projet de PyCharm

Le projet est maintenant créé mais il est vide, il faut lui ajouter un fichier.

 Pour cela, faites un clic droit sur le nom de votre projet dans la colonne de gauche, allez dans le menu New et cliquez sur Python File.

images/R07I27.png

 Nommez le fichier nouvellement créé et cliquez sur OK.

images/R07I28.png

PyCharm a ajouté une ligne en début du fichier. Cette ligne permet de renseigner l’auteur du fichier. PyCharm se sert du nom de l’utilisateur de l’ordinateur afin de renseigner cette information. Ici, l’utilisateur s’appelle livre_eni, PyCharm ajoute donc au début du fichier :


__author__ = "livre_eni"
 

Pour s’assurer que les caractères accentués...

Les variables et listes

1. Les variables

a. Déclarer une variable

Profitons de ce premier programme pour introduire la notion de variable. Une variable est tout simplement une donnée en mémoire qui possède un nom et une valeur. Admettons qu’un programme gère les informations d’identité d’une personne. Il serait possible de stocker son âge dans une variable nommée ageDeLaPersonne et qui pourrait contenir la valeur 42. Les variables peuvent contenir plusieurs types de données. On peut citer par exemple :

  • Les chaînes de caractères, par exemple "Python c’est pratique". Les chaînes de caractères doivent être délimitées par des guillemets. En cas d’oubli, le programme refusera de s’exécuter.

  • Des nombres entiers tels que 5 ou 1000 ou encore -45.

  • Des nombres à virgule : 4.7 ou 12.64 ou -3.67, le délimiteur des dixièmes étant le point et non pas la virgule.

  • Des booléens qui ne peuvent prendre que deux valeurs : vrai ou faux, représentées par les mots-clés True et False. La majuscule est importante.

Pour créer une variable, il suffit d’écrire le nom désiré suivi de l’opérateur d’affectation (=) et sa valeur, par exemple :


villeDeResidence="Paris" 
age=20 
poids=78.5 
personneEstMajeur=True
 

Le nom d’une variable doit répondre à quelques règles :

  • Il doit commencer par une lettre non accentuée ou un underscore _.

  • Il peut contenir par la suite des chiffres.

  • Il ne doit pas être un mot réservé dans le langage Python.

Les noms de variables suivants sont valides :


age 
NoM 
AgePersoNNE_ 
_PaquetDe100
 

mais ceux-ci ne le sont pas :


âge 
3Prix 
with
 

Une liste des mots-clés est disponible sur le site officiel de Python : http://docs.python.org/2/reference/lexical_analysis.html#keywords

b. Utiliser une variable

Pour utiliser une variable, il suffit de préciser son nom. Ainsi, le code vu précédemment peut être modifié de cette façon sans changer son fonctionnement :


__author__ = "livre_eni" 
# -*- coding: utf-8 -*- 
 
messageDeBienvenue="Hello World" 
print messageDeBienvenue
 

À partir...

Les fonctions

1. Qu’est-ce qu’une fonction ?

Une fonction est une partie d’un programme pouvant prendre en entrée des variables (appelées, dans ce contexte, arguments de fonction) et retournant parfois une valeur. À la différence du programme "principal", le code de la fonction n’est exécuté que si la fonction est utilisée (on parle d’appel de fonction). Écrire des fonctions permet de réutiliser une même portion de code à plusieurs endroits. Admettons que le code d’une fonction fasse 20 lignes. En faisant de multiples copier-coller de ces 20 lignes de code, le risque d’erreur est important. Si une erreur était décelée dans ces 20 lignes, il faudrait faire autant de corrections que de fois où le code a été copié-collé avec le risque de ne pas corriger l’intégralité du programme. En écrivant une fonction, les 20 lignes sont écrites une fois et une ligne suffit à chaque fois qu’il faut faire appel à cette fonction. De plus, si une erreur était décelée, il suffirait de la corriger une seule fois. Le code est donc plus concis, réutilisable et surtout plus facilement maintenable.

2. Fonction sans argument ni retour

Pour déclarer (ou créer) une fonction qui ne prend aucun argument, il suffit d’écrire...

Les structures conditionnelles

1. Principe des structures conditionnelles

Les structures conditionnelles sont des éléments essentiels dans un programme. En effet, il est souvent nécessaire d’adapter le comportement d’un programme au fur et à mesure de son exécution. On peut imaginer un programme qui, selon l’âge d’une personne, répond si elle est majeure ou mineure.

2. Qu’est-ce qu’une condition ?

Une condition peut être exprimée comme ceci : "La variable age est-elle égale à 3 ?" ou encore "La taille de la liste utilisateurs est-elle inférieure à 20 ?".

D’un point de vue syntaxique, une condition peut s’exprimer à travers l’utilisation d’opérateurs de comparaison ou en utilisant la valeur de retour d’une fonction.

Le résultat d’une condition est toujours un booléen : soit True, soit False.

3. Les opérateurs de comparaison

Voici une liste des opérateurs de comparaison :

Opérateur

Symbole

Égalité

==

Différent

!=

Inférieur

<

Inférieur ou égal

<=

Supérieur

>

Supérieur ou égal

>=

La comparaison "La variable age est-elle supérieure ou égale à 18 ?" s’écrira donc :


age>=18
 

4. if, elif et else

Ces trois mots, qui peuvent être traduits par « si », « sinon si » et « sinon », permettent de définir une structure conditionnelle.

Leur utilisation est simple. Il suffit d’écrire le mot-clé, un espace, la condition suivie du caractère deux-points :.

Le code devant être exécuté quand la condition est remplie...

Les boucles

Souvent dans un programme il est nécessaire de répéter plusieurs fois une suite d’opérations. La solution la plus simple serait de recopier le code à exécuter autant de fois que nécessaire. Cependant, cette solution n’est pas envisageable car elle complique sérieusement l’écriture et la maintenance du code. Imaginez un programme devant afficher une phrase un million de fois. Sans l’utilisation de boucles, l’écriture d’un tel programme prendrait plusieurs jours, alors qu’avec une boucle une minute suffirait.

1. Boucles bornées

Une boucle est dite bornée si on sait quantifier le nombre de fois où la suite d’opérations va s’exécuter. En langage commun, cela pourrait se traduire par « réalise cette action 5 fois ». La façon la plus simple de réaliser ce type de boucle est d’utiliser une liste. La liste est un type de variable dit itérable, c’est-à-dire qu’on peut parcourir chacun des éléments de cette liste en utilisant le mot-clé for.

Voici un exemple permettant d’afficher tous les éléments d’une liste de nombres entre 0 inclus et 5 inclus :  


maListe = [ 0, 1, 2, 3, 4, 5] 
for elementEnCour in maListe : 
      print  elementEnCour
 

Ce qui va produire...

Récupération d’une saisie clavier

Il est fréquent de demander des informations à l’utilisateur afin de modifier le comportement du programme. Par exemple, on peut lui demander son nom afin de le saluer.

Pour récupérer une saisie clavier, on utilise la fonction raw_input().


print "Entrez votre nom"  
nomUtilisateur=raw_input() 
print "Bonjour "+nomUtilisateur
 

Attention, raw_input() renvoie une valeur de type chaîne de caractères.

Opérations sur les fichiers

Beaucoup de programmes nécessitent de sauvegarder des informations. Parmi ces informations, on peut trouver des noms d’utilisateurs et les mots de passe associés, mais aussi des informations sur la configuration du programme. La façon la plus simple de stocker ces informations est de les enregistrer dans un fichier.

1. Lire un fichier

Lire dans un fichier se fait en trois étapes :

  • Ouverture du fichier en mode lecture.

  • Récupération des données.

  • Fermeture des fichiers.

L’ouverture d’un fichier se fait en utilisant la fonction open(). Celle-ci prend généralement deux arguments :

  • L’emplacement du fichier sous forme de chaîne de caractères.

  • Le mode d’ouverture représenté via un caractère : dans le cadre d’une lecture, c’est "r".

Pour ouvrir un fichier nommé config.txt, on procédera comme ceci :


monFichier=open("config.txt", "r")
 

Une fois le fichier ouvert, on peut récupérer son contenu de plusieurs façons.

Il est possible d’obtenir tout le contenu dans une seule variable en utilisant :


informations=monFichier.read()
 

La variable informations est une chaîne de caractères contenant l’intégralité du fichier. Ce n’est pas forcément très pratique à utiliser car toutes...

Les objets et classes

Cette section explique l’étrange notation nomDeVariable.nomDeFonction() vue précédemment.

Avant toute chose, il faut définir ce qu’est une classe. Une classe est un schéma, schéma qui explique comment tel type de variable fonctionne, quelles sont ses caractéristiques et les actions qu’elle peut réaliser.

Un robot a comme caractéristiques sa taille, sa couleur et, pourquoi pas, un nom. Il peut également réaliser diverses actions telles que parler, avancer ou danser.

Au stade de l’étude, ce robot n’est qu’un schéma, puis il devient un objet.

Il est possible de faire sensiblement la même chose avec Python. On parle alors de programmation orientée objet (POO). L’avantage de la POO réside dans la modularité et la facilité de maintenance des programmes ; elle rend également le code plus lisible.

Une variable caractérisant un objet est appelée attribut, et une fonction spécifique à un objet est appelée méthode.

Dans la section précédente Opérations sur les fichiers, la fonction open() a été appelée et a renvoyé une valeur de retour :


monFichier = open("config.txt", "w")
 

monFichier est un objet. Pour s’en assurer, il suffit d’utiliser la fonction type(). Celle-ci retournera :...

Exercice

Il est temps de mettre en pratique les notions précédentes.

Tout d’abord, demandez à l’utilisateur son nom et souhaitez-lui la bienvenue.

Puis, demandez-lui le véhicule qu’il désire conduire, voiture ou moto (et uniquement ces deux choix), ainsi que sa couleur.

Les véhicules seront placés de façon imaginaire sur un repère avec comme coordonnées de base (0;0). Vous êtes libre de faire une ou deux classes distinctes.

La moto se déplace de deux cases à la fois, la voiture d’une seule.

Demandez à l’utilisateur combien de mouvements il désire faire et proposez-lui à chaque fois le choix entre A, R, M, D, pour avancer, reculer, monter, descendre.

Attention, la saisie doit être valide. Si l’utilisateur demande -1 déplacement, il faut lui demander une valeur correcte.

Une fois le mouvement effectué, les nouvelles coordonnées doivent être affichées à l’écran et ajoutées à un fichier texte nommé mouvements.txt (un mouvement par ligne).

N’oubliez pas de fermer le fichier et d’ajouter le caractère de retour à la ligne lors de l’écriture dans le fichier.

Le corrigé de l’exercice est disponible en téléchargement depuis la page Informations générales dans un fichier nommé...

Exécuter un script sans PyCharm

PyCharm est un environnement de développement. Une fois un projet finalisé, il est possible de se passer de PyCharm et d’exécuter un script sans celui-ci. Voici la méthode à appliquer afin d’exécuter le script bonjour.py situé dans le projet Bonjour.

1. Sous Windows

 Ouvrez l’interpréteur de commandes en cliquant sur le menu Démarrer - Tous les programmes - Accessoires puis Invite de commandes. Une fois l’interpréteur ouvert, tapez les lignes suivantes :

  • Afin de vous rendre dans le dossier de votre projet :


cd C:\Users\nomDeLUtilisateur\PycharmProjects\Bonjour\
 
  • Et pour exécuter le script :


python.exe bonjour.py
 

2. Sous Ubuntu

 Ouvrez un terminal comme expliqué dans la procédure d’installation de PyCharm. Une fois le terminal ouvert, tapez les lignes suivantes :

  • Afin de vous rendre dans le dossier de votre projet :


cd /home/nomDeLUtilisateur/PycharmProjects/Bonjour\
 
  • Et pour exécuter le script :


python2 bonjour.py
 

Pour approfondir

Il existe encore beaucoup de choses à étudier sur Python telles que les décorateurs, générateurs, la notion d’héritage et bien plus encore. De nombreux ouvrages sur ces thèmes existent, par exemple : Python - Les fondamentaux du langage aux Éditions ENI.