天天看點

ip白名單 通過* ? 檢測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

<code>#include "stdafx.h"</code>

<code>#include &lt;windows.h&gt;</code>

<code>#include &lt;string.h&gt;</code>

<code>#include &lt;assert.h&gt;</code>

<code> </code> 

<code>const</code>

<code>int</code> <code>maxCount = 100;</code>

<code>int</code> <code>strMaxLen = 16;</code>

<code>BOOLEAN IsMatchPattern(</code><code>const</code>

<code>char</code><code>* ipPattern,</code><code>const</code>

<code>char</code><code>* ipChar)</code>

<code>{</code>

<code> </code><code>char</code><code>* delims =</code><code>"."</code><code>;</code>

<code> </code><code>char</code><code>* pPattern[4] = {0};</code>

<code> </code><code>char</code><code>* pIp[4] = {0};</code>

<code> </code><code>char</code>

<code>i = 0,j = 0;;</code>

<code>_ipPattern[strMaxLen] = {0};</code>

<code>_ipChar[strMaxLen] = {0};</code>

<code> </code><code>if</code><code>( !ipPattern || !ipChar)</code>

<code>  </code><code>return</code>

<code>FALSE;</code>

<code> </code><code>// *字元前後隻允許為.字元</code>

<code> </code><code>if</code><code>(</code><code>‘*‘</code>

<code>== ipPattern[0] &amp;&amp;</code><code>‘.‘</code>

<code>!= ipPattern[1])</code>

<code>== ipPattern[strlen(ipPattern)-1] &amp;&amp;</code><code>‘.‘</code>

<code>!= ipPattern[strlen(ipPattern)-2])</code>

<code> </code><code>for</code><code>(i = 1;i &lt; (strlen(ipPattern)-2);i++)</code>

<code> </code><code>{</code>

<code>  </code><code>if</code><code>(</code><code>‘*‘</code>

<code>== ipPattern[i])</code>

<code>   </code><code>if</code><code>(</code><code>‘.‘</code>

<code>!= ipPattern[i-1] ||</code><code>‘.‘</code>

<code>!= ipPattern[i+1] )</code>

<code>    </code><code>return</code>

<code>  </code><code>continue</code><code>;</code>

<code> </code><code>}</code>

<code> </code><code>memcpy(_ipPattern,ipPattern,strlen(ipPattern));</code>

<code> </code><code>memcpy(_ipChar,ipChar,strlen(ipChar));</code>

<code> </code><code>pPattern[0] =strtok(_ipPattern,delims);</code>

<code> </code><code>for</code><code>(i = 1 ;i &lt; 4;i++)</code>

<code>  </code><code>pPattern[i] =strtok(NULL,delims);</code>

<code> </code><code>pIp[0] =strtok(_ipChar,delims);</code>

<code>  </code><code>pIp[i] =strtok(NULL,delims);</code>

<code> </code><code>// 分解字元串檢測 按‘.‘分成四個子字元串 每個字元串長度不超過3</code>

<code> </code><code>for</code><code>(i = 0 ;i &lt; 4;i++)</code>

<code>  </code><code>if</code><code>(strlen(pPattern[i]) &gt; 3)</code>

<code>   </code><code>return</code>

<code>  </code><code>if</code><code>(strlen(pIp[i]) &gt; 3)</code>

<code> </code><code>// 檢測字元串比對 有*号則放過檢測</code>

<code>  </code><code>for</code><code>(i = 0;i &lt; 4;i++)</code>

<code>  </code><code>if</code><code>( memcmp((</code><code>void</code><code>*)(pPattern[i]),</code><code>"*"</code><code>,1) ==0 )</code>

<code>  </code><code>{</code>

<code>   </code><code>continue</code><code>;</code>

<code>  </code><code>}</code>

<code>  </code><code>if</code><code>( strlen(pPattern[i]) != strlen(pIp[i]) )</code>

<code>  </code><code>for</code><code>(j = 0;j &lt; strlen(pPattern[i]);j++)</code>

<code>   </code><code>char</code><code>* subchPattern = pPattern[i];</code>

<code>   </code><code>char</code><code>* subchIp = pIp[i];</code>

<code>   </code><code>if</code><code>(subchPattern[j] !=</code><code>‘?‘</code>

<code>&amp;&amp; subchPattern[j] != subchIp[j])</code>

<code> </code><code>return</code>

<code>TRUE;</code>

<code>}</code>

<code>int</code>

<code>_tmain(</code><code>int</code>

<code>argc, _TCHAR* argv[])</code>

<code>ipCheckPattern[strMaxLen] =</code><code>"192.*.?2?.87"</code><code>;</code>

<code> </code><code>assert( FALSE == IsMatchPattern(ipCheckPattern,</code><code>"192.168.1.99"</code><code>) );</code>

<code> </code><code>assert( FALSE == IsMatchPattern(ipCheckPattern,</code><code>"192.168.272.87"</code><code>) );</code>

<code> </code><code>assert( TRUE == IsMatchPattern(ipCheckPattern,</code><code>"192.168.120.87"</code><code>) );</code>

<code> </code><code>assert( TRUE == IsMatchPattern(ipCheckPattern,</code><code>"192.122.223.87"</code><code>) );</code>

<code> </code><code>assert( FALSE == IsMatchPattern(ipCheckPattern,</code><code>"172.19.66.87"</code><code>) );</code>

<code> </code><code>assert( FALSE == IsMatchPattern(ipCheckPattern,</code><code>"172.0.0.87"</code><code>) );</code>

<code> </code><code>assert( TRUE == IsMatchPattern(ipCheckPattern,</code><code>"192.178.129.87"</code><code>) );</code>

<code> </code><code>assert( FALSE == IsMatchPattern(ipCheckPattern,</code><code>"192.212.17.71"</code><code>) );</code>

<code>0;</code>