Если вы проверяете адреса IPV4, тогда довольно просто преобразовать IP-адреса в числа и проверить, находится ли данный IP-адрес между вашими низкими и высокими диапазонами (хотя преобразование адресов IPV6 в числа немного сложнее, особенно в VBScript)
Function ipv4ToNumber(ByVal ipv4)
Dim i, pos, PrevPos, num
For i = 1 To 4
pos = InStr(PrevPos + 1, ipv4, ".", 1)
If i = 4 Then pos = Len(ipv4) + 1
num = Int(Mid(ipv4, PrevPos + 1, pos - PrevPos - 1))
PrevPos = pos
ipv4ToNumber = ((num Mod 256) * (256 ^ (4 - i))) + ipv4ToNumber
next
End function
Function validateIP(ByVal ip, ByVal Low, ByVal High)
ip = ipv4ToNumber(ip)
Low = ipv4ToNumber(Low)
High = ipv4ToNumber(High)
If ip >= Low AND ip <= High Then
validateIP = True
Else
validateIP = False
End If
End Function
validateIP ( "40.77.167.163", "40.74.0.0", "40.125.127.255")
Выход:
Правда
РЕДАКТИРОВАТЬ: Если какие-либо разработчики Classic ASP хотят преобразовать адреса IPV6 в числа, использование VBScript (насколько я знаю) невозможно, но это можно сделать в MySQL:
Function ipv6ToNumber(ByVal ipv6)
Dim SQL : SQL = "SELECT CAST(" &_
"CONV(" &_
"SUBSTR(" &_
"HEX(" &_
"INET6_ATON('" & ipv6 & "')" &_
")" &_
",1,16)" &_
",16,10" &_
")AS DECIMAL(65))" &_
"*18446744073709551616" &_
"+CAST(" &_
"CONV(" &_
"SUBSTR(" &_
"HEX(" &_
"INET6_ATON('" & ipv6 & "')" &_
")" &_
",17,16)" &_
",16,10" &_
") AS DECIMAL(65))"
'ipv6ToNumber = Execute using MySQL and return the number
End Function
Или используйте серверный JavaScript:
<script language="javascript" type="text/javascript" runat="server">
function ipv6ToNumber(ip) {
ip.replace("::",":0:0:0:")
var parts = [];
ip.split(":").forEach(function(it) {
var bin = parseInt(it, 16).toString(2);
while (bin.length < 16) {
bin = "0" + bin;
}
parts.push(bin);
})
var bin = parts.join("");
var dec = bigInt(bin, 2).toString();
return dec;
}
</script>