ภาพรวม
ที่อยู่ 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 ที่รองรับ
| รูปแบบ | ตัวอย่าง | คำอธิบาย |
|---|---|---|
| IPv4 | 192.168.1.1 | 4 ออกเต็ต 0-255 คั่นด้วยจุด |
| IPv6 | 2001:0db8:85a3:0000:0000:8a2e:0370:7334 | 8 กลุ่ม 16-bit คั่นด้วย colon |
| IPv6 (ย่อ) | 2001:db8::1 | ใช้ :: แทนศูนย์ต่อเนื่อง |
| IPv6 Embedded IPv4 | ::ffff:192.168.1.1 | IPv4-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 และ IPv6IPAddress.Parse()โยนFormatExceptionหากรูปแบบผิด - ใช้เมื่อมั่นใจว่าข้อมูลถูกต้อง- สำหรับการ Validate Input จากผู้ใช้ ควรใช้
TryParseเสมอ - IPAddress เป็น immutable (ไม่สามารถเปลี่ยนค่าได้หลังสร้าง)