代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
CSharp
】
一个验证IP范围内权限的C#方法,支持 ? * -
作者:
Dezai.CN
/ 发布于
2012/12/19
/
566
protected void Page_Load(object sender, EventArgs e) { Response.Write(IsAllowIP("192.168.1.231-236:yes;192.168.1.238:no", "192.168.1.235")); Response.Write(IsAllowIP("192.168-169.1.23*:no", "192.168.1.235")); Response.Write(IsAllowIP("1*.168.1.23?:yes", "192.168.1.235")); Response.Write(IsAllowIP("1?2.16*.1.231-236:no", "192.168.1.235")); } #region 验证在IP范围内是否允许 /// <summary> /// 判断指定的IP是否在指定的 规则下允许的(三个特殊符号 -?*) /// rule[192.*.1.236-239:yes;192.*.1.226:no;218.85.*.*:no]最后一个不要加";"分号 /// 前面的规则优先级高 /// 注意,规则中的 * - ? 不能同时存在于同一个段内 如: 192.168.*?.123 会出错 /// *号在同一段内只能有一个, 如 192.16*.1.*, 192.1**.1.1 是错误的,可以用 ?号代替 /// </summary> /// <param name="rule">(192.*.1.236-239:yes;192.*.1.226:no;218.85.*.*:no) 最后一个规则不要再多加";"分号</param> /// <param name="ip">192.168.1.237(不正确的IP会出错)</param> /// <returns></returns> public static bool IsAllowIP(string rule, string ip) { //IP正则表达式 string ipRegexString = @"^((2[0-4]/d|25[0-5]|[01]?/d/d?)/.){3}(2[0-4]/d|25[0-5]|[01]?/d/d?)$"; //如果IP地址是错的,禁止 if (!Regex.IsMatch(ip, ipRegexString)) { throw new Exception("参数ip错误:错误的IP地址" + ip); } else { //分离规则 string[] ruleArray = rule.Split(new char[] { ';' }); string[] ipdata = ip.Split(new char[] { '.' }); bool retValue = false;//默认返回值 //遍历规则并验证 foreach (string s in ruleArray) { bool IsFind = false; string[] data = s.Split(new char[] { ':' }); //如果没有用:分开 if (data.Length != 2) { throw new Exception("请用:分开 如:192.168.1.1:yes"); } string ruleIp = data[0];//得到 192.168.20-60.*:yes 中的 [192.168.20-60.*]部分 retValue = data[1].ToString().ToLower() == "yes" ? true : false; string[] ruleIpArray = ruleIp.Split(new char[] { '.' }); if (ruleIpArray.Length != 4) { throw new Exception("IP部分错误!"); } #region for (int i = 0; i < 4; i++) { bool AA = ruleIpArray[i].Contains("*"); bool BB = ruleIpArray[i].Contains("-"); bool CC = ruleIpArray[i].Contains("?"); if ((AA && BB) || (AA && CC) || (BB && CC) || (AA && BB && CC)) { throw new Exception("这样的格式是错误的,192.168.15-20*,*与-不能包含在同一个部分! "); } else if (!AA && !BB && !CC) //没有包含 * 与 - 及 ? { if (!Regex.IsMatch(ruleIpArray[i], @"^2[0-4]/d|25[0-5]|[01]?/d/d?$")) { throw new Exception("IP段错误应该在1~255之间:" + ruleIpArray[i]); } else { #region 这里判断 111111111111 if (ruleIpArray[i] == ipdata[i]) { IsFind = true; } else { IsFind = false; break; } #endregion } } else if (AA && !BB && !CC) //包含 [*] 的 { if (ruleIpArray[i] != "*") { if (ruleIpArray[i].StartsWith("*") || !ruleIpArray[i].EndsWith("*") || ruleIpArray[i].Contains("**")) { throw new Exception("IP中的*部分:不能以*开头,不能有两个**,只能以*结尾"); } } else { #region 这里判断22222222222222 if (ipdata[i].StartsWith(ruleIpArray[i].Replace("*", ""))) { IsFind = true; } else { IsFind = false; break; } #endregion } } else if (BB && !AA && !CC) //包含 [-] 的 { string[] temp = ruleIpArray[i].Split(new char[] { '-' }); if (temp.Length != 2) { throw new Exception("IP段错误, 如:23-50,在1~255之间"); } else { if (Convert.ToInt32(temp[0]) < 1 || Convert.ToInt32(temp[1]) > 255) { throw new Exception("IP段错误, 如:23-50,在1~255之间"); } else { #region 这里判断33333333333333333 string[] Num = ruleIpArray[i].Split(new char[] { '-' }); int p = int.Parse(ipdata[i]); if (p >= int.Parse(Num[0]) && p <= int.Parse(Num[1])) { IsFind = true; } else { IsFind = false; break; } #endregion } } } else if (CC && !AA & !BB) //包含 [?] 的 { //去掉问号后 string temp = ruleIpArray[i].Replace("?", ""); Regex re = new Regex(@"^/d/d?$"); if (!re.IsMatch(temp) || temp.Length > 2) { throw new Exception("IP段错误:" + ruleIpArray[i]); } else { #region 这里判断4444444444444 if (ruleIpArray[i].Length != ipdata[i].Length) { IsFind = false; break; } else { string tempRegstring = "^" + ruleIpArray[i].Replace("?", @"/d") + "$"; Regex tempRe = new Regex(tempRegstring); if (tempRe.IsMatch(ipdata[i])) { IsFind = true; } else { IsFind = false; break; } } #endregion } } else { IsFind = false; break; } } #endregion if (IsFind) { return retValue;//IP规则中 :后面的 yes/no 对应的 true false } } return false; } } #endregion
试试其它关键字
验证IP范围
同语言下
.
文件IO 操作类库
.
Check图片类型[JPEG(.jpg 、.jpeg),TIF,GIF,BMP,PNG,P
.
机器名和IP取得(IPV4 IPV6)
.
Tiff转换Bitmap
.
linqHelper
.
MadieHelper.cs
.
RegHelper.cs
.
如果关闭一个窗体后激活另一个窗体的事件或方法
.
创建日志通用类
.
串口辅助开发类
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3