昨天因工作需要,想找一个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

2



3

4



5

6

7

8

9

10



11

12


13

14

15

16

17

18



19

20



21

22



23

24



25

26

27

28



29

30



31

32

33

34

35

36

37


38

39

40

41

42

43

44



45

46



47

48

49



50



51

52



53

54



55

56



57

58



59

60

61

62



63

64



65

66

67

68



69

70

71

72

73

74



75

76



77

78

79

80



81

82

83

84

85

86



87

88



89

90

91

92



93

94

95

96

97

98



99

100



101

102

103

104



105

106

107

108

109

110


111

112

113

114

115

116

117

118



119

120



121

122

123

124



125

126

127

128

129

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