使用XML配置管理允许访问网站的IP
2007-07-13 16:43 ruinet 阅读(459) 评论(0) 编辑 收藏 举报在网址开发中有时可能要用到只能使在允许范围内的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>
<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格式转换成功整型
/**//// <summary>
/// 将IP格式转换成功整型
/// </summary>
/// <param name="IPv4"></param>
/// <returns></returns>
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格式错误");
}
}
/**//// <summary>
/// 将IP格式转换成功整型
/// </summary>
/// <param name="IPv4"></param>
/// <returns></returns>
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
/**//// <summary>
/// 获取所有IP
/// </summary>
/// <returns></returns>
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;
}
/**//// <summary>
/// 获取所有IP
/// </summary>
/// <returns></returns>
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是否正确
/**//// <summary>
/// 判断IP是否正确
/// </summary>
/// <param name="IP"></param>
/// <returns></returns>
static public bool IsRightIP(string IP)
{
try
{
IPAddress.Parse(IP);
return true;
}
catch
{
return false;
}
}
/**//// <summary>
/// 判断IP是否正确
/// </summary>
/// <param name="IP"></param>
/// <returns></returns>
static public bool IsRightIP(string IP)
{
try
{
IPAddress.Parse(IP);
return true;
}
catch
{
return false;
}
}
增加IP
/**//// <summary>
/// 增加IP
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIP"></param>
/// <returns></returns>
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;
}
}
/**//// <summary>
/// 增加IP
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIP"></param>
/// <returns></returns>
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
/**//// <summary>
/// 删除IP
/// </summary>
/// <param name="FromIp"></param>
/// <param name="ToIp"></param>
/// <returns></returns>
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;
}
}
/**//// <summary>
/// 删除IP
/// </summary>
/// <param name="FromIp"></param>
/// <param name="ToIp"></param>
/// <returns></returns>
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
/**//// <summary>
/// 更新IP
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIp"></param>
/// <param name="OldFromIP"></param>
/// <param name="OldToIP"></param>
/// <returns></returns>
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;
}
}
/**//// <summary>
/// 更新IP
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIp"></param>
/// <param name="OldFromIP"></param>
/// <param name="OldToIP"></param>
/// <returns></returns>
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段是否存在
/**//// <summary>
/// 判断IP段是否存在
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIP"></param>
/// <returns></returns>
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;
}
}
/**//// <summary>
/// 判断IP段是否存在
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIP"></param>
/// <returns></returns>
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
/**//// <summary>
/// 判断是否是允许的IP
/// </summary>
/// <param name="IP"></param>
/// <returns></returns>
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;
}
}
/**//// <summary>
/// 判断是否是允许的IP
/// </summary>
/// <param name="IP"></param>
/// <returns></returns>
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;
}
}
是否在范围内
/**//// <summary>
/// 是否在范围内
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIP"></param>
/// <returns></returns>
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;
}
}
/**//// <summary>
/// 是否在范围内
/// </summary>
/// <param name="FromIP"></param>
/// <param name="ToIP"></param>
/// <returns></returns>
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;
}
}