thinkeridea / go-extend

go语言扩展包,收集一些常用的操作函数,辅助更快的完成开发工作,并减少重复代码
https://pkg.go.dev/github.com/thinkeridea/go-extend
MIT License
1.34k stars 160 forks source link

IPString2Long和Long2IPString 能否支持IPV6? #1

Closed YouZhengChuan closed 5 years ago

thinkeridea commented 5 years ago

抱歉暂时只支持IPV4

thinkeridea commented 5 years ago

https://www.ipaddressguide.com/ipv6-to-decimal 这个网址可以转换

2001:4860:4860::8888 => 42541956123769884636017138956568135816

这个数值已经超过普通数字的大小了,ipv4是4字节, ipv6是16字节,我现在能想到的是用两个uint64来表示ipv6的数值, 但是这并不是很理想

thinkeridea commented 5 years ago
ip := net.ParseIP("2001:4860:4860::8888").To16()

bigNum := &big.Int{}
bigNum.SetBytes(ip)
fmt.Println(bigNum.String())

fmt.Println("42541956123769884636017138956568135816")

我写了一个小的demo, 保持和这个网站一致的结果,但是这个输出只是一个字符串,可能对排序的帮助并不大

YouZhengChuan commented 5 years ago

我自己实现了一个简单的memSearch方式。但是目前只能读取txt文本文件的ip库,格式: ipv6|ipv6 mask|||本地网络||