Séance 1 : analyse du chargement d’une page Web

Exercice 2 : Prise en main des outils

Exercice 2 : Prise en main des outils

Dans cet exercice, nous allons découvrir et apprendre à manipuler les outils permettant l’analyse des données réseaux et en particulier celles issues d’un fichier HAR. Nous découvrirons comment effectuer des tâches comme décomposer un nom d’hôte, ou obtenir la localisation d’une machine à partir de son adresse IP. Dans cet exercice nous utiliserons le fichier example.har qui correspond au chargement de la page http://exemple.com.

Cet exercice est à faire dans le fichier etapes_preliminaires.py.

2.1. Prérequis

Téléchargez l’ensemble des fichiers fournis et travaillez dans le zip extrait. Ce dossier contient notamment :

  1. Le fichier etapes_preliminaires.py
  2. Le fichier analyse_fichier_HAR.py
  3. Le fichier example.har, contenant le journal HAR du chargement de la page http://exemple.com.
  4. Les fichiers IP2LOCATION-LITE-DB5.BIN et IP2LOCATION-LITE-DB5.IPV6.BIN, contenant des bases de géolocalisation d’IP (à récupérer sur le site https://lite.ip2location.com/).

Le code fourni utilise plusieurs autres dépendances à installer via le terminal de Spyder :

  1. Le paquet Haralyzer. Commande d’installation : pip install haralyzer
  2. Le paquet IP2Location. Commande d’installation : pip install IP2Location
2.2. Analyse d’un nom réseau (hostname)

Un nom hostname permet d’identifier une machine (ou serveur) et est composé de plusieurs parties : Top Level Domain (TLD) et domaine de second niveau. Par exemple dans le hostname moodle.insa-lyon.fr désignant le serveur moodle de l’INSA-Lyon, .fr est le TLD et insa-lyon.fr est le domaine de second niveau (et non pas moodle.insa-lyon.fr).

(a) Complétez les fonctions get_tld et get_2nd_lvl_domain qui prennent toutes les deux en paramètre un hostname (sous la forme d’une chaîne de caractère) et qui retournent respectivement le TLD et le domaine de second niveau.
Note : Pour répondre à la question précédente, vous pourrez vous aider de la fonction split qui permet de décomposer une chaîne de caractère étant donné un séparateur (ici ’.’).

2.3. Localisation à partir de l’adresse IP

Il est possible d’obtenir la position géographique d’une machine en consultant une base donnée dédiée comme la base IP2Location. La librairie IP2Location stocke les informations de géolocalisation sous forme d’enregistrement. La documentation de cette librairie est disponible ici.

Le code fournis contient déjà le chargement des bases de localisation pour les adresses IPV4 et IPV6 :


1     baseIPV4 = IP2Location.IP2Location("IP2LOCATION−LITE−DB5.BIN")
2     baseIPV6 = IP2Location.IP2Location("IP2LOCATION−LITE−DB5.IPV6.BIN")

ainsi que l’initialisation de l’outil ipTools :


ipTools = IP2Location.IP2LocationIPTools()

L’outils ipTools (voir sa documentation) intègre une fonction qui permet de tester si une adresse IP est de type IPV4 ou non (donc IPV6) et dont la docstring est la suivante :


1 def is_ipv4(ip): 
2 '''
3 Vérifie si une adresse IP est de type IPV4
4 Parameters :
5   ip : une adresse IP 
6 Return : 
7   boolean : True si l’IP est V4, False sinon 
8 '''

(b) À l’aide de la fonction is_ipv4 d’ipTools écrivez la fonction affiche_type_adresse qui affiche le type de l’adresse : IPV4 ou IPV6

Il est possible d’interroger une base IP2Location avec la fonction get_all afin d’obtenir un enregistrement regroupant les information de géolocalisation d’une adresse IP donnée en paramètre. Celle-ci prend en paramètre une adresse IP et retourne un enregistrement :


1 rec = base.get_all(ip)

(c) Complétez le code de la fonction get_IP2Loc_record afin qu’elle renvoie l’enregistrement IP2Location d’une adresse IP passée en paramètre (IPV4 ou IPV6). Pensez à choisir la base adaptée à l’adresse en fonction de son type (IPV4 ou IPV6).

Un enregistrement rec d’IP2Location est composé de plusieurs attributs (latitude, longitude, country, country_short ... ) accessibles via la notation pointée : rec.latitude, rec.country

(d) Complétez le code de la fonction get_country_code afin qu’elle retourne le code country_short de l’adresse IP passée en paramètre. La signification des codes est disponible ici.
2.4. Ouverture et lecture d’un fichier HAR

Un fichier HAR contient une information structurée dans un format JSON. Il peut être ouvert et lu grâce à la librairie haralyzer. L’information du fichier HAR est organisée en entrées (entries) qui représentent chacune un échange réseau. L’ensemble des entrées peut être parcouru comme une liste à l’aide d’une boucle for. Chaque entrée est composée de plusieurs attributs qui représentent les caractéristiques de l’échange : serveur contacté, volume de données envoyées/reçues, date, Pour cette question, on utilisera le fichier fournis example.har correspondant au chargement de la page example.com.

(e) Complétez le code pour afficher, pour chaque entrée, l’adresse IP du serveur, son port et son hostname

Note : la liste des attributs d’une entrée et leur noms sont disponible dans la documentation de haralyzer :

Note : l’attribut request permet d’obtenir des informations complémentaires (dont le nom d’hôte), également décrites dans la documentation.