昨天因工作需要,想找一个IP地址的匹配算法,baidu的结果好少。没办法只好自己做了。
类中的方法:
1、检测IP地址是否合法IP地址;
2、检测IP地址是否在某个范围内。
代码如下:
![]()
Code
1
public class NetOption
2![]()
{
3
private enum NET_IP_ERR
4![]()
{
5
INVALID_IP = 1,
6
EQUAL_IP = 2,
7![]()
8
}
9
public NetOption()
10![]()
{
11
}
12![]()
/**//// <summary>
13
/// 验证字符串是否是合法IP地址(IPV4,不支持通配符)
14
/// </summary>
15
/// <param name="stringIP"></param>
16
/// <returns></returns>
17
public static bool ValidIP(string stringIP)
18![]()
{
19
uint ui = 0;
20![]()
string[] arr = stringIP.Split(new char[]
{'.'});
21
for (int i = 0 ; i < arr.Length ; i++)
22![]()
{
23
if (!uint.TryParse(arr[i],out ui))
24![]()
{
25
return false;
26
}
27
else
28![]()
{
29
if (uint.Parse(arr[i]) <0 || uint.Parse(arr[i]) > 255)
30![]()
{
31
return false;
32
}
33
}
34
}
35
return true;
36
}
37![]()
/**//// <summary>
38
/// 比较两个IP地址的大小(IPV4,不支持通配符)
39
/// </summary>
40
/// <param name="strIP1">IP地址串1</param>
41
/// <param name="strIP2">IP地址串2</param>
42
/// <returns>相等返回1,IP1小于IP2返回0,IP1大于IP2返回2,IP1或者IP2不是IP地址返回-1</returns>
43
public static int CompareIP(string strIP1,string strIP2)
44![]()
{
45
if (!ValidIP(strIP1) || !ValidIP(strIP2))
46![]()
{
47
return -1;
48
}
49![]()
string[] arr1 = strIP1.Split(new char[]
{ '.' });
50![]()
string[] arr2 = strIP2.Split(new char[]
{ '.' });
51
if (uint.Parse(arr1[0]) == uint.Parse(arr2[0]))
52![]()
{
53
if (uint.Parse(arr1[1]) == uint.Parse(arr2[1]))
54![]()
{
55
if (uint.Parse(arr1[2]) == uint.Parse(arr2[2]))
56![]()
{
57
if (uint.Parse(arr1[3]) == uint.Parse(arr2[3]))
58![]()
{
59
return 1;
60
}
61
else
62![]()
{
63
if (uint.Parse(arr1[3]) < uint.Parse(arr2[3]))
64![]()
{
65
return 0;
66
}
67
else
68![]()
{
69
return 2;
70
}
71
}
72
}
73
else
74![]()
{
75
if (uint.Parse(arr1[2]) < uint.Parse(arr2[2]))
76![]()
{
77
return 0;
78
}
79
else
80![]()
{
81
return 2;
82
}
83
}
84
}
85
else
86![]()
{
87
if (uint.Parse(arr1[1]) < uint.Parse(arr2[1]))
88![]()
{
89
return 0;
90
}
91
else
92![]()
{
93
return 2;
94
}
95
}
96
}
97
else
98![]()
{
99
if (uint.Parse(arr1[0]) < uint.Parse((arr2[0])))
100![]()
{
101
return 0;
102
}
103
else
104![]()
{
105
return 2;
106
}
107
}
108
}
109![]()
110![]()
/**//// <summary>
111
/// 验证IP地址是否在某个IP地址范围之间
112
/// </summary>
113
/// <param name="SourceIP">需验证的IP地址</param>
114
/// <param name="StartIP">IP范围的起始IP地址</param>
115
/// <param name="EndIP">IP范围的结束IP地址</param>
116
/// <returns></returns>
117
public static bool ValidIPRange(string SourceIP,string StartIP,string EndIP)
118![]()
{
119
if (NetOption.CompareIP(SourceIP,StartIP) >=1 && NetOption.CompareIP(EndIP,SourceIP) >=1)
120![]()
{
121
return true;
122
}
123
else
124![]()
{
125
return false;
126
}
127
}
128
}
129
备注:
1、该方法只适用IPv4格式。
2、比较2个IP地址大小的算法使用的字符串比较,效率比较低,有时间可以改成2进制比较。
3、……
类中的方法:
1、检测IP地址是否合法IP地址;
2、检测IP地址是否在某个范围内。
代码如下:
1
public class NetOption2

