Untitled
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