Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Python et l'analyse forensique
  3. Bibliothèque standard
Extrait - Python et l'analyse forensique Récupérer et analyser les données produites par les ordinateurs
Extraits du livre
Python et l'analyse forensique Récupérer et analyser les données produites par les ordinateurs Revenir à la page d'achat du livre

Bibliothèque standard

Bibliothèques utilitaires

1. Fonctions utilitaires

a. Afficher avec print

La fonction print() permet, par défaut, d’afficher une ou plusieurs valeurs sur la sortie standard (stdout). Ces valeurs sont implicitement converties en chaîne de caractères à l’aide de la fonction str() qui appellera la méthode __str__() de l’objet à afficher.

L’utilisation la plus simple de print

print(VALEUR) 

Cette fonction dispose de différentes options destinées à indiquer le descripteur de fichier sur lequel écrire, le séparateur de valeurs et le suffixe à ajouter. Les valeurs par défaut du séparateur et du suffixe sont l’espace et le retour à la ligne.

Un en-tête plus complet

print(VALEUR1, VALEUR2, ..., sep=' ', end='\n', file=sys.stdout, flush=False) 

L’argument sep indique le séparateur, end le suffixe et file le descripteur de fichier.

>>> print ("toto", "titi") 
toto titi 
>>> print ("toto", "titi", sep ":v, end "\n\n", file=sys.stdout) 
# Affichage de deux valeurs de type chaînes de caractères séparées 
par ":" avec deux retours à la ligne à la fin. 
toto:titi   

Le paramètre flush, quant à lui, indique, s’il vaut True, qu’il faut mettre à jour le descripteur de fichier immédiatement après l’exécution de la fonction print.

On peut facilement observer un des comportements du cache d’écriture sur les sorties standard et sorties d’erreur (stdout et stderr) affichées dans une console. Le comportement par défaut (avec flush=False) est d’attendre un retour à la ligne pour mettre la sortie à jour. L’argument flush permet de forcer une mise à jour immédiate.

Comportement de l’argument flush

La différence des exemples suivants est visible lors de l’exécution dans un interpréteur interactif.

>>> import time 
>>> for elem in range(3): 
...    print(elem, end=' ', flush=False) 
...    time.sleep(1) 
...  
0 1 2 
>>>  
>>> for elem in range(3): 
...    print(elem, end=' '...

Opérations de base sur un système de fichiers

1. Se déplacer et explorer l’arborescence des dossiers

a. Les chemins d’accès : les paths

Les systèmes d’exploitation inspirés par UNIX partagent leur fonctionnement au niveau de l’organisation des fichiers et des dossiers. L’ensemble des objets accessibles sont regroupés au sein d’une seule structure arborescente. Il existe donc une racine unique à cet arbre, noté avec le caractère barre oblique « / » (slash en anglais). Les fichiers ou dossiers sont ensuite identifiés au sein de cet arbre avec des « chemins d’accès » (path en anglais).

Ces chemins représentent l’ensemble des répertoires parcourus depuis la racine jusqu’au nom de l’objet désigné (fichier ou dossier). Les répertoires sont séparés par des barres obliques « / ».

Le caractère barre oblique « / » a deux significations dans un chemin : le premier caractère « / » désigne la racine, les autres sont des séparateurs de dossiers.

Un chemin d’accès

/home/user/exemple 

Désigne un objet (fichier, dossier ou lien) nommé exemple, contenu dans un dossier « user » lui-même contenu dans un dossier « home ». Ce dernier est, quant à lui, « à la racine » : il est un sous-dossier de « slash ».

b. Le dossier courant cwd et le déplacement dans l’arborescence

Le dossier courant (en anglais Current Working Directory abrégé cwd) est un élément de contexte fondamental dans l’évaluation des chemins (paths). Il existe en réalité deux formes de chemins : absolus et relatifs. Les chemins absolus (vus dans la section précédente) décrivent l’ensemble du parcours de « la racine » au dossier contenant l’objet désigné.

Un chemin qui commence par une barre oblique « / » est donc un chemin absolu. 

Les chemins relatifs sont, comme leur nom l’indique, relatifs au cwd. Ils commencent par le caractère « . »....

Opérations de base sur le réseau

1. TCP/UDP

a. Python et les sockets

Les sockets sont les abstractions qui représentent les extrémités de canaux de communications logiciels. Le terme socket peut être traduit par « prise », dans le sens « qui permet un branchement ». La création d’un socket requiert trois arguments : le domaine, le type et le protocole. Le domaine, aussi appelé famille, désigne une famille de protocoles regroupant un domaine d’application. Cet argument peut désigner les « sockets Unix » (AF_UNIX) pour la communication entre processus sur une même machine, les domaines IPv4 (AF_INET) ou IPv6 (AF_INET6), ou des domaines plus ésotériques tels que X25 (AF_AX25) dédiés à la radioamateur.

Les sockets UNIX peuvent être comparés à des pipes bidirectionnels. Là où un pipe a une entrée et une sortie (respectivement en écriture et en lecture seule), les sockets UNIX permettent aux deux participants d’envoyer et de recevoir via cet unique canal. D’autres nuances plus subtiles existent, mais ne seront pas abordées ici.

Pour ne citer qu’eux, TCP et UDP sont regroupés dans les familles IP (Internet Protocol). Lors de la création d’un socket, ils sont désignés par leur type, attendu en second argument. Il décrit le mode de communication. Par exemple, le type flux (SOCK_STREAM) permet la création d’un socket bidirectionnel avec connexion explicite (et donc détection de la perte de connexion) et un mécanisme de détection et correction d’erreurs.

Dans les familles IPv4 et IPv6, le seul protocole de ce type est TCP.

À l’opposé, le type datagramme (SOCK_DGRAM) désigne un mode sans connexion explicite et sans contrôle des erreurs dont le seul représentant dans les familles IP est UDP.

Le dernier argument, le protocole, permet de sélectionner un protocole dans un type d’une famille donnée. Dans le cas de TCP/IP et UDP/IP, cet argument sera toujours zéro.

Le module socket

C’est ce module qui donne accès à une interface de manipulation des sockets. Il contient un ensemble de constantes désignant les familles et les types de protocoles....