#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匹配 轻量级的更多相关文章

  1. Java IP白名单相关工具类

    关于设置IP白名单相关的一些方法,整理,记录了一下. package com.tools.iptool; import java.util.ArrayList; import java.util.Ha ...

  2. Windows Azure Web Site (14) Azure Web Site IP白名单

    <Windows Azure Platform 系列文章目录> 我们知道,在Azure Cloud Service和Virtual Machine,可以通过Endpoint ACL (Ac ...

  3. Centos防火墙添加IP白名单

    Centos iptables防火墙添加IP白名单,指定IP可访问端口 vi /etc/sysconfig/iptables 以下为我虚拟机的防火墙为例(Centos 7) # sample conf ...

  4. IP白名单的实现(PHP)

    有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...

  5. 对actuator的管理端点进行ip白名单限制(springBoot添加filter)

    在我们的SpringCloud应用中,我们会引入actuator来进行管理和监控我们的应用 常见的有:http://www.cnblogs.com/yangzhilong/p/8378152.html ...

  6. 嵌入式Linux可用的防火墙——iptables:实现ip白名单、mac地址白名单

    iptables是linux系统下的一个功能强大的模块,不仅可以用作防火墙,还可以实现NAT等众多路由功能.iptables的容器有很清晰的层次关系: 1. iptables是表的容器,iptable ...

  7. 除了白名单外的IP每秒最多处理 8 个请求 limit_conn_zone

    防止黑客知道你的源服务器真实IP进行并发攻击,通常只需要保护动态文件请求,�php. 添加文件 nginx/conf/limit/whiteip.conf 里面是你要忽略限制的 白名单 IP地址,通常 ...

  8. 利用CentOS系统IPtables防火墙添加网站IP白名单

    参考博文: 利用CentOS系统IPtables防火墙添加360网站卫士节点IP白名单 centos6.5添加白名单如下: 在防火墙 配置文件中加入白名单  ip -A INPUT -s 183.13 ...

  9. 解决微信公众平台IP白名单

    微信公众平台,作为自媒体的旗舰级产品,越来越多的人已经投入它的怀抱.正如它的广告词所说:再小的个体,也有品牌 好吧,闲话不多说,今天要说的是它的IP白名单机制. 我们现在安装的大部分的电信的家庭级别的 ...

  10. 微信公众平台宣布增加接口IP白名单提高安全性

    微信公众平台目前已经发布通知在平台接口调用上为了提高安全性需要添加IP白名单并仅允许白名单IP调用. 目前微信公众平台面向开发者主要提供的开发者ID和开发者密钥,在调用时ID和密钥通过检验即可进行调用 ...

随机推荐

  1. IntelliJ IDEA创建maven web项目(IDEA新手适用)

      步骤一:首先先创建一个project,在这里就是创建一个maven的工作空间 步骤二:按照下面的步骤操作就可以了,最后next 首先,选择左边的maven 然后在右边Creater from ar ...

  2. foreach的使用

    //foreach循环语句,常用来遍历数组,一般有两种使用方法:不取下标,取下标 //不取下表 foreach(数组 as 值) { //执行的程序 echo 值; } //取下标 foreach(数 ...

  3. 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 Week5 20165233

    Exp3 免杀原理与实践 实验内容 一.基础问题回答 1.杀软是如何检测出恶意代码的? 基于特征码的检测:通过与自己软件中病毒的特征库比对来检测的. 启发式的软件检测:就是根据些片面特征去推断.通常是 ...

  4. Flutter,最好的跨平台开发框架

    今天说说使用flutter的一些体会 对于Flutter,从发现到接触再到使用,不知不觉,已经有大半年了!在这段时间里,谷歌几乎每天都会更新Flutter,有时甚至一天更新几次,这让我对它更加充满信心 ...

  5. python学习之RabbitMQ-----消息队列

    RabbitMQ队列 首先我们在讲rabbitMQ之前我们要说一下python里的queue:二者干的事情是一样的,都是队列,用于传递消息 在python的queue中有两个一个是线程queue,一个 ...

  6. 使用three.js开发3d地图初探

    three是图形引擎,而web二维三维地图都是基于图形引擎的,所以拿three来开发需求简单的三维地图应用是没什么问题的. 1.坐标转换 实际地理坐标为经度.纬度.高度,而three.js使用的是右手 ...

  7. 使用eclipse从github导入maven项目

    github给的地址是类似https://github.com/xxx/se.git格式; 如何将其用eclipse导入呐? 第一步, Import Projects from Git 导入成功后 第 ...

  8. taskset: 让进程运行在指定的CPU 上

    观察发现4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态. 不了解Linux是如何调度的,但目前显然有优化的余地.除了处理正常任务,CPU#0还需要处理每秒网卡中断.因此,若能将 ...

  9. request.getParameterMap()获得Map中的数据

    今天使用request.getParameterMap()获得Map中的数据时,使用        Map map=request.getParameterMap();               i ...

  10. Haskell语言学习笔记(69)Yesod

    Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...