查询IP所在区段
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
using System.Net;
5
6
namespace IPUtility
7

{
8
class Program
9
{
10
static void Main(string[] args)
11
{
12
IPRangeManage irm = new IPRangeManage();
13
irm.Add(new IPRange("石家庄", "219.148.24.0", "219.148.63.255"));
14
irm.Add(new IPRange("石家庄", "222.222.0.0", "222.222.63.255"));
15
irm.Add(new IPRange("唐山", "219.148.64.0", "219.148.79.255"));
16
irm.Add(new IPRange("保定", "219.148.20.0", "219.148.23.255"));
17
18
Console.WriteLine(irm.Search("219.148.56.3").Name);
19
20
Console.ReadLine();
21
22
}
23
24
25
}
26
27
public class IPRange
28
{
29
private string _Name = string.Empty;
30
31
private ulong _BeginIP = 0;
32
33
private ulong _EndIP = Int32.MaxValue;
34
35
/**//**//**//// <summary>
36
/// IP段名称
37
/// </summary>
38
public string Name
39
{
40
get
{ return _Name; }
41
set
{ _Name = value; }
42
}
43
44
/**//**//**//// <summary>
45
/// 开始IP
46
/// </summary>
47
public ulong BeginIP
48
{
49
get
{ return _BeginIP; }
50
set
{ _BeginIP = value; }
51
}
52
53
/**//**//**//// <summary>
54
/// 结束IP
55
/// </summary>
56
public ulong EndIP
57
{
58
get
{ return _EndIP; }
59
set
{ _EndIP = value; }
60
}
61
62
63
/**//**//**//// <summary>
64
/// 此IP段的范围
65
/// </summary>
66
public ulong Range
67
{
68
get
69
{
70
return EndIP - BeginIP;
71
}
72
}
73
74
public IPRange(string name, string ipBegin, string ipEnd)
75
{
76
this.Name = name;
77
this.BeginIP = IP2A(ipBegin);
78
this.EndIP = IP2A(ipEnd);
79
}
80
81
82
public static ulong IP2A(string ip)
83
{
84
byte[] bytes = IPAddress.Parse(ip).GetAddressBytes();
85
ulong ret = 0;
86
87
foreach (byte b in bytes)
88
{
89
ret <<= 8;
90
ret |= b;
91
}
92
93
return ret;
94
95
}
96
97
98
public static int Compare(IPRange x, IPRange y)
99
{
100
if(x.Range == y.Range)
101
return 0;
102
else if(x.Range > y.Range)
103
return 1;
104
else return -1;
105
}
106
107
}
108
109
public class IPRangeManage
110
{
111
public IPRangeManage()
112
{ }
113
114
private List< IPRange> _IPRangeList = new List< IPRange>();
115
private bool _NeedSort = true;
116
117
public void Add(IPRange ipRange)
118
{
119
_IPRangeList.Add(ipRange);
120
_NeedSort = true;
121
}
122
123
private void Sort()
124
{
125
if (_NeedSort)
126
{
127
_IPRangeList.Sort(new Comparison<IPRange>(IPRange.Compare));
128
}
129
}
130
131
public IPRange Search(string ipString)
132
{
133
ulong ip = IPRange.IP2A(ipString);
134
135
this.Sort();
136
137
foreach (IPRange ir in _IPRangeList)
138
{
139
if (ir.BeginIP <= ip && ir.EndIP >= ip)
140
{
141
return ir;
142
}
143
}
144
return null;
145
}
146
}
147
}
148
当前平均分: 0.0(0 次打分)
-5-4-3-2-1012345