Formations à l'informatique et à l'électronique

Auteur : SD
Créé le : 03-12-2022

Langage C - Projet "Ping Them All"

La suite (partie 2)


Le but est de créer un programme permettant d’obtenir le résultat de plusieurs commandes ping envoyées vers des adresses IP ou des noms de domaines différents.

Ceci peut-être utile, pour un administrateur réseau, par exemple pour tester d’un seul coup la connectivité de toutes les imprimantes de son réseau local.

Vous ferez ce projet avec l'éditeur VsCode et le compilateur GCC ou TCC.

Sommaire

Version 1

La fonction "system" (stdlib.h), permet d'exécuter une commande système.

Exemple

#include <stdio.h>
#include <stdlib.h>

const char EACCENTA = 0x82; // é

int main()
{   
    // La fonction "system" (stdlib.h), permet d'exécuter une commande système
    // par exemple ici : la commande cls qui efface la fenêtre de terminal
    system("cls");

    // Autre exemple avec la commande ipconfig :
    system("ipconfig");

    // Envoie d'un ping vers une adresse IP
    // Retour vaut 0 si le ping s'est correctement exécuté
    printf("\n\nping 8.8.8.8");
    int retour = system("ping 8.8.8.8 | findstr /r /c:\"[0-9] *ms\" > NUL"); // > NUL évite que la commande ping affiche quelque chose
    printf("\nping 8.8.8.8 a renvoy%c  : %d", EACCENTA, retour);

    // Envoie d'un ping vers un nom de domaine
    printf("\n\nping google.fr");
    retour = system("ping google.fr | findstr /r /c:\"[0-9] *ms\" > NUL");
    printf("\nping google.fr a renvoy%c : %d", EACCENTA, retour);

    // Envoie d'un ping vers un nom de domaine qui n'existe pas
    // Retour vaut 1 car le ping ne s'est pas correctement exécuté
    printf("\n\nping google.fra");
    retour = system("ping google.fra | findstr /r /c:\"[0-9] *ms\" > NUL");
    printf("\nping google.fr a renvoy%c : %d", EACCENTA, retour);

    // Pour éviter que la fenêtre se ferme à la fin du programme
    printf("\n\n");
    system("pause");

    return 0;
}

Ecrire un programme qui produit l’affichage ci-dessous :

résultat du prgramme ping them all v1 dans la console Windows

OK indique un serveur qui a répondu au ping

Un X indique un serveur qui n’a pas répondu au ping

Contraintes à respecter

Aide

Vous aurez besoin de la fonction « strcat » qui permet de concaténer 2 chaines de caractères :

https://cplusplus.com/reference/cstring/strcat/

Faire constater au professeur

Version 2 – De la couleur !

On désire mettre un peu de couleur (voir exemple).

Voici une capture d’écran du résultat attendu :

résultat du prgramme ping them all v1 dans la console Windows

Contraintes à respecter

Vous devez créer une fonction dont le prototype sera :

void execPing(HANDLE hConsole, char* ip);

ou

void execPing(HANDLE hConsole, char ip[]);

Cette fonction enverra un "ping" vers l’ip passée en paramètre, et, en fonction du résultat de la commande "ping", affichera l’ip suivi de " : OK" ou " : X".

Rappel

Exemple de code pour mettre de la couleur dans la console :
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>    // Pour GetStdHandle et SetConsoleTextAttribute

// Définition des couleurs sous formes de constantes
#define NOIR        0x00
#define GRIS_CLAIR  0x07
#define GRIS_FONCE  0x08
#define BLEU        0x09
#define VERT        0x0A
#define ROUGE       0x0C
#define ROSE        0x0D
#define JAUNE       0x0E
#define BLANC       0x0F

int main (void) {
    // Permet de récupérer un pointeur sur la console
    // A faire une seule fois au début du main
    HANDLE  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    // Pour changer le couleur du texte, il suffit d'appeler 
    // SetConsoleTextAttribute en précisant la couleur
    SetConsoleTextAttribute(hConsole, JAUNE);
    printf("\nTexte jaune");

    SetConsoleTextAttribute(hConsole, ROUGE);
    printf("\nTexte rouge");

    SetConsoleTextAttribute(hConsole, VERT);
    printf("\nTexte vert\n");

    SetConsoleTextAttribute(hConsole, GRIS_CLAIR);

    // Pour éviter que la fenêtre se ferme à la fin du programme
    printf("\n\n");
    system("pause");

    return 0;
}

Faire constater au professeur

La suite (partie 2)


Vous avez apprécié cet article ? Partagez le !