- 浏览: 50479 次
- 性别:
- 来自: 武汉
最近访客 更多访客>>
文章分类
最新评论
-
fhqllt:
学习,以前还真没有注意。
js parseInt("08")问题 -
sharong:
匹配HTML标记的正则表达式:/<(.*)>.*& ...
正则表达式(不知道找全了没,还有漏掉的请高手留言相告)
以下方法实现判断一个IP是否被一个IP区间所包含
有一些静态方法可能引用了同名空间的自定义的类,
至于合并两个相临的IP段,可对其中的最大或最小IP+1
using System;
using System.Text.RegularExpressions;
namespace HKH.Common
{
/// <summary>
/// clsMacAndIP 的摘要说明。
/// </summary>
public class clsIPAddress
{
private clsIPAddress()
{
}
#region 判断是否合法 IP
/// <summary>
/// 判断是否合法 IP
/// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
public static bool ValidateIPAddress(string strIP)
{
if ( null == strIP || "" == strIP.Trim() || Convert.IsDBNull(strIP) )
return false;
return Regex.IsMatch(strIP,@"^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$");
}
#endregion
#region 转换成数值
/// <summary>
/// 转换为数值
/// </summary>
/// <param name="IPAddr"></param>
/// <returns></returns>
public static uint TransNum(string IPAddr)
{
if ( !ValidateIPAddress(IPAddr) )
throw new Exception("IP Address isn't Well Format!");
string[] IPStrArray = new string[4];
IPStrArray = IPAddr.Split('.');
return MAKELONG(MAKEWORD(byte.Parse(IPStrArray[3]),byte.Parse(IPStrArray[2])),MAKEWORD(byte.Parse(IPStrArray[1]),byte.Parse(IPStrArray[0])));
}
#endregion
#region 格式化
/// <summary>
/// 格式化
/// </summary>
/// <param name="IPAddr"></param>
/// <returns></returns>
public static string Format(string IPAddr)
{
if (IPAddr[0] == '.')
IPAddr = "0" + IPAddr;
if (IPAddr[IPAddr.Length - 1] == '.')
IPAddr += "0.0.0.";
else
IPAddr += ".0.0.0.";
IPAddr = IPAddr.Substring(0,clsString.IndexOf(IPAddr,".",4));
// //去掉无用的0
// IPAddr = Regex.Replace(IPAddr,"^0{1,2}","");
// IPAddr = Regex.Replace(IPAddr,@"\.+0{1,2}",".");
if ( ValidateIPAddress(IPAddr) )
return IPAddr;
return "0.0.0.0";
}
#endregion
#region 比较两个IP的大小
/// <summary>
/// 比较两个IP的大小
/// </summary>
/// <param name="IP1"></param>
/// <param name="IP2"></param>
/// <returns></returns>
public static int Compare(string IP1,string IP2)
{
if ( !(ValidateIPAddress(IP1) && ValidateIPAddress(IP2)))
throw new Exception("IP Address isn't Well Format!");
uint IPNum1 = TransNum(IP1);
uint IPNum2 = TransNum(IP2);
if (IPNum1 == IPNum2 )
return 0;
return IPNum1 > IPNum2 ? 1 : -1 ;
}
#endregion
#region 判断一个IP是否包含在指定IP区间内
/// <summary>
/// 判断一个IP是否包含在指定IP区间内
/// </summary>
/// <param name="IPRegion"></param>
/// <param name="IP"></param>
/// <returns></returns>
public static bool IsInclude(string[] IPRegion,string IP)
{
//验证
if ( null == IPRegion || null == IP || 0 == IPRegion.Length )
return false;
if ( !ValidateIPAddress(IP) )
return false;
if ( 1 == IPRegion.Length )
{
if ( !ValidateIPAddress(IPRegion[0]) )
return false;
if ( 0 == Compare(IPRegion[0],IP) )
return true;
}
if ( !(ValidateIPAddress(IPRegion[0]) && ValidateIPAddress(IPRegion[1])) )
return false;
uint IPNum = TransNum(IP);
uint IPNum1 = TransNum(IPRegion[0]);
uint IPNum2 = TransNum(IPRegion[1]);
//比较
if ( Math.Min(IPNum1,IPNum2) <= IPNum && Math.Max(IPNum1,IPNum2) >= IPNum )
return true;
return false;
}
#endregion
#region 判断两个IP区间是否重叠,重叠则返回合并区间,否则返回 NULL
/// <summary>
/// 判断两个IP区间是否重叠,重叠则返回合并区间,否则返回 NULL
/// </summary>
/// <param name="IPRegion1"></param>
/// <param name="IPRegion2"></param>
/// <returns></returns>
public static string[] CheckOverlapAndMerge(string[] IPRegion1,string[] IPRegion2)
{
//验证
if ( null == IPRegion1 || null == IPRegion2 || 0 == IPRegion1.Length || 0 == IPRegion2.Length )
return null;
//分数组长度进行处理 =1 和 > 1
if ( 1 == IPRegion1.Length )
{
if (!ValidateIPAddress(IPRegion1[0]))
throw new Exception("IP Address isn't Well Format!");
if ( 1 == IPRegion2.Length )
{
if (!ValidateIPAddress(IPRegion2[0]))
throw new Exception("IP Address isn't Well Format!");
//相等
if ( Equals(IPRegion1[0],IPRegion2[0]) )
return IPRegion1;
}
// > 1
else
{
if ( !(ValidateIPAddress(IPRegion2[0]) && ValidateIPAddress(IPRegion2[1])) )
throw new Exception("IP Address isn't Well Format!");
if ( IsInclude(IPRegion2,IPRegion1[0]) )
return IPRegion2;
}
}
// >1
else
{
if ( !(ValidateIPAddress(IPRegion1[0]) && ValidateIPAddress(IPRegion1[1])) )
throw new Exception("IP Address isn't Well Format!");
if ( 1 == IPRegion2.Length )
{
if (!ValidateIPAddress(IPRegion2[0]))
throw new Exception("IP Address isn't Well Format!");
if ( IsInclude(IPRegion1,IPRegion2[0]) )
return IPRegion1;
}
// > 1
else
{
if ( !(ValidateIPAddress(IPRegion2[0]) && ValidateIPAddress(IPRegion2[1])) )
throw new Exception("IP Address isn't Well Format!");
uint IPNum1_1 = TransNum(IPRegion1[0]);
uint IPNum1_2 = TransNum(IPRegion1[1]);
uint IPNum2_1 = TransNum(IPRegion2[0]);
uint IPNum2_2 = TransNum(IPRegion2[1]);
#region 大小格式整理 IP[0] <= IP[1]
if ( IPNum1_1 > IPNum1_2 )
{
string stemp = IPRegion1[0];
IPRegion1[0] = IPRegion1[1];
IPRegion1[1] = stemp;
uint utemp = IPNum1_1;
IPNum1_1 = IPNum1_2;
IPNum1_2 = utemp;
}
if ( IPNum2_1 > IPNum2_2 )
{
string stemp = IPRegion2[0];
IPRegion2[0] = IPRegion2[1];
IPRegion2[1] = stemp;
uint utemp = IPNum2_1;
IPNum2_1 = IPNum2_2;
IPNum2_2 = utemp;
}
#endregion
#region 判断合并
//互不包含
if ( IPNum1_1 > IPNum2_2 || IPNum1_2 < IPNum2_1 )
return null;
//合并
string[] result = new string[2];
result[0] = IPNum1_1 < IPNum2_1 ? IPRegion1[0] : IPRegion2[0] ;
result[1] = IPNum1_2 > IPNum2_2 ? IPRegion1[1] : IPRegion2[1] ;
return result;
#endregion
}
}
return null;
}
#endregion
#region 私有方法
/// <summary>
/// 移位转换_8
/// </summary>
/// <param name="bLow"></param>
/// <param name="bHigh"></param>
/// <returns></returns>
private static ushort MAKEWORD(byte bLow,byte bHigh)
{
return ((ushort) (((byte) (bLow)) | ((ushort) ((byte) (bHigh))) << 8));
}
/// <summary>
/// 移位转换_16
/// </summary>
/// <param name="bLow"></param>
/// <param name="bHigh"></param>
/// <returns></returns>
private static uint MAKELONG(ushort bLow,ushort bHigh)
{
return ((uint) (((ushort) (bLow)) | ((uint) ((ushort) (bHigh))) << 16));
}
#endregion
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/21aspnet/archive/2007/03/23/1539209.aspx
发表评论
-
数据库取值形成xml实现tree
2010-03-29 23:44 595Create three .aspx files TreeV ... -
如何将Excel和xml文件数据保存到数据库
2010-03-29 23:43 757Inherits System.Windows.Forms.F ... -
XML的简单读取与写入
2010-03-29 23:41 632我用的是一种很笨的方法,但可以帮助初学者了解访问XML节点的过 ... -
Asp.net+Xml实现无数据库论坛一点即通
2010-03-29 23:40 633目前,网上论坛各式各 ... -
只要你敢进来,没有学不会xml滴
2010-03-29 23:39 5631、前言本贴绝大部分资源均转自http://www.xml.o ... -
xml操作类(转载)
2010-03-29 23:37 607<%Class XMLDOMDocument Priv ... -
XML的二十个热点问题
2010-03-29 23:35 516翻译:Chen Zhihong 编辑: ... -
在.NET中利用XMLHTTP下载文件
2010-03-29 23:33 725利用XMLHTTP下载文件,和以前的方法一样,先添加引用-CO ... -
asp.net 对xml文件的读写,添加,修改,删除操作
2010-03-29 23:32 708asp.net 对xml文件的读写,添加,修改,删除操作 下面 ... -
用Asp.net实现基于XML的留言簿
2010-03-29 23:30 581一.概要: 留言簿是网站的一个重要组成部分,是访问者发 ... -
XML与DataSet的相互转换类
2010-03-29 23:28 645送给大家一个XML与DataSet的相互转换的类:XmlDat ... -
C#如何取硬件标志
2010-03-29 23:22 677using System; using System.Runt ... -
XML操作类
2010-03-29 23:02 600public class XmlControl { prote ...
相关推荐
windows 下对多ip及ip段进行相同合并处理并输出合并后的ip段,方便网络管理员进行管理,来源于github开源项目
当Excel中给出各个地区的IP区间,并且一个地区对应多条区间,若人工对区间去处理,很麻烦,使用此程序,可以实现根据Excel中不同的区域,来统计汇总IP的区间
纯 php 代码完成,不依赖任何扩展,采用二分查找定位IP区间,速度很快。 文本词典可兼容纯真IP数据库,提供程序脚本转换文本文件至本程序使用的数据。 经比较本词典最终生成的二进制文件比纯真结构还略小。 现在...
本文主要介绍了C# 获取IP及判断IP是否在区间的方法。具有很好的参考价值,下面跟着小编一起来看下吧
IpRangeUtil;java 校验Ip段(子网掩码); 支持 iptables.patterns=10.0.0.0/8,192.168.0.0/16,172.16.0.0/12,202.195.129.240/28,202.195.128.0/20
对上次上传的处理excel中区域IP区间的完善,使得处理后的IP区域无重叠的出现
IP 地址统计题目描述:数据中心有一些 ip 地址库,包括每个地址区间以及归属省份(ip 地址区间不会重叠交叉),现在要对用户访问日志统计每个省份的访问数量。输
计算IP地址掩码,主机位数的小工具,支持10进制到2进制的转换.
当我们想要查询 202.102.133.13 这个 IP 地址的归属地时,我们就在地址库中搜索,发现这个 IP 地址落在 [202.102.133.0, 202
IP地址归属地查询:包含省份、城市、运营商:移动,联通,电信等、ip地址开始和结束区间
全国IP数据库
络互连体系基础上,设计和实现了一种具备CAN、ZigBee、以太网等多种通信接I=I,且能够处理区间交通参数的互连网关;通过协议转换方式实现异构网络的互连;给出了TCP/IP协议族面向交通信息采集的嵌入式精简方案。...
准确快速扫描指定区间的IP地址。非常实用!
最新的IP地址Json数据, 起止IP都已经为整数, 整数区间查找很方便 52万条数据 最新下载: https://laohu.jixiangma.net/?page=ip&token=bulu
3) 双方都正确设置了网内IP地址,且必须在一个网段中; 4) 双方的计算机中都关闭了防火墙,或者防火墙策略中没有阻止网上邻居访问的策略。 Windows 98/2000/XP/2003访问XP的用户验证问题 首先关于启用Guest为什么...
整合有论坛、在线支付、IP段限制、商品的管理、多模块管理、多模板风格等,可以说是一个非常难得的免费网上开店程序。 十大优势: 一、批量优惠券生成功能。 二、Excel批量导入,批量修改商品,添加和修改...
你可以通过增加一个配置文件,然后将需要禁止的一些 IP 地址通过一定规则添加到配置文件中,在程序初始化的时候,读取配置文件中的每个规则,然后通过本文提供的方法去检查当前访问的客户端 IP 地址是否存在于这些...
因此这些用户通常会在每次拨通ISP的主机后,自动获得一个动态的IP地址,该地址当然不是任意的,而是该ISP申请的网络ID和主机ID的合法区间中的某个地址。拨号用户任意两次连接时的IP地址很可能不同,但是在每次连接...