| using System; using System.Collections.Generic;
 using System.Text;
 using System.Net;
 namespace IPUtility{
 class Program
 {
 static void Main(string[] args)
 {
 IPRangeManage irm = new IPRangeManage();
 irm.Add(new IPRange("石家庄", "219.148.24.0", "219.148.63.255"));
 irm.Add(new IPRange("石家庄", "222.222.0.0", "222.222.63.255"));
 irm.Add(new IPRange("唐山", "219.148.64.0", "219.148.79.255"));
 irm.Add(new IPRange("保定", "219.148.20.0", "219.148.23.255"));
             Console.WriteLine(irm.Search("219.148.56.3").Name);             Console.ReadLine();         }}
     public class IPRange {
 private string _Name = string.Empty;
         private ulong _BeginIP = 0;         private ulong _EndIP = Int32.MaxValue;         /**//// <summary>/// IP段名称
 /// </summary>
 public string Name
 {
 get { return _Name; }
 set { _Name = value; }
 }
         /**//// <summary>/// ?始IP
 /// </summary>
 public ulong BeginIP
 {
 get { return _BeginIP; }
 set { _BeginIP = value; }
 }
         /**//// <summary>/// ?束IP
 /// </summary>
 public ulong EndIP
 {
 get { return _EndIP; }
 set { _EndIP = value; }
 }
 /**//// <summary>
 /// 此IP段的范?
 /// </summary>
 public ulong Range
 {
 get
 {
 return EndIP - BeginIP;
 }
 }
         public IPRange(string name, string ipBegin, string ipEnd){
 this.Name = name;
 this.BeginIP = IP2A(ipBegin);
 this.EndIP = IP2A(ipEnd);
 }
 public static ulong IP2A(string ip)
 {
 byte[] bytes = IPAddress.Parse(ip).GetAddressBytes();
 ulong ret = 0;
             foreach (byte b in bytes){
 ret <<= 8;
 ret |= b;
 }
             return ret;         } public static int Compare(IPRange x, IPRange y)
 {
 if(x.Range == y.Range)
 return 0;
 else if(x.Range > y.Range)
 return 1;
 else return -1;
 }
     }     public class IPRangeManage{
 public IPRangeManage()
 { }
         private List< IPRange> _IPRangeList = new List< IPRange>();private bool _NeedSort = true;
         public void Add(IPRange ipRange){
 _IPRangeList.Add(ipRange);
 _NeedSort = true;
 }
         private void Sort(){
 if (_NeedSort)
 {
 _IPRangeList.Sort(new Comparison<IPRange>(IPRange.Compare));
 }
 }
         public IPRange Search(string ipString){
 ulong ip = IPRange.IP2A(ipString);
             this.Sort();             foreach (IPRange ir in _IPRangeList){
 if (ir.BeginIP <= ip && ir.EndIP >= ip)
 {
 return ir;
 }
 }
             return null;}
 }
 }
 |