ipv6
pengpengzhou
主要学习语言Java,Nodejs,Go
展开
-
Go语言:判断IP是否合法是IPv4还是IPv6
net.IP的ParseIP函数判断IPv4/IPv6的依据就是是否出现".”或者":",因为返回的net.IP都是16字节,而且IPv4前面加了::ffff所以根据返回的IP是不太好判断输入的原始字符串是IPv4还是IPv6。所以得自己写,代码如下:package mainimport ( "fmt" "net")// 0: invalid ip// 4: IPv4// 6: IPv6func ParseIP(s string) (net.IP, int) { ip := ne原创 2020-05-13 16:28:30 · 6762 阅读 · 0 评论 -
Go语言:整形数字字符串转换为IPv6地址字符串
IPv6对应的整形数字为16个字节,只能用big.Int来存储。而类似于“53174336847441874194254142093255507967”这种长度的数字可以由字符串来表示,如下代码用于将数字字符串转换为对应的IPv6地址字符串。package mainimport ( "encoding/hex" "errors" "fmt" "math/big" "strings")//NumToIPv6 converts a big integer represented by原创 2020-05-13 13:39:24 · 2058 阅读 · 0 评论 -
Nodejs: 整形数字转IPv6
IPv6的整形值已经超出nodejs的整形存储范围,所以这里用第三方包“jsbn”来存储。其转换函数如下,这里没有考虑0的压缩。另外需要注意的是0-4294967295之间的整数既可以转换成IPv4也可以转换成IPv6,而且同一个整数可能在IPv4和IPv6里对应着不同的地域,因此不能给两者抽象出一个统一的转换函数。var jsbn = require('jsbn');var int2ipv6 = function(numasstr) { var bi = new jsbn.BigIn原创 2020-05-13 09:43:51 · 525 阅读 · 0 评论 -
Nodejs: net.isIP()使用示例及对常见IP字符串的验证
net.isIP(input)使用示例及对常见IP字符串的验证如下,net.isIPv4,net.isIPv6两个函数的用法和net.isIP一样,只是返回变成true/false。> var net = require('net')undefined> net.isIP("10.1.7.23")4> net.isIP("2001:024f:ffff:ffff:ffff:ffff:ffff:fff1")6> net.isIP("2001:024f:ffff:ffff原创 2020-05-11 11:26:30 · 824 阅读 · 0 评论 -
Go语言:IPv6解析转换成BigInt整形以及与IPv4的兼容
IPv6协议是RFC4291,128bit(16个字节),以冒号分隔,允许用双冒号"::"来压缩表示一串连续的0,但"::"只能使用一次。"0:0:0:0:0:ffff:0:0" --"0:0:0:0:0:ffff:255.255.255.255" 用于将IPv4映射到IPv6 "0:0:0:0:0:0:0.0.0.0"--"0:0:0:0:0:0:255.255.255.255" 能兼容IPv4的IPv6 (这个概念已废弃)解析与转换示例:package mainimport ( ".原创 2020-05-09 15:32:56 · 2866 阅读 · 0 评论 -
Nodejs IPv6解析转换成BigInteger整形数字
IpV6是128bit,必须用BigInt才能保存,而nodejs从v10.4.1才开始支持BigInt。一般的数字类型不能用的原因是会被表示为科学计数法,而且后面若干位会被置为0。转换函数:var Ipv6ToBigInt = function(ipv6) { var groups = ipv6.split(":"); var sum = BigInt(0); for (var i = 0; i < groups.length; i++) { sum原创 2020-05-08 17:40:21 · 1005 阅读 · 0 评论