Untitled
unknown
plain_text
a year ago
3.3 kB
8
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');
}
}Editor is loading...
Leave a Comment