首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么判断一个IP地址在一个IP地址段

2012-02-09 
如何判断一个IP地址在一个IP地址段?例如4.43.69.96 ~ 4.208.48.255有个ip 4.43.69.100请问如何判断他在这

如何判断一个IP地址在一个IP地址段?
例如
4.43.69.96 ~ 4.208.48.255

有个ip 4.43.69.100 
请问如何判断他在这个IP段中。谢谢!

[解决办法]
好像以前讨论过这个问题....
挖挖坟先~
[解决办法]

探讨
不是这样的
比如下面ip地址段
4.43.69.96 ~ 4.208.48.255

在表中4.43.69.96是一个字段的。4.208.48.255 是另外一个字段的。
我要传入的ip 是4.43.69.100 怎么判断是否在这个ip段中啊?

[解决办法]
探讨
引用:
引用:
不是这样的
比如下面ip地址段
4.43.69.96 ~ 4.208.48.255
在表中4.43.69.96是一个字段的。4.208.48.255 是另外一个字段的。
我要传入的ip 是4.43.69.100 怎么判断是否在这个ip段中啊?
4.43.69.96 ~ 4.208.48.255
这个处理一下,变成这样
4043069096 ~ 4208048255
4.43.69.100 处理成
4043069100
用整数,就好匹配了

用整数可能不严密吧..

[解决办法]
探讨
引用:
不是这样的
比如下面ip地址段
4.43.69.96 ~ 4.208.48.255

在表中4.43.69.96是一个字段的。4.208.48.255 是另外一个字段的。
我要传入的ip 是4.43.69.100 怎么判断是否在这个ip段中啊?

4.43.69.96 ~ 4.208.48.255
这个处理一下,变成这样
4043069096 ~ 4208048255

4.43.69.100 处理成
4043069100

用整数,就好匹配了

[解决办法]
最好的办法是转换为数字进行比较。 


另外


124.*.23.1 - 124.*.44.2

这个不是一个ip段,而是n个ip段
[解决办法]
转成 ***.***.***.***格式之后再根据字符串比较即可。

SQL code
 
create function f_checkIP(@IP varchar(20),@IP_ST varchar(20),@IP_ED varchar(20))
returns bit
as
begin
  select @IP  = right('00'+ParseName(@IP,4),3)+'.'+
          right('00'+ParseName(@IP,3),3)+'.'+
          right('00'+ParseName(@IP,2),3)+'.'+
          right('00'+ParseName(@IP,1),3),
    @IP_ST = right('00'+ParseName(@IP_ST,4),3)+'.'+
          right('00'+ParseName(@IP_ST,3),3)+'.'+
          right('00'+ParseName(@IP_ST,2),3)+'.'+
          right('00'+ParseName(@IP_ST,1),3),
    @IP_ED = right('00'+ParseName(@IP_ED,4),3)+'.'+
          right('00'+ParseName(@IP_ED,3),3)+'.'+
          right('00'+ParseName(@IP_ED,2),3)+'.'+
          right('00'+ParseName(@IP_ED,1),3)
         
  if (@IP between @IP_ST and @IP_ED)
    return 1
 
  return 0
end
go


select dbo.f_checkIP('4.208.48.215','4.43.69.96','4.208.48.255')
select dbo.f_checkIP('4.43.69.95'  ,'4.43.69.96','4.208.48.255')


drop function f_checkIP
go

[解决办法]
SQL code
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_IP2Int]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[f_IP2Int]GO--1. 字符串IP地址转换成IP数值函数。CREATE FUNCTION dbo.f_IP2Int(@ip char(15))RETURNS bigintASBEGIN    DECLARE @re bigint    SET @re=0    SELECT @re=@re+LEFT(@ip,CHARINDEX('.',@ip+'.')-1)*ID        ,@ip=STUFF(@ip,1,CHARINDEX('.',@ip+'.'),'')    FROM(        SELECT ID=CAST(16777216 as bigint)        UNION ALL SELECT 65536        UNION ALL SELECT 256        UNION ALL SELECT 1)a    RETURN(@re)ENDgoif   dbo.f_IP2Int('4.43.69.100' )  between dbo.f_IP2Int('4.43.69.96') and dbo.f_IP2Int('4.208.48.255')    print 'OK'else     Print 'NO'/*OK*/ 


[解决办法]

SQL code
create function f_checkIP(@IP varchar(20),@IP_ST varchar(20),@IP_ED varchar(20))returns bitasbegin    select @IP    = right('00'+ParseName(@IP,4),3)+'.'+                    right('00'+ParseName(@IP,3),3)+'.'+                    right('00'+ParseName(@IP,2),3)+'.'+                    right('00'+ParseName(@IP,1),3),           @IP_ST = right('00'+ParseName(@IP_ST,4),3)+'.'+                    right('00'+ParseName(@IP_ST,3),3)+'.'+                    right('00'+ParseName(@IP_ST,2),3)+'.'+                    right('00'+ParseName(@IP_ST,1),3),           @IP_ED = right('00'+ParseName(@IP_ED,4),3)+'.'+                    right('00'+ParseName(@IP_ED,3),3)+'.'+                    right('00'+ParseName(@IP_ED,2),3)+'.'+                    right('00'+ParseName(@IP_ED,1),3)                        if (@IP between @IP_ST and @IP_ED)        return 1        return 0endgoselect dbo.f_checkIP('4.208.48.215','4.43.69.96','4.208.48.255')select dbo.f_checkIP('4.43.69.95'  ,'4.43.69.96','4.208.48.255') 

热点排行