sql如何判断IP地址是否在某个IP段中
环境sqlserver 2008 R2
1.我的表结构
II_Id 标识
II_StartIP 开始ip
II_EndIP 结束ip
SI_Id 学校id
II_State ip状态是否检查过 这是我在程序里使用的
表名IPInfo
2.创建获取ip函数
CREATE FUNCTION GetIP(@ip varchar(20))
RETURNS varchar(20)
AS
BEGIN
DECLARE @IPre varchar(20)
SET @IPre=''
IF ISnumeric(parsename(@ip,4))=1
SET @IPre=RIGHT('000'+parsename(@ip,4),3)+'.'
IF ISnumeric(parsename(@ip,3))=1
SET @IPre=@IPre+RIGHT('000'+parsename(@ip,3),3)+'.'
ELSE
SET @IPre=@IPre+'%'+'.'
IF ISnumeric(parsename(@ip,2))=1
SET @IPre=@IPre+RIGHT('000'+parsename(@ip,2),3)+'.'
ELSE
SET @IPre=@IPre+'%'+'.'
IF iSnumeric(parsename(@ip,1))=1
SET @IPre=@IPre+RIGHT('000'+parsename(@ip,1),3)
ELSE
SET @IPre=@IPre+'%'
RETURN @IPre
END
3.查询测试
SELECT TOP 1000 [II_Id]
,[II_StartIP]
,[II_EndIP]
,[SI_Id]
,[II_State]
FROM [IPInfo]
where GetIP('218.7.49.25') between GetIP(II_StartIP) and GetIP(II_EndIP)
asp.net如何判断IP地址是否在某个IP段中
我的开发语言是asp.net(c#),下面我介绍一个我在asp.net中如何判断IP地址是否在某个IP段中
环境.net4.0 工具vs2010
1.ip的计算方法
/// <summary>
/// 分割IP
/// </summary>
/// <param name="ipAddress">IP地址</param>
/// <returns></returns>
private long getIpNum(String ipAddress)
{
String[] ip = ipAddress.Split(new char[] { '.' });
long a = int.Parse(ip[0]);
long b = int.Parse(ip[1]);
long c = int.Parse(ip[2]);
long d = int.Parse(ip[3]);
return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
}
/// <summary>
/// 判断客户端的IP是否在某个ip段中
/// </summary>
/// <param name="clientIp">客户端的IP</param>
/// <param name="begin">开始IP</param>
/// <param name="end">结束IP</param>
/// <returns></returns>
private bool isInner(long clientIp, long begin, long end)
{
return (clientIp >= begin) && (clientIp <= end);
}
2.测试
protected void Page_Load(object sender, EventArgs e)
{
//获取客户端ip地址
//Response.Write(Request.UserHostAddress);
//调用方法
long ip = getIpNum("218.7.49.25");
long start_ip = getIpNum("218.7.49.1");
long end_ip = getIpNum("218.7.49.127");
if (isInner(ip, start_ip, end_ip))
{
Response.Write("是");
}
else
{
Response.Write("不是");
}
}