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 <windows.h></code>
<code>#include <string.h></code>
<code>#include <assert.h></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] &&</code><code>‘.‘</code>
<code>!= ipPattern[1])</code>
<code>== ipPattern[strlen(ipPattern)-1] &&</code><code>‘.‘</code>
<code>!= ipPattern[strlen(ipPattern)-2])</code>
<code> </code><code>for</code><code>(i = 1;i < (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 < 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 < 4;i++)</code>
<code> </code><code>if</code><code>(strlen(pPattern[i]) > 3)</code>
<code> </code><code>return</code>
<code> </code><code>if</code><code>(strlen(pIp[i]) > 3)</code>
<code> </code><code>// 檢測字元串比對 有*号則放過檢測</code>
<code> </code><code>for</code><code>(i = 0;i < 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 < 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>&& 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>