Javascript 经典ASP中ipv6地址的字符串表示形式

Javascript 经典ASP中ipv6地址的字符串表示形式,javascript,asp-classic,ipv6,Javascript,Asp Classic,Ipv6,出于地理定位的目的,我试图获取ip v6地址数值的字符串表示形式。 因为经典ASP不处理bigint值,所以我尝试使用Javascript函数来解决这个问题 基于这种使用库的工作方式,我对库进行了调整,使其成为ASP的有效包含 var ip = '2a00:85c0:0001:0000:0000:0000:0241:0023'; // simulate your address.binaryZeroPad(); method var parts = []; ip.split(":&

出于地理定位的目的,我试图获取ip v6地址数值的字符串表示形式。 因为经典ASP不处理bigint值,所以我尝试使用Javascript函数来解决这个问题

基于这种使用库的工作方式,我对库进行了调整,使其成为ASP的有效包含

var ip = '2a00:85c0:0001:0000:0000:0000:0241:0023';


// simulate your address.binaryZeroPad(); method
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("");

// Use BigInteger library
var dec = bigInt(bin, 2).toString();
console.log(dec);
var ip='2a00:85c0:0001:0000:0000:0000:0241:0023';
//模拟您的地址。binaryZeroPad();方法
var部分=[];
ip.split(“:”).forEach(函数(it){
var bin=parseInt(it,16).toString(2);
而(料仓长度<16){
bin=“0”+bin;
}
零件。推(箱);
})
var bin=parts.join(“”);
//使用BigInteger库
var dec=bigInt(bin,2).toString();
控制台日志(dec);
Fiddle中的代码将ipv6转换为二进制表示形式,然后调用toString函数,请求在base 2中进行转换

它在小提琴中起作用。然而,我不能让它在我的代码中工作,因为返回值是用科学符号表示的,这对我不好

目标是输入字符串“2a00:85c0:1::241:23”(或其非缩写版本“2a00:85c0:0001:0000:0000:0000:0241:0023”无关紧要),并输出数字等价物的字符串表示形式,或“55830288595525216399698714105846497315”


由于我只能在经典ASP中使用什么,有人知道我如何才能使转换工作吗?

不幸的是,您不能这样做,因为VBScript和JScript无法处理所需的数字精度

这是我第一次尝试VBScript


IPv6到IP号码
这里的问题是计算是正确的,但数字无法处理精度,因此当它达到最大值时,默认为
0

我的下一次尝试是JScript(不是我最强的语言)


IPv6到IP号码
这一次它失败了,基本上这意味着这个数字太大,无法表示

因此,尽管不能直接在VBScript或JScript中实现,但仍然可以用另一种语言(C#、VB.Net等)构建一个COM公开类,该类执行计算并生成VBScript/JScript可以显示的字符串


有用的链接

我删除了以前的答案,因为它没有多大帮助。已确定不能使用经典ASP使用VBscript将IPv6地址转换为数值。JScript是可能的,但似乎不太可能

我还在一个高流量的经典ASP网站上转换并记录IPv4/6数值,以用于地理定位

对于IPv4,使用VBscript进行转换非常简单:

函数IPv4ToNumber(ByVal IPv4)
Dim i、Pos、PrevPos、Num
对于i=1到4
Pos=InStr(PrevPos+1,IPv4,“.”,1)
如果i=4,则pos=Len(IPv4)+1
Num=Int(Mid(IPv4、PrevPos+1、Pos-PrevPos-1))
PrevPos=Pos
IPv4ToNumber=((nummod256)*(256^(4-i))+IPv4ToNumber
下一个
端函数
下面是另一个有用的VBscript函数,它返回IP类型(IPv4、IPv6或无效IP的空字符串)。您可以使用
InStr()

=
IPv4

=
IPv6

但此函数使用正则表达式正确验证IP地址:

功能IP_类型(ByVal IP)
IP_Type=“”默认值
'检查有效的IPv4和IPv6地址
Dim IP_RegExp

如果Len(IP)>=7和Len(IP),那么您的经典ASP代码是什么样子的?您是否在经典ASP中使用JScript?您不能仅仅将JavaScript库转换为JScript包含文件并期望它工作,这取决于JavaScript库的现代化程度,它将决定转换的可能性。我自己刚试过,第24行出现了include错误:
biginger.prototype=Object.create(Integer.prototype)的code>对象不支持此属性或方法
。我的ASP代码基本上只是对javascript的调用,您可以在我的示例中看到javascript已转换为.js include文件中的函数。我知道经典ASP中的jscript支持远没有“真实”javascript的支持那么广泛,这就是我问题的核心:有人知道我如何使用现有的武器实现这一点吗?也许你可以使用两个领域。请记住,您的IPv6寻址实际上将使用
/64
网络,因此您可以使用64位网络字段和64位IID字段。假设您有无符号64位整数可用。谢谢,Ron Maupin。如果我想保留ipv6地址的日志,这将起作用,但不幸的是,在这种情况下,我确实需要十进制表示法来匹配ip2location提供的范围。OP询问的是经典ASP而不是IPv4中的ipv6转换。然而,其他一些想法也有其优点。不确定所陈述的建议中有多少只是重申了已经说过的话。这在经典的asp、vbscript或jscript中是不可能的。我提供了一个数据库替代方案,我认为这是有效的。这一部分是的,当然可以,但其余部分基本上是对我现有答案的评论。