昨天因工作需要,想找一个IP地址的匹配算法,baidu的结果好少。没办法只好自己做了。
类中的方法:
1、检测IP地址是否合法IP地址;
2、检测IP地址是否在某个范围内。
代码如下:
备注:
1、该方法只适用IPv4格式。
2、比较2个IP地址大小的算法使用的字符串比较,效率比较低,有时间可以改成2进制比较。
3、……
类中的方法:
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 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、……