我需要创建一个函数,可以将IPv6地址转换为其数字表示形式。
使用IPv4 非常简单,因为它使用 32 位无符号 int 作为其数字表示。 IPv6 由 128 位无符号整数表示。 该数字的大小对于内置的 ColdFusion 位逻辑函数来说太大
,无法使用。此函数必须使用底层 Java 系统进行转换。
需要一个函数来执行相反的操作:ColdFusion 128 位无符号 int 到 IPv6
这是我编写的函数,用于将 IPv6 地址转换为 128 位无符号整数。
<cffunction name="IPv6ToUInt128" returntype="numeric" output="no" access="public" hint="returns uint128 number for IPv6 address">
<cfargument name="vcIPv6" type="string" required="yes" hint="IPv6 address">
<cfif arguments.vcIPv6 EQ "">
<cfreturn 0>
</cfif>
<cfset local['javaMathBigInteger'] = CreateObject("java", "java.math.BigInteger")>
<cfset local['javaNetInetAddress'] = CreateObject("java", "java.net.InetAddress")>
<cftry>
<cfset local['uint128'] = local.javaMathBigInteger.init(1, local.javaNetInetAddress.getByName(arguments.vcIPv6).getAddress()).toString()>
<cfreturn local.uint128>
<cfcatch type="any">
<cfreturn 0>
</cfcatch>
</cftry>
</cffunction>
如果您有任何改进此代码的建议,请发表评论。