|
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 |
#include "stdafx.h"#include <windows.h>#include <string.h>#include <assert.h> const
int maxCount = 100;const
int strMaxLen = 16; BOOLEAN IsMatchPattern(const
char* ipPattern,const
char* ipChar){ char* delims = "."; char* pPattern[4] = {0}; char* pIp[4] = {0}; char
i = 0,j = 0;; char
_ipPattern[strMaxLen] = {0}; char
_ipChar[strMaxLen] = {0}; if( !ipPattern || !ipChar) return
FALSE; // *字符前后只允许为.字符 if(‘*‘
== ipPattern[0] && ‘.‘
!= ipPattern[1]) return
FALSE; if( ‘*‘
== ipPattern[strlen(ipPattern)-1] && ‘.‘
!= ipPattern[strlen(ipPattern)-2]) return
FALSE; for(i = 1;i < (strlen(ipPattern)-2);i++) { if( ‘*‘
== ipPattern[i]) if( ‘.‘
!= ipPattern[i-1] || ‘.‘
!= ipPattern[i+1] ) return
FALSE; continue; } memcpy(_ipPattern,ipPattern,strlen(ipPattern)); memcpy(_ipChar,ipChar,strlen(ipChar)); pPattern[0] =strtok(_ipPattern,delims); for(i = 1 ;i < 4;i++) { pPattern[i] =strtok(NULL,delims); } pIp[0] =strtok(_ipChar,delims); for(i = 1 ;i < 4;i++) { pIp[i] =strtok(NULL,delims); } // 分解字符串检测 按‘.‘分成四个子字符串 每个字符串长度不超过3 for(i = 0 ;i < 4;i++) { if(strlen(pPattern[i]) > 3) return
FALSE; } for(i = 0 ;i < 4;i++) { if(strlen(pIp[i]) > 3) return
FALSE; } // 检测字符串匹配 有*号则放过检测 for(i = 0;i < 4;i++) { if( memcmp((void*)(pPattern[i]),"*",1) ==0 ) { continue; } if( strlen(pPattern[i]) != strlen(pIp[i]) ) return
FALSE; for(j = 0;j < strlen(pPattern[i]);j++) { char* subchPattern = pPattern[i]; char* subchIp = pIp[i]; if(subchPattern[j] != ‘?‘
&& subchPattern[j] != subchIp[j]) return
FALSE; } } return
TRUE;} int
_tmain(int
argc, _TCHAR* argv[]){ char
ipCheckPattern[strMaxLen] = "192.*.?2?.87"; assert( FALSE == IsMatchPattern(ipCheckPattern,"192.168.1.99") ); assert( FALSE == IsMatchPattern(ipCheckPattern,"192.168.272.87") ); assert( TRUE == IsMatchPattern(ipCheckPattern,"192.168.120.87") ); assert( TRUE == IsMatchPattern(ipCheckPattern,"192.122.223.87") ); assert( FALSE == IsMatchPattern(ipCheckPattern,"172.19.66.87") ); assert( FALSE == IsMatchPattern(ipCheckPattern,"172.0.0.87") ); assert( TRUE == IsMatchPattern(ipCheckPattern,"192.178.129.87") ); assert( FALSE == IsMatchPattern(ipCheckPattern,"192.212.17.71") ); return
0;} |
ip白名单 通过* ? 检测IP匹配 轻量级,布布扣,bubuko.com
原文:http://www.cnblogs.com/itdef/p/3774500.html