欲买桂花同载酒,荒泷天下第一斗。|

janbar

园龄:4年6个月 粉丝:29 关注:10

2022-11-05 18:28 阅读 322 评论 0 推荐

ipv4和ipv6与int互转通用处理方式

记录一下ipv4和ipv6与int互转通用处理方式,由于ipv6转的int比较大,因此需要使用big.Int来保存
另外记录一下将ip返回转换为CIDR表达方式 点击运行

copy
package main import ( "fmt" "math/big" "net/netip" ) func IpRangeToCIDRRange(ipFrom, ipTo string) ([]string, error) { url := "https://www.ipaddressguide.com/cidr" if strings.IndexByte(ipFrom, '.') < 0 { url = "https://www.ipaddressguide.com/ipv6-cidr" } resp, err := http.Post(url, "application/x-www-form-urlencoded", strings.NewReader("mode=range&ipFrom="+ipFrom+"&ipTo="+ipTo)) if err != nil { return nil, err } data, err := io.ReadAll(resp.Body) _ = resp.Body.Close() if err != nil { return nil, err } if e := bytes.Index(data, []byte("</code></pre></div>")); e > 0 { if s := bytes.LastIndexByte(data[:e], '>'); s > 0 { return strings.Split(string(data[s+1:e]), "\n"), nil } } return nil, errors.New("not find") } func InetNtoA(ip *big.Int, ipv4 int64) string { if ip == nil { return netip.AddrFrom4([4]byte{byte(ipv4 >> 24), byte(ipv4 >> 16), byte(ipv4 >> 8), byte(ipv4)}).String() } var ( buf [16]byte ipv6 = ip.Bytes() index = len(buf) - len(ipv6) ) if index < 0 || index >= 16 { return "" } copy(buf[index:], ipv6) return netip.AddrFrom16(buf).String() } func InetAtoN(ip string) (*big.Int, int64, error) { addr, err := netip.ParseAddr(ip) if err != nil { return nil, 0, err } if addr.Is4() { ipv4 := addr.As4() return nil, int64(ipv4[0])<<24 | int64(ipv4[1])<<16 | int64(ipv4[2])<<8 | int64(ipv4[3]), nil } ipv6 := addr.As16() return new(big.Int).SetBytes(ipv6[:]), 0, nil } func main() { ipv6 := "f000:0000:0000:0000:0000:ffff:192.168.100.228" ipInt, ipv4, err := InetAtoN(ipv6) if err != nil { panic(err) } fmt.Println(ipInt, ipv4, InetNtoA(ipInt, ipv4)) ip := "192.168.78.123" ipInt, ipv4, err = InetAtoN(ip) if err != nil { panic(err) } fmt.Println(ipInt, ipv4, InetNtoA(ipInt, ipv4)) }
posted @   janbar  阅读(322)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~

FAVOURITE

点击右上角即可分享
微信分享提示
*✧⁺˚⁺ପ(๑・ω・)੭ु⁾⁾ 好好学习天天向上
进入亮色模式
进入亮色模式

FAVOURITE