如何判断一个IP是否属于一个IP区间?

snfdf 2003-07-14 09:21:52
请问如何判断一个IP是否属于一个IP区间?比如判断200.13.1.100是否属于200.13.1.1(ip段1)-200.13.1.200(ip段2).最好能提供给我一段代码(vbs)因为我现在一点思路都没有,不知道该怎么样循环.
...全文
231 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zorou_fatal 2003-07-15
  • 打赏
  • 举报
回复
不错,互相的学习。^_^
liudong963 2003-07-14
  • 打赏
  • 举报
回复
刚才回复时出现了错误,我还以为回复不成功,结果还是上了,呵呵。

分数只是一种代表,但是知识是无价的……学习ing
liudong963 2003-07-14
  • 打赏
  • 举报
回复
zorou_fatal(代码比人可爱) 编写的处理程序不愧为好程序,但是遇到IP地址使用了通配符(*)和下面情况好像就不行了:
IPstart="200.13.1.1"
IPend="200.13.2.0"

根据需要我也编写了一段,效率虽然不高,但是功能还算强大,呵呵
========================================================================
Function getDbl(byVal IP,Cvalue)
Dim regEx, Matches, DataStr
IP=IP&"."

Set regEx = New RegExp
regEx.Pattern = "(\d){1,3}."
regEx.Global = True

Set Matches = regEx.Execute(Replace(IP,"*",Cvalue))
DataStr=Matches.Item(0).Value _
&Space(4-Matches.Item(1).Length)&Matches.Item(1).Value _
&"_" _
&Space(4-Matches.Item(2).Length)&Matches.Item(2).Value _
&Space(4-Matches.Item(3).Length)&Matches.Item(3).Value
DataStr=Replace(Replace(Replace(DataStr," ","0"),".",""),"_",".")
getDbl=CDbl(DataStr)
End Function

Function IPTest(byVal startIP,byVal endIP,byVal testIP)
If Instr(startIP,"*")<Instr(endIP,"*") then startIP=endIP
IPTest =(getDbl(startIP,0)<=getDbl(testIP,0) and getDbl(endIP,255)>=getDbl(testIP,255))
End Function

'测试结果
IPTest("200.13.1.1","200.13.1.200","200.13.1.100") 'true
IPTest("200.13.1.*","200.13.*.*","200.13.23.100") 'true
IPTest("200.13.1.1","200.13.1.*","200.13.1.26") 'true
IPTest("200.13.*.*","200.13.1.*","200.13.1.100") 'true
snfdf 2003-07-14
  • 打赏
  • 举报
回复
liudong963(东仔),不好意思啊,我在结贴的时候你又发表了回复了,所以没法给你分了,而且我的分也只有80分了,所以不好意思啦.
liudong963 2003-07-14
  • 打赏
  • 举报
回复
zorou_fatal(代码比人可爱) 编写的不愧是一个好程序,但是遇到IP有通配符(*)和下面情况就有点行不通了

IPstart="200.13.1.1"
IPend="200.13.10.0"

因此编写下面函数,效率不高但是功能还算强大
=============================================================
Function getDbl(byVal IP,Cvalue)
Dim regEx, Matches, DataStr
IP=IP&"."

Set regEx = New RegExp
regEx.Pattern = "(\d){1,3}."
regEx.Global = True

Set Matches = regEx.Execute(Replace(IP,"*",Cvalue))
DataStr=Matches.Item(0).Value _
&Space(4-Matches.Item(1).Length)&Matches.Item(1).Value _
&"_" _
&Space(4-Matches.Item(2).Length)&Matches.Item(2).Value _
&Space(4-Matches.Item(3).Length)&Matches.Item(3).Value
DataStr=Replace(Replace(Replace(DataStr," ","0"),".",""),"_",".")
getDbl=CDbl(DataStr)
End Function

Function IPTest(byVal startIP,byVal endIP,byVal testIP)
If Instr(startIP,"*")<Instr(endIP,"*") then startIP=endIP
IPTest =(getDbl(startIP,0)<=getDbl(testIP,0) and getDbl(endIP,255)>=getDbl(testIP,255))
End Function

'测试结果
IPTest("200.13.1.1","200.13.1.200","200.13.1.100") 'true
IPTest("200.13.1.*","200.13.*.*","200.13.23.100") 'true
IPTest("200.13.1.1","200.13.1.*","200.13.1.26") 'true
IPTest("200.13.*.*","200.13.1.*","200.13.1.100") 'true
snfdf 2003-07-14
  • 打赏
  • 举报
回复
谢谢,我明白了.
xshuiniu 2003-07-14
  • 打赏
  • 举报
回复
还是不懂
zorou_fatal 2003-07-14
  • 打赏
  • 举报
回复
恩,比如

IPstart="200.13.1.1"
IPend="200.13.1.200"
Array_IPstart=split(Ipstart,".")
Array_IPend=split(Ipend,".")
如果要判断的IP在变量Target里,可以
Target="200.13.1.100"
Array_Target=split(Target,".")
Dim into
into=1
for int i=0 to 3
if Array_Target(i)<=Array_IPend(i) and Array_Target(i)>=Array_IPstart(i) then
into=into*1
else
into=into*0
end if
next

最后判断
if i=1 then
response.write "在范围内"
else
response.write "不在范围内"
end if
cloudchen 2003-07-14
  • 打赏
  • 举报
回复
拆分前三断用instr检测,最后一段比较大小

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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