Soru
Programcıya IPv4 adresi içeren bir (ipAdresi) veriliyor ve ilgili IP Adresinin doğru olup olmadığının kontrol eden bir metot oluşturması isteniyor.
Örnek
Girdi | Çıktı |
---|---|
ipAdresi: 123.45.67.89 | Sonuç: true |
ipAdresi: 123.456.78.90 | Sonuç: false |
Çözüm - C#
using System;
using System.Net;
using System.Net.Sockets;
class Program
{
static void Main()
{
string ipAdresi = "111.111.11.11";
Console.WriteLine(IpKontrol(ipAdresi));
Console.Read();
}
public static bool IpKontrol(string ipAdresi)
{
// Gelen ip adresini parçalara ayır
string[] dizi = ipAdresi.Split('.');
// Her bir alana tek tek bak
foreach (var alan in dizi)
{
if (alan.StartsWith("0"))
return false;
}
// dizi ayrı bölümden oluşuyorsa devam et
if (dizi.Length == 4)
{
IPAddress sabitAdres;
// Ip adresini kontrol etmek için IP Adress sınıfından faydalan
if (!IPAddress.TryParse(ipAdresi.Trim(), out sabitAdres))
return false;
// IP adresi düzenli ise doğru değerini döndür
if (sabitAdres.AddressFamily == AddressFamily.InterNetwork)
return true;
}
return false;
}
}
Çözüm - Java
public class Main {
public static void main(String[] args)
{
System.out.println(isValidIP4Address("111.111.11.11"));
}
private static boolean isValidIP4Address(String ipAdresi)
{
// Gerekli ip adresi için Regex kullan
boolean durum = ipAdresi.matches("^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$");
if (durum)
{
// Gelen ip adresini parçalara ayır
String[] dizi = ipAdresi.split("\\.");
for (int i = 0; i <= 3; i++)
{
String alan = dizi[i];
// Her bir alana tek tek bak
if (alan == null || alan.length() <= 0)
return false;
// Her bir alandaki değer 255'den büyükse yanlış döndür
if (Integer.parseInt(alan) > 255)
return false;
}
// IP adresi düzenli ise doğru değerini döndür
return true;
}
return false;
}
}