Untitled

 avatar
unknown
plain_text
a month ago
3.3 kB
5
Indexable
using System;

class KalkulatorIP
{
    static void Main(string[] args)
    {
        // Wprowadzenie danych
        Console.WriteLine("Podaj adres IP (np. 148.81.137.221):");
        string adresIP = Console.ReadLine();

        Console.WriteLine("Podaj maskę (np. 20):");
        string maskaWejscie = Console.ReadLine();

        // Konwersja danych
        string[] czesciIP = adresIP.Split('.');
        int maska = int.Parse(maskaWejscie);

        if (czesciIP.Length != 4 || maska < 0 || maska > 32)
        {
            Console.WriteLine("Błędny adres IP lub maska!");
            return;
        }

        // Przekształcenie IP do liczby binarnej
        int[] ipDziesietne = Array.ConvertAll(czesciIP, int.Parse);
        string ipBinarne = ZamienNaBinarne(ipDziesietne);

        // Obliczenia maski
        string maskaBinarna = StworzMaskeBinarna(maska);
        string adresSieciBinarne = ObliczAdresSieci(ipBinarne, maskaBinarna);
        string adresBroadcastBinarne = ObliczAdresBroadcast(adresSieciBinarne, maska);

        // Konwersja na postać dziesiętną
        string adresSieciDziesietne = ZamienNaDziesietne(adresSieciBinarne);
        string adresBroadcastDziesietne = ZamienNaDziesietne(adresBroadcastBinarne);

        // Wyświetlenie wyników
        Console.WriteLine("\nWyniki:");
        Console.WriteLine($"Adres IP: {adresIP}");
        Console.WriteLine($"Maska: /{maska} ({ZamienNaDziesietne(maskaBinarna)})");
        Console.WriteLine($"Adres sieci: {adresSieciDziesietne}");
        Console.WriteLine($"Adres broadcast: {adresBroadcastDziesietne}");
        Console.WriteLine($"Pierwszy host: {ZamienNaDziesietne(InkrementujAdres(adresSieciBinarne))}");
        Console.WriteLine($"Ostatni host: {ZamienNaDziesietne(DekrementujAdres(adresBroadcastBinarne))}");
        Console.WriteLine($"Liczba hostów: {Math.Pow(2, 32 - maska) - 2}");
    }

    static string ZamienNaBinarne(int[] ip)
    {
        string wynik = "";
        foreach (int liczba in ip)
        {
            wynik += Convert.ToString(liczba, 2).PadLeft(8, '0');
        }
        return wynik;
    }

    static string StworzMaskeBinarna(int maska)
    {
        return new string('1', maska).PadRight(32, '0');
    }

    static string ObliczAdresSieci(string ip, string maska)
    {
        string wynik = "";
        for (int i = 0; i < 32; i++)
        {
            wynik += (ip[i] == '1' && maska[i] == '1') ? "1" : "0";
        }
        return wynik;
    }

    static string ObliczAdresBroadcast(string adresSieci, int maska)
    {
        return adresSieci.Substring(0, maska).PadRight(32, '1');
    }

    static string ZamienNaDziesietne(string binarne)
    {
        string wynik = "";
        for (int i = 0; i < 32; i += 8)
        {
            string oktet = binarne.Substring(i, 8);
            wynik += Convert.ToInt32(oktet, 2) + ".";
        }
        return wynik.TrimEnd('.');
    }

    static string InkrementujAdres(string binarne)
    {
        ulong liczba = Convert.ToUInt64(binarne, 2);
        liczba++;
        return Convert.ToString((long)liczba, 2).PadLeft(32, '0');
    }

    static string DekrementujAdres(string binarne)
    {
        ulong liczba = Convert.ToUInt64(binarne, 2);
        liczba--;
        return Convert.ToString((long)liczba, 2).PadLeft(32, '0');
    }
}
Leave a Comment