Wątek: Program ktory rozpoznaje IP

Pokaż wyniki od 1 do 1 z 1
  1. #1 Program ktory rozpoznaje IP 
    >>..I see you..<< Awatar Padre
    Dołączył
    Aug 2008
    Posty
    69
    Podziękował/a
    0 razy
    7 podziękowań za 4 postów
    Siła reputacji
    24
    Programik konsolowy w którym podaje adres ip i on mi go rozpoznaje dzieli na podsieci itp np :

    Użytkownik podaje adres 10.0.0.0<-- rozpoznaje go jako klasę A pyta się na ile podsieci podzielić itp.

    Kod:
    //
     
    
    #include <iostream>
    #include <math.h>
     
    //#include <string>
    using namespace std;
    int main ()
    {
            unsigned char oct[4];
            unsigned int loct[4];
            int i;
     
            printf("   Podaj adres IP : ");
            if (scanf("%u.%u.%u.%u", &loct[0], &loct[1], &loct[2], &loct[3]) != 4) {
                    fprintf(stderr, "=> Nie poprawny adres IP!\n");
                    return 1;
            }
     
            for (i = 0; i < 4; ++i) {
                    oct[i] = loct[i];
                    if (oct[i] != loct[i]) {
                            fprintf(stderr, "=> Nie poprawny adres IP!\n");
                            return 1;
                    }
            }
     
            printf("-> Adres IP to %hhu.%hhu.%hhu.%hhu\n",
                   oct[0], oct[1], oct[2], oct[3]);
            int liczba1=oct[0],liczba2=oct[1],liczba3=oct[2],liczba4=oct[3],i1,i2,i3,i4,maska;
     
    //deklaracja tabel do czastkowych fragmentow ip i zmiennych do tabeli do while
            int tab[9],tab2[9],tab3[9],tab4[9];
     
            /*    do
                {
                    cout<<"podaj ip: (zamiast kropek enter, pamietaj ze maxymalna wartosc to 255)"<<endl;
                    cin>>liczba1;
                    cout<<"."<<endl;
                    cin>>liczba2;
                    cout<<"."<<endl;
                    cin>>liczba3;
                    cout<<"."<<endl;
                    cin>>liczba4;
                    cout<<endl;
                }
                while (liczba1>255 || liczba2>255 || liczba3>255 || liczba4>255 || liczba1<0 || liczba2<0 || liczba3<0 || liczba4<0);
            //  cout<<"Podaj maske: ";cin>>maska;
     
    
                cout<<liczba1<<"."<<liczba2<<"."<<liczba3<<"."<<liczba4<<endl;*/
            cout<<"IP w zapisie binarnym:"<<endl<<endl;
            i1=1;
     
            do {
                    if (liczba1%2>0) {
                            tab[i1]=1;
                    }
                    if (liczba1%2==0) {
                            tab[i1]=0;
                    }
                    i1++;
                    liczba1=liczba1/2;
            } while (i1<9);
            //int j=i1;
            do {
                    i1--;
                    cout<<tab[i1];
            } while (i1!=1);
            cout <<".";
    //
            i2=1;
     
            do {
                    if (liczba2%2>0) {
                            tab2[i2]=1;
                    }
                    if (liczba2%2==0) {
                            tab2[i2]=0;
                    }
                    i2++;
                    liczba2=liczba2/2;
            } while (i2<9);
            do {
                    i2--;
                    cout<<tab2[i2];
            } while (i2!=1);
            cout<<".";
    //
            i3=1;
     
            do {
                    if (liczba3%2>0) {
                            tab3[i3]=1;
                    }
                    if (liczba3%2==0) {
                            tab3[i3]=0;
                    }
                    i3++;
                    liczba3=liczba3/2;
            } while (i3<9);
            do {
                    i3--;
                    cout<<tab3[i3];
            } while (i3!=1);
            cout<<".";
    //
            i4=1;
     
            do {
                    if (liczba4%2>0) {
                            tab4[i4]=1;
                    }
                    if (liczba4%2==0) {
                            tab4[i4]=0;
                    }
                    i4++;
                    liczba4=liczba4/2;
            } while (i4<9);
            do {
                    i4--;
                    cout<<tab4[i4];
            } while (i4!=1);
     
    //
            int wartoscklasowa; //a-0, b-1, c-2, d-3, e-4
     
            cout<<endl;
            if (tab[i1+8-1]==0) {
                    cout<<"klasa A";
                    wartoscklasowa=1;
     
            }
            if (tab[i1+8-1]==1 && tab[i1+8-2]==0) {
                    wartoscklasowa=2;
     
                    cout<<"klasa B";
            }
            if (tab[i1+8-1]==1 && tab[i1+8-2]==1 && tab[i1+8-3]==0) {
                    cout <<"klasa C";
                    wartoscklasowa=3;
     
            }
            if (tab[i1+8-1]==1 && tab[i1+8-2]==1 && tab[i1+8-3]==1 && tab[i1+8-4]==0) {
                    cout << "klasa D";
                    wartoscklasowa=4;
     
            }
            if (tab[i1+8-1]==1 && tab[i1+8-2]==1 && tab[i1+8-3]==1 && tab[i1+8-4]==1) {
                    cout <<"klasa E";
                    wartoscklasowa=5;
            }
            cout<<". Maska standardowa to: "<<wartoscklasowa*8<<endl;
            // pentla zaporowa dla maski
            do {
                    cout<<"\nPodaj maske: ";
                    cin>>maska;
                    cout <<endl;
            } while (maska>30 || maska <1);
    //  cout<<wartoscklasowa<<endl;
    // zadeklarowac tablice do przechowywania maski i wypełnic
            int tabm[32];
            for (int l1=0; l1<32; l1++) {
                    if (l1<maska)
                            tabm[l1]=1;
                    else tabm[l1]=0;
            }
    //test wyswietlania
            cout<<"Maska binarnie"<<endl;
            for (int l1=0; l1<32; l1++) {
                    if (l1==8 || l1== 16 || l1==24)
                            cout<<".";
                    cout<<tabm[l1];
            }
            cout <<endl<< endl;
    // jedna tabela na cale ip i czytna od poczatku, nie jak wczesniej od tylu
            int tab_cale_ip[32];
            for (int l1=0, l2=8; l1<8; l1++,l2--) {
                    tab_cale_ip[l1]=tab[l2];
            }
            /* for (int l1=0; l1<8; l1++)
            {cout<<tab_cale_ip[l1];
            }*/
            for (int l1=8, l2=8; l1<16; l1++,l2--) {
                    tab_cale_ip[l1]=tab2[l2];
            }
            /*for (int l1=8; l1<16; l1++)
            {
                cout<<tab_cale_ip[l1];
            }*/
            for (int l1=16, l2=8; l1<24; l1++, l2--) {
                    tab_cale_ip[l1]=tab3[l2];
            }
            for (int l1=24, l2=8; l1<32; l1++, l2--) {
                    tab_cale_ip[l1]=tab4[l2];
            }
    //test wyswietlenia ip z kropkami
     
            /*    cout<<"ip binarnie jeszcze raz:"<<endl;
                for (int l1=0; l1<32; l1++)
                {
                    if (l1==8 || l1== 16 || l1==24)
                        cout<<".";
                    cout<<tab_cale_ip[l1];
                }
                cout<<endl;
            */
    //obliczanie adresu sieci - ip AND maska
     
            cout<<"adres sieci"<<endl;
            int tab_adres_sieci[32];
            for (int l1=0; l1<32; l1++) {
                    if (tab_cale_ip[l1]==1 && tabm[l1]==1)
                            tab_adres_sieci[l1]=1;
                    else tab_adres_sieci[l1]=0;
            }
    // test wyswietlania adresu sieci binarnie
            for (int l1=0; l1<32; l1++) {
                    if (l1==8 || l1== 16 || l1==24)
                            cout<<".";
                    cout<<tab_adres_sieci[l1];
            }
            cout<<endl<<endl;
    //adres rozgloszeniowy:
            int tab_rozgloszenie[32];
            for (int l1=0; l1<32; l1++) {
                    if (tabm[l1]==1)
                            tab_rozgloszenie[l1]=tab_cale_ip[l1];
                    else
                            tab_rozgloszenie[l1]=1;
            }
            cout<<"adres rozgłoszeniowy binarnie:"<<endl;
            for (int l1=0; l1<32; l1++) {
                    if (l1==8 || l1== 16 || l1==24)
                            cout<<".";
                    cout<<tab_rozgloszenie[l1];
            }
            cout<<endl<<endl;
    // wyliczenie i wyswietlenie wartsci dziesiętnych
            int maska1,maska2,maska3,maska4,rozgl1,rozgl2,rozgl3,rozgl4,siec1,siec2,siec3,siec4;
            maska1=tabm[0];
            for (int a=1; a<8; a++) {
                    maska1=maska1*2+tabm[a];
            }
            maska2=tabm[8];
            for (int a=9; a<16; a++) {
                    maska2=((maska2)*2)+tabm[a];
            }
            maska3=tabm[16];
            for (int a=17; a<24; a++) {
                    maska3=maska3*2+tabm[a];
            }
            maska4=tabm[24];
            for (int a=25; a<32; a++) {
                    maska4=maska4*2+tabm[a];
            }
            cout <<"maska dziesietnie: "<<endl;
            cout<< maska1 <<"."<<maska2<<"."<<maska3<<"."<<maska4<<endl<<endl;
            siec1=tab_adres_sieci[0];
            for (int a=1; a<8; a++) {
                    siec1=siec1*2+tab_adres_sieci[a];
            }
            siec2=tab_adres_sieci[8];
            for (int a=9; a<16; a++) {
                    siec2=siec2*2+tab_adres_sieci[a];
            }
            siec3=tab_adres_sieci[16];
            for (int a=17; a<24; a++) {
                    siec3=siec3*2+tab_adres_sieci[a];
            }
            siec4=tab_adres_sieci[24];
            for (int a=25; a<32; a++) {
                    siec4=siec4*2+tab_adres_sieci[a];
            }
            cout<<"adres sieci :"<<endl;
            cout<<siec1<<"."<<siec2<<"."<<siec3<<"."<<siec4<<endl<<endl;
            rozgl1=tab_rozgloszenie[0];
            for (int a=1; a<8; a++) {
                    rozgl1=rozgl1*2+tab_rozgloszenie[a];
            }
            rozgl2=tab_rozgloszenie[8];
            for (int a=9; a<16; a++) {
                    rozgl2=rozgl2*2+tab_rozgloszenie[a];
            }
            rozgl3=tab_rozgloszenie[16];
            for (int a=17; a<24; a++) {
                    rozgl3=rozgl3*2+tab_rozgloszenie[a];
            }
            rozgl4=tab_rozgloszenie[24];
            for (int a=25; a<32;a++) {
                    rozgl4=rozgl4*2+tab_rozgloszenie[a];
            }
            cout<<"adres rozgloszeniowy:"<<endl;
            cout<<rozgl1<<"."<<rozgl2<<"."<<rozgl3<<"."<<rozgl4<<endl<<endl;
     
    //cześć licząca i wyznaczajaca podsieci
            int lp; //licszba podsieci jaka chce zrobic uzytkownik
            int pods=2;
            int pozyczka=1;
            do {
                    pozyczka=1;
                    pods=2;
                    int pewny=1;
     
                    do {
                            cout << "Ile podsieci chcesz uzyskac? (wyswietlone zostanie maxymalnie 57 ostatnich).";
                            cin >>lp;
                            if (lp>57) {
                                    pewny=0;
                                    cout<<"jestes pewiem ze chcesz tylu podsieci?? (tak-wpisz: 1)";
                                    cin>>pewny;
                            }
                            else break;
     
    
                    } while (pewny !=1);
    //obliczam ile bitow mosze pozyczyc dla 2podsieci 1 bit bo 2^1=2, dla 4 2bity bo 2^2=4 dla 8 3bity bo 2^3=8
     
                    while (pods<lp) {
                            pods=pods*2;
                            pozyczka++;
                    }
                    if (lp<=1) {
                            cout<<"nie musimy nic dzielic";
                            return 1;
                    }
                    cout<<"Musimy pozyczyc "<<pozyczka<<" bitow. Makska jaka chcesz uzyskac to:"<<maska+pozyczka<<"."<<endl;
                    if (pozyczka+maska >30)
                            cout <<"maska moze miec maksymalnie 30 jedynek"<<endl;
     
            } while (pozyczka+maska >30 || lp<1);
            //musze sprawdzi czy mozliwe jest takie pozyczenie
            int tabm_2[32];
            for (int l1=0; l1<32; l1++) {
                    if (l1<maska+pozyczka)
                            tabm_2[l1]=1;
                    else tabm_2[l1]=0;
            }
            cout <<"Nowa maska to: "<<endl<<"  a) binarnie: "<<endl<<"  ";
            for (int l1=0; l1<32; l1++) {
                    if (l1==8 || l1== 16 || l1==24)
                            cout<<".";
                    cout<<tabm_2[l1];
            }
            cout<<endl<<"  b) dziesietnie:"<<endl;
     
    
            int maska1_2,maska2_2,maska3_2,maska4_2; //4,rozgl1,rozgl2,rozgl3,rozgl4,siec1,siec2,siec3,siec4;
            maska1_2=tabm_2[0];
            for (int a=1; a<8; a++) {
                    maska1_2=maska1_2*2+tabm_2[a];
            }
            maska2_2=tabm_2[8];
            for (int a=9; a<16; a++) {
                    maska2_2=((maska2_2)*2)+tabm_2[a];
            }
            maska3_2=tabm_2[16];
            for (int a=17; a<24; a++) {
                    maska3_2=maska3_2*2+tabm_2[a];
            }
            maska4_2=tabm_2[24];
            for (int a=25; a<32; a++) {
                    maska4_2=maska4_2*2+tabm_2[a];
            }
    //   cout <<"maska dziesietnie: "<<endl;
            cout<<"  "<< maska1_2 <<"."<<maska2_2<<"."<<maska3_2<<"."<<maska4_2<<endl;
    //wylicze podsieci, trzebana na pozyczonych bitach kolejno dawac binarnie od 0 do lp-1, usrawiamy to od konca maski st.
            int podsiec;
            int* tablica=new int [lp];//tu mam binarnie od 0 do ilosc podsieci - 1
            for (podsiec=0; podsiec<lp; podsiec++) {
                    int zm=podsiec;
                    int licznik=0;
                    int* tablica_siec=new int [32];
                    int* tablica_rozgl= new int [32];
     
                    do {
                            if (zm%2>0) {
                                    tablica[licznik]=1;
                            }
                            if (zm%2==0) {
                                    tablica[licznik]=0;
                            }
                            licznik++;
                            zm=zm/2;
                    } while (licznik<pozyczka);
    //powyliczac i wyswietlac adr. rozgloszeniowe i adr. sieci
                    //test wyswietlania
                    /*
                                          for (int l=0; l<pozyczka; l++)
                                              cout << tablica[l] <<" ";
                                          cout<<endl;
                    */
                    int x=0;
                    for (int z=0; z<32; z++) {
                            if (tabm[z] == 1)
                                    tablica_siec[z]=tab_cale_ip[z];
                            else if (x<pozyczka) {
                                    tablica_siec[z]=tablica[pozyczka-x-1];
                                    x++;
                            } else tablica_siec[z]=0;
                    }
                    /*       //TEST WYSWIETLANIA
                           for (int s=0; s<32; s++)
                            {
                               if (s==8 || s== 16 || s==24)
                                cout<<".";
                               cout <<tablica_siec[s];
                            }
                           cout<<endl;*/
                    //
                    int siec_1,siec_2,siec_3,siec_4;
                    siec_1=tablica_siec[0];
                    for (int a=1; a<8; a++) {
                            siec_1=siec_1*2+tablica_siec[a];
                    }
                    siec_2=tablica_siec[8];
                    for (int a=9; a<16; a++) {
                            siec_2=((siec_2)*2)+tablica_siec[a];
                    }
                    siec_3=tablica_siec[16];
                    for (int a=17; a<24; a++) {
                            siec_3=siec_3*2+tablica_siec[a];
                    }
                    siec_4=tablica_siec[24];
                    for (int a=25; a<32; a++) {
                            siec_4=siec_4*2+tablica_siec[a];
                    }
                    cout <<"adres podsieci "<<podsiec<<": "<<endl;
                    cout<< siec_1 <<"."<<siec_2<<"."<<siec_3<<"."<<siec_4<<endl;
                    //
     
    
                    x=0;
                    for (int z=0; z<32; z++) {
                            if (tabm[z] == 1)
                                    tablica_rozgl[z]=tab_cale_ip[z];
                            else if (x<pozyczka) {
                                    tablica_rozgl[z]=tablica[pozyczka-x-1];
                                    x++;
                            } else tablica_rozgl[z]=1;
                    }
     
                    int rozgl_1,rozgl_2,rozgl_3,rozgl_4;
                    rozgl_1=tablica_rozgl[0];
                    for (int a=1; a<8; a++) {
                            rozgl_1=rozgl_1*2+tablica_rozgl[a];
                    }
                    rozgl_2=tablica_rozgl[8];
                    for (int a=9; a<16; a++) {
                            rozgl_2=((rozgl_2)*2)+tablica_rozgl[a];
                    }
                    rozgl_3=tablica_rozgl[16];
                    for (int a=17; a<24; a++) {
                            rozgl_3=rozgl_3*2+tablica_rozgl[a];
                    }
                    rozgl_4=tablica_rozgl[24];
                    for (int a=25; a<32; a++) {
                            rozgl_4=rozgl_4*2+tablica_rozgl[a];
                    }
                    cout <<"adres rozgloszeniowy:"<<endl;
                    cout<< rozgl_1 <<"."<<rozgl_2<<"."<<rozgl_3<<"."<<rozgl_4<<endl<<endl;
     
                    //
                    delete tablica_rozgl;
                    delete tablica_siec;
            }
            delete tablica;
     
            system("PAUSE");
            return EXIT_SUCCESS;
    }
     
    //
    Odpowiedz z cytatem  
     

  2. Jeden użytkownik podziękował użytkownikowi Padre za ten post:

    tadpa (01-05-13)

Informacje o wątku
Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Program antywirusowy
    By Daniels1993 in forum Pogotowie Komputerowe
    Odpowiedzi: 12
    Ostatni post / autor: 16-11-16, 20:39
Tagi dla tego wątku

Zobacz tagi

Bookmarks
Bookmarks
Uprawnienia umieszczania postów
  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •