Gestion d'un parc

samuel_95 Messages postés 2 Statut Membre -  
samuel_95 Messages postés 2 Statut Membre -
Bonjours je me présente Freddy.
Je suis étudiant en BTS Informatique de Gestion et je fais un programme qui doit être capable de saisir et d'afficher l"adresse IP d'une machine qui se trouve dans un parc choissit ainsi que l'adresse MAC,le masque, la passerelle le 1er et 2ème serveur DNS et le Nom du NETBIOS. Mon programme doit aussi me permettre de faire une sauvegarde du parc dans un fichier "x" que je dois ouvrir lire et fermer
J'utilise un compilateur DJGPP sur DOS et mon programme se compile mais j'ai des erreurs que je n'arrive pas à résoudre SVP aidez moi Merci d'avance

1 réponse

  1. samuel_95 Messages postés 2 Statut Membre
     
    Bonjours je me présente Freddy.
    Je suis étudiant en BTS Informatique de Gestion et je fais un programme qui doit être capable de saisir et d'afficher l"adresse IP d'une machine qui se trouve dans un parc choissit ainsi que l'adresse MAC,le masque, la passerelle le 1er et 2ème serveur DNS et le Nom du NETBIOS. Mon programme doit aussi me permettre de faire une sauvegarde du parc dans un fichier "x" que je dois ouvrir lire et fermer
    J'utilise un compilateur DJGPP sur DOS et mon programme se compile mais j'ai des erreurs que je n'arrive pas à résoudre SVP aidez moi Merci d'avance
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////// Projet de Carnet d'adresse IP ///////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    /***************************************Gestion d'un parc machine ****************************************/

    #include <stdio.h>
    #include <string.h>
    #include <fcntl.h>

    //Taille des champs
    #define SIZE_IP 4
    #define SIZE_MAC 6
    #define SIZE_MASK 4
    #define SIZE_NETBIOS 16
    #define SIZE_PARC 100

    // Definition des champs
    #define MAC 1
    #define IP 2
    #define MASK 3
    #define PASS 4
    #define DNS1 5
    #define DNS2 6
    #define NBT 7

    // Definition de type
    typedef unsigned char AdrIp [SIZE_IP];
    typedef unsigned char AdrMac [SIZE_MAC];
    typedef unsigned char NomNetBios [SIZE_NETBIOS];

    typedef struct { //structure d'une machine
    char AdrMac mac;
    char AdrIp ip;
    char mask;
    char pass;
    cha dns1;
    char dns2;
    char NomNetBios nom;
    } Machine;

    typedef struct { //structure du parc
    Machine CA [SIZE_PARC];
    int premlib;
    } Parc;
    Parc;

    /*******************************************Fonction d'affichage***************************************************/
    void MachAff(Machine m)
    {
    puts("Machine :");
    printf("Adresse MAC : %2x-%2x-%2x-%2x-%2x-%2x\n",m.mac[0],m.mac[1],m.mac[2],m.mac[3],m.mac[4],m.mac[5]);
    printf("Adresse IP : %d.%d.%d.%d\n",m.ip[0],m.ip[1].m.ip[2],m.ip[3]);
    printf("Masque : %d.%d.%d.%d\n",m.mask[0],m.mask[1].m.mask[2],m.mask[3]);
    printf("Passerelle : %d.%d.%d.%d\n",m.pass[0],m.pass[1].m.pass[2],m.pass[3]);
    printf("Adresse DNS 1 : %d.%d.%d.%d\n",m.dns1[0],m.dns1[1].m.dns1[2],m.dns1[3]);
    printf("Adresse DNS 2 : %d.%d.%d.%d\n",m.dns2[0],m.dns2[1].m.dns2[2],m.dns2[3]);
    printf("Nom NetBios : %s\n",m.nom);
    puts("");
    }

    /********************************************Fonction de saisie*******************************************/

    // Test de borne d'un octet dans un int
    int isOctet (int 0)
    { return o>0 && o<256; }

    //Saisie Validée d'une adresse MAC
    void MacSaisie (AdrMac mac)
    {
    int a, b, c, d, e, f, ret;
    while (1) {
    printf("Adresse MAC : ");
    ret=scanf("%x-%x-%x-%x-%x-%x", &a, &b, &c, &d, &e, &f);
    if(ret<6) {
    puts("Valeur(s) non hexadécimale(s) ou moins de 6 valeurs");
    while (getchar()!='\n'); //vidage du buffer non lu par scanf

    continue;
    }
    if (isOctet(a) && isOctet(b) && isOctet(c) && isOctet(d) && isOctet(e) && isOctet(f)) break;
    else puts("Valeur(s) hors bornes (0-ff)");
    }
    mac[0]=(unsigned char) a; mac[1]=(unsigned char) b;
    mac[2]=(unsigned char) c; mac[3]=(unsigned char) d;
    mac[4]=(unsigned char) e; mac[5]=(unsigned char) f;
    }

    //Saisie validée d'une adresse ip
    void Saisie (AdrIp ip, char mag[])
    {
    int a, b, c, d, ret;
    while (1) {
    printf(msg);
    ret=scanf("%d.%d.%d.%d", &a, &b, &c, &d, &e, &f);
    if (ret<4) {
    puts("Format de saisie incorrecte (0_255): W.X.Y.Z");
    while (getchar()!=\n; //Vidage du buffer non lu par scanf

    continue;
    }
    if(isOctet(a) && isOctet(b) && isOctet(c) && isOctet(d))
    break;
    else puts("Valeur(s) hors bornes (0-ff)");
    }
    ip[0]=(unsigned char) a; ip[1]=(unsigned char) b;
    ip[2]=(unsigned char) c; ip[3]=(unsigned char) d;
    }

    //Saisie d'une machine
    Machine MachSaisie()
    {
    Machine m;
    puts("Saisie d'une machine :");
    MacSaisie(m.mac);
    IpSaisie(m.ip, "Adresse IP : ");
    IpSaisie(m.mask, "Masque : ");
    IpSaisie(m.pass, "Passerelle : ");
    IpSaisie(m.dns1, "Adresse DNS 1 : ");
    IpSaisie(m.dns2, "Adresse DNS 2 : ");
    printf("Nom NetBios : ");
    while (getchar()=='\n');
    fgets(m.nom, SIZE_NETBIOS, stdin);
    return m;
    }

    /****************************************Fonction de comparaison*****************************************/

    int MacCmp(AdrMac m1, AdrMac m2)
    {
    int i;
    for(i=0; i<SIZE_MAC; i++ {
    if (m1[i]<m2[i]) return -1;
    if (m1[i]>m2[i]) return 1;
    }
    return 0;
    }

    int IpCmp(AdrIp ip1, AdrIp ip2)
    {
    int i;
    for (i=0; i<SIZE_IP;i++) {
    if (ip1[i]<ip2[i]) return -1;
    if (ip1[i]>ip1[i]) return 1;
    }
    return 0;
    }

    //Comparaison de machine renvoyant -1,0,1 selon m1<,=> m2
    int MachCmp(Machine m1, Machine m2, int champ)
    {

    switch(champ) {
    case MAC :return MacCmp(m1.mac, m2.mac);
    case IP :return IpCmp(m1.ip, m2.ip);
    case MASK :return IpCmp(m1.mask, m2.mask);
    case PASS :return IpCmp(m1.pass, m2.pass);
    case DNS1 :return IpCmp(m1.dns1, m2.dns1);
    case DNS2 :return IpCmp(m.1dns2, m2.dns);
    case NBT :return strcmp(m.1nom, m2.nom);
    default :fpyts("ERREUR CHAMP MachCmp", stderr);
    exit(1);
    }
    }
    ///////////////////////////////////////
    //////////Fonction de gestion sur fichiers

    void RestaureParc(Parc pv, char NomFichier[])
    {
    int desc, i=0;
    if (desc=open (NomFichier, O_RDONLY))==-1= {
    fprintf(stderr, "Erreur ouverture de fichier %s\n", NomFichier);
    exit(1);
    }
    read(desc, &premlib,sizeof(int));
    read(desc, p.CA, p.premlib*sizeof(Machine));
    premlib--;
    close(desc);
    }

    void SauveParc(Parc pv, char NomFichier[])
    {
    int desc, i=0;

    if ((desc=open(NomFichier, O_WRONLY| O_CREAT | O_TRUNC))==-1) {
    fprintf(stderr, "Erreur ouverture de fichier %s\n", NomFichier);
    exit(1);
    }
    p.premlib++;
    write(desc, &p.premlib,sizeof(int));
    write(desc, p.CA, p.premlib*sizeof(Machine));
    p.premlib--;
    close(desc);
    }

    int main()
    {
    Machine m;
    m=MachSaisie();
    puts("");
    MachAff(m);

    0