Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การตรวจสอบที่อยู่ IP Address ใน C#

ภาพรวม

ที่อยู่ IP (Internet Protocol Address) เป็นชุดตัวเลขที่ระบุอุปกรณ์แต่ละเครื่องบนเครือข่ายคอมพิวเตอร์ ใน C# คลาส IPAddress ในเนมสเปซ System.Net จัดการเกี่ยวกับที่อยู่ IP รวมถึงการตรวจสอบความถูกต้อง (Validation)

ตัวอย่างโปรแกรมตรวจสอบ IP Address

using System;
using System.Net;

namespace IPAddressDemo
{
    class Example
    {
        public static void Main()
        {
            Console.WriteLine("กรอกที่อยู่ IP Address: ");
            string ipAddr = Console.ReadLine();
            
            // ใช้ TryParse ตรวจสอบและแปลงพร้อมกัน
            bool isValid = IPAddress.TryParse(ipAddr, out IPAddress ip);
            
            if (isValid)
                Console.WriteLine("{0} เป็นที่อยู่ IP ที่ถูกต้อง", ipAddr);
            else
                Console.WriteLine("{0} ไม่ใช่ที่อยู่ IP ที่ถูกต้อง", ipAddr);
        }
    }
}

ผลลัพธ์

กรอกที่อยู่ IP Address: 
130.45.78.200
130.45.78.200 เป็นที่อยู่ IP ที่ถูกต้อง

คำอธิบายโค้ด

// สร้างตัวแปรรับผลลัพธ์
IPAddress ip;

// อ่านจากผู้ใช้
string ipAddr = Console.ReadLine();

// TryParse: คืน true/false และแปลงค่าให้ out parameter
bool flag = IPAddress.TryParse(ipAddr, out ip);

if (flag)
    Console.WriteLine("{0} เป็นที่อยู่ IP ที่ถูกต้อง", ipAddr);
else
    Console.WriteLine("{0} ไม่ใช่ที่อยู่ IP ที่ถูกต้อง", ipAddr);

รูปแบบ IP Address ที่รองรับ

รูปแบบตัวอย่างคำอธิบาย
IPv4192.168.1.14 ออกเต็ต 0-255 คั่นด้วยจุด
IPv62001:0db8:85a3:0000:0000:8a2e:0370:73348 กลุ่ม 16-bit คั่นด้วย colon
IPv6 (ย่อ)2001:db8::1ใช้ :: แทนศูนย์ต่อเนื่อง
IPv6 Embedded IPv4::ffff:192.168.1.1IPv4-mapped IPv6 address

เมธอดอื่นๆ ที่มีประโยชน์

IPAddress ip = IPAddress.Parse("192.168.1.1");     // โยน Exception หากผิดรูปแบบ
bool isLoopback = IPAddress.IsLoopback(ip);         // true สำหรับ 127.0.0.1, ::1
bool isMulticast = ip.IsIPv6Multicast;              // ตรวจสอบ Multicast
byte[] bytes = ip.GetAddressBytes();                // ได้ byte array
string str = ip.ToString();                         // แปลงกลับเป็น string
IPAddress any = IPAddress.Any;                      // 0.0.0.0 (IPv4)
IPAddress ipv6Any = IPAddress.IPv6Any;              // :: (IPv6)

การตรวจสอบขั้นสูงด้วย Regex (สำหรับ IPv4)

using System.Text.RegularExpressions;

public static bool IsValidIPv4(string ip)
{
    string pattern = @"^((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$";
    return Regex.IsMatch(ip, pattern);
}

ข้อสังเกตสำคัญ

  • IPAddress.TryParse() เป็นวิธีที่แนะนำ - ไม่โยน Exception และรองรับทั้ง IPv4 และ IPv6
  • IPAddress.Parse() โยน FormatException หากรูปแบบผิด - ใช้เมื่อมั่นใจว่าข้อมูลถูกต้อง
  • สำหรับการ Validate Input จากผู้ใช้ ควรใช้ TryParse เสมอ
  • IPAddress เป็น immutable (ไม่สามารถเปลี่ยนค่าได้หลังสร้าง)