在网址开发中有时可能要用到只能使在允许范围内的IP可以范围,怎样管理允许范围的IP呢也许大家的方法各不相同,也可以使用IIS自带的。我是用xml来存储可以访问的IP,用户访问时来判断他的Ip是否在存储的IP的范围内:


XML文件
<IP>
<Item>
<FromIP>10.116.192.4</FromIP>
<ToIP>10.116.192.255</ToIP>
</Item>
<Item>
<FromIP>10.116.193.1</FromIP>
<ToIP>10.116.192.255</ToIP>
</Item>
<Item>
<FromIP>192.168.1.1</FromIP>
<ToIP>192.168.1.255</ToIP>
</Item>
<Item>
<FromIP>127.0.0.1</FromIP>
<ToIP>127.0.0.255</ToIP>
</Item>
<Item>
<FromIP>59.41.215.225</FromIP>
<ToIP>59.41.215.230</ToIP>
</Item>
</IP>
核心代码:

将IP格式转换成功整型
///
/// 将IP格式转换成功整型
///
///
"IPv4">
///
public static Int32 IpToInt(string IPv4)

...{
try

...{
string[] IpArr = IPv4.Split('.');
if (IpArr.Length != 4)

...{
throw new Exception("IP格式错误");
}
return int.Parse(IpArr[0]) * 256 * 256 * 256 + int.Parse(IpArr[1]) * 256 * 256 + int.Parse(IpArr[2]) * 256 + int.Parse(IpArr[3]);
}
catch

...{
throw new Exception("IP格式错误");
}
}

获取所有IP
///
/// 获取所有IP
///
///
public static DataTable GetIpList()

...{
DataTable dt = new DataTable();
dt.Columns.Add("FromIP", typeof(string));
dt.Columns.Add("ToIP", typeof(string));
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Path);
XmlNodeList Nodes= xDoc.SelectNodes("//IP/Item");
foreach (XmlNode node in Nodes)

...{
DataRow row = dt.NewRow();
row["FromIP"] = node.ChildNodes[0].InnerText;
row["ToIP"] = node.ChildNodes[1].InnerText ;
dt.Rows.Add(row);
}
return dt;
}

判断IP是否正确
**////
/// 判断IP是否正确
///
///
"IP">
///
static public bool IsRightIP(string IP)

...{
try

...{
IPAddress.Parse(IP);
return true;
}
catch

...{
return false;
}
}

增加IP
///
/// 增加IP
///
///
"FromIP">
///
"ToIP">
///
public static bool AddIp(string FromIP,string ToIP)

...{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Path);
try

...{
XmlNode node= xDoc.SelectSingleNode("//IP");
XmlElement elItem = xDoc.CreateElement("Item");
XmlElement elFromIP = xDoc.CreateElement("FromIP");
XmlElement elToIP = xDoc.CreateElement("ToIP");
elFromIP.InnerText = FromIP;
elToIP.InnerText = ToIP;
elItem.AppendChild(elFromIP);
elItem.AppendChild(elToIP);
node.AppendChild(elItem);
xDoc.Save(Path);
return true;
}
catch

...{
return false;
}
}

删除IP
**////
/// 删除IP
///
///
"FromIp">
///
"ToIp">
///
public static bool DeleteIp(string FromIp, string ToIp)

...{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Path);
try

...{
XmlNode IpNode = xDoc.SelectSingleNode("//IP");
XmlNode node = xDoc.SelectSingleNode("//Item[FromIP='"+FromIp+"' and ToIP='"+ToIp+"']");
if (node != null)

...{
IpNode.RemoveChild(node);
xDoc.Save(Path);
return true;
}
else

...{
return false;
}
}
catch

...{
return false;
}
}

更新IP
**////
/// 更新IP
///
///
"FromIP">
///
"ToIp">
///
"OldFromIP">
///
"OldToIP">
///
public static bool UpdateIp(string FromIP, string ToIp,string OldFromIP,string OldToIP)

...{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Path);
try

...{
XmlNode node = xDoc.SelectSingleNode("//Item[FromIP='" + OldFromIP + "' and ToIP='" + OldToIP + "']");
if (node != null)

...{
node.ChildNodes[0].InnerText = FromIP;
node.ChildNodes[1].InnerText = ToIp;
xDoc.Save(Path);
return true;
}
else

...{
return false;
}
}
catch

...{
return false;
}
}

判断IP断是否存在
**////
/// 判断IP段是否存在
///
///
"FromIP">
///
"ToIP">
///
public static bool IsExistIP(string FromIP, string ToIP)

...{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Path);
try

...{
XmlNode node = xDoc.SelectSingleNode("//Item[FromIP='" + FromIP + "' and ToIP='" + ToIP + "']");
if (node != null)

...{
return true;
}
else

...{
return false;
}
}
catch

...{
throw;
}
}

判断是否是允许的IP
/**////
/// 判断是否是允许的IP
///
///
"IP">
///
public static bool IsAllowIp(string IP)

...{
string FromIP, ToIP;
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Path);
try

...{
XmlNodeList Nodes = xDoc.SelectNodes("//IP/Item");
foreach (XmlNode node in Nodes)

...{
FromIP = node.ChildNodes[0].InnerText;
ToIP = node.ChildNodes[1].InnerText;
if (IsInScope(FromIP, ToIP, IP))

...{
return true;
}
}
return false;
}
catch

...{
return false;
}
}

是否在范围内
**////
/// 是否在范围内
///
///
"FromIP">
///
"ToIP">
///
private static bool IsInScope(string FromIP, string ToIP,string ClientIP)

...{
try

...{
if ((IpToInt(ClientIP) >= IpToInt(FromIP) && IpToInt(ClientIP) <= IpToInt(ToIP)) || (IpToInt(ClientIP) <= IpToInt(FromIP) && IpToInt(ClientIP) >= IpToInt(ToIP)))

...{
return true;
}
else

...{
return false;
}
}
catch

...{
return false;
}
}