{3
private enum NET_IP_ERR4

{5
INVALID_IP = 1,6
EQUAL_IP = 2,7

8
}9
public NetOption()10

{11
}12

/**//// <summary>13
/// 验证字符串是否是合法IP地址(IPV4,不支持通配符)14
/// </summary>15
/// <param name="stringIP"></param>16
/// <returns></returns>17
public static bool ValidIP(string stringIP)18

{19
uint ui = 0;20

string[] arr = stringIP.Split(new char[]
{'.'});21
for (int i = 0 ; i < arr.Length ; i++)22

{23
if (!uint.TryParse(arr[i],out ui))24

{25
return false;26
}27
else28

{29
if (uint.Parse(arr[i]) <0 || uint.Parse(arr[i]) > 255)30

{31
return false;32
}33
}34
}35
return true;36
}37

/**//// <summary>38
/// 比较两个IP地址的大小(IPV4,不支持通配符)39
/// </summary>40
/// <param name="strIP1">IP地址串1</param>41
/// <param name="strIP2">IP地址串2</param>42
/// <returns>相等返回1,IP1小于IP2返回0,IP1大于IP2返回2,IP1或者IP2不是IP地址返回-1</returns>43
public static int CompareIP(string strIP1,string strIP2)44

{45
if (!ValidIP(strIP1) || !ValidIP(strIP2))46

{47
return -1;48
}49

string[] arr1 = strIP1.Split(new char[]
{ '.' });50

string[] arr2 = strIP2.Split(new char[]
{ '.' });51
if (uint.Parse(arr1[0]) == uint.Parse(arr2[0]))52

{53
if (uint.Parse(arr1[1]) == uint.Parse(arr2[1]))54

{55
if (uint.Parse(arr1[2]) == uint.Parse(arr2[2]))56

{57
if (uint.Parse(arr1[3]) == uint.Parse(arr2[3]))58

{59
return 1;60
} 61
else62

{63
if (uint.Parse(arr1[3]) < uint.Parse(arr2[3]))64

{65
return 0;66
} 67
else68

{69
return 2;70
}71
}72
} 73
else74

{75
if (uint.Parse(arr1[2]) < uint.Parse(arr2[2]))76

{77
return 0;78
} 79
else80

{81
return 2;82
}83
}84
} 85
else86

{87
if (uint.Parse(arr1[1]) < uint.Parse(arr2[1]))88

{89
return 0;90
} 91
else92

{93
return 2;94
}95
}96
} 97
else98

{99
if (uint.Parse(arr1[0]) < uint.Parse((arr2[0])))100

{101
return 0;102
} 103
else104

{105
return 2;106
}107
}108
}109

110

/**//// <summary>111
/// 验证IP地址是否在某个IP地址范围之间112
/// </summary>113
/// <param name="SourceIP">需验证的IP地址</param>114
/// <param name="StartIP">IP范围的起始IP地址</param>115
/// <param name="EndIP">IP范围的结束IP地址</param>116
/// <returns></returns>117
public static bool ValidIPRange(string SourceIP,string StartIP,string EndIP)118

{119
if (NetOption.CompareIP(SourceIP,StartIP) >=1 && NetOption.CompareIP(EndIP,SourceIP) >=1)120

{121
return true;122
} 123
else124

{125
return false;126
}127
}128
}129

备注:
1、该方法只适用IPv4格式。
2、比较2个IP地址大小的算法使用的字符串比较,效率比较低,有时间可以改成2进制比较。
3、……
浙公网安备 33010602011771号