IP validation
Technologijos April 29th, 2008Prireikė kažkada padaryt paprastą IP adresų tikrinimą. .NET turi apibrėžtą klasę IPAddress, kurios statinis metodas TryParse(string IP, out IPAddress adress) kaip ir atlieka tai, ko man reikia. Mano naudotas metodas:
private bool isValidIPAddress(string ip)
{
IPAddress address;
return IPAddress.TryParse(ip, address);
}
Tačiau atsirado problema, jeigu paduodamas visai ne IP adresas.
Pavyzdžiui, jeigu ip=”4.159.211″, tai aš gaunu teigiamą rezultatą, tai yra true. Pasirodo, šis IP yra labai įdomiai “suparsinamas”. Rezultate kintamasis address = “4.159.0.211″.
Galiausiai atsisakiau šio metodo naudojimo ir grįžau prie paprasto regex’o:
public bool IsValidIPAddress(string ip)
{
string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";
Regex reg = new Regex(pattern, RegexOptions.Singleline | RegexOptions.ExplicitCapture);
return reg.IsMatch(ip);
}
Išvada: nepasitikėt viskuo aklai
July 16th, 2008 at 1:24 am
Su pateiktu pavyzdziu yra viskas teisingai, nes realiai yra naudojama WinSock funkcija inet_adrr ir atpazysta IPv4 formatu pateikta IP adresa. Minetos funkcijos aprasymas yra http://msdn.microsoft.com/en-us/library/ms738563.aspx