如何判断一个IP地址在一个IP地址段?

hanbing_zjp 2008-08-01 11:52:12
加精
例如
4.43.69.96 ~ 4.208.48.255

有个ip 4.43.69.100
请问如何判断他在这个IP段中。谢谢!
...全文
3665 68 打赏 收藏 转发到动态 举报
写回复
用AI写文章
68 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanyuchonglou 2012-02-07
  • 打赏
  • 举报
回复
谁说从一个地址上就能判断出它的MASK来啊?那是猜MASK。

然后假设MASK相同,才有上述的算法成立。

点分十进制是怎么来的?再按原样恢复成数据不就可以判断匹配与否了吗?可以用移位的。
sean_zhou 2012-01-15
  • 打赏
  • 举报
回复
我年初处理过这个问题,思路这样
a.b.c.d
转化
a*10^9+b*10^6+c*10^3+d
然后就可以直接比较了,跟前面的思路差不多,一直没找到更好的办法处理。
Grubby_F 2011-09-21
  • 打赏
  • 举报
回复
mACK 下先先。
Grubby_F 2011-09-21
  • 打赏
  • 举报
回复
mACK
wocaocao69 2011-06-02
  • 打赏
  • 举报
回复
这么多牛人
阿东gg 2011-03-24
  • 打赏
  • 举报
回复
学习了
freetd 2011-01-27
  • 打赏
  • 举报
回复
留个记号
mill_dhl 2010-08-18
  • 打赏
  • 举报
回复
留待以后用到
bdsq001 2008-12-10
  • 打赏
  • 举报
回复
收藏。
dyc611 2008-12-09
  • 打赏
  • 举报
回复
不错,谢谢啊
华芸智森 2008-08-08
  • 打赏
  • 举报
回复
为什么会有多个IP段呢,这是由于IP也是根据行政的区域或分的(感觉上好象只到县一级).
一个市的IP段包括了下面所有县级的IP段.某个县里的企业,他的IP肯定在所属县的段内也所属市的段内.所以,必须得有一个IP的整形差来查找最匹配的那个IP段.
华芸智森 2008-08-08
  • 打赏
  • 举报
回复
1。将IP全部处理成整数。

ALTER FUNCTION DBO.FUN_IP2INT(
@IP CHAR(20)
)RETURNS BIGINT
AS
BEGIN
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)
END

2。有一个开始的IP列(整型)int_begip,一个结束的IP列(整形)int_endip 。还有一个 DiffIp(两IP整形差值)int_diffip
在记录IP时,将IP全部转化,并计算出差值。

3。一般情况下,一个IP有可能匹配多个IP段的。如:
段一 128.5.6.1 128.5.6.230
段二 128.5.6.8 128.5.6.30
一个值是 128.5.6.20 ,应该匹配的是 128.5.6.8 128.5.6.30 ,而不是 128.5.6.1 128.5.6.230 .
要取出最匹配的IP,必须要用到IP差值.

DECLARE @INT_IP INT
SET @INT_IP=DBO.FUN_IP2INT('128.5.6.20')
SELECT top 1 Var_IP from (
select Var_IP,Int_DiffIp from IPTABLE WHERE @INT_IP>= INT_BEGIP AND @INT_IP<=INT_ENDIP
) as t order by Int_DiffIp











angelheavens 2008-08-06
  • 打赏
  • 举报
回复
转换成10进制,比大小
cacar2008 2008-08-05
  • 打赏
  • 举报
回复
mk
basaka1982 2008-08-05
  • 打赏
  • 举报
回复
mark
JavaPeak 2008-08-05
  • 打赏
  • 举报
回复
学习
uchiha2007 2008-08-05
  • 打赏
  • 举报
回复
mark!
僵哥 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 Bill1212 的回复:]
ip和子网掩码“与”运算,如果结果相同不就是一个段嘛
[/Quote]
这是同网段.

IP地址段,即IP地址范围.
Bill1212 2008-08-04
  • 打赏
  • 举报
回复
ip和子网掩码“与”运算,如果结果相同不就是一个段嘛
僵哥 2008-08-04
  • 打赏
  • 举报
回复
判断IP地址为什么不使用IP的二进制长整形值来判断,换使用字符串?一个IPv4的地址本来就只有四个字节,只是为了方便人为阅读才以字符串形式表示.就算比较起来,四字节的数的运算也远比字符串快得多吧?
加载更多回复(48)

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