基于go语言编写的IPv4转换为IPv6的代码

47 篇文章 0 订阅
33 篇文章 2 订阅

目前各IP系统正在大量从IPv4转换到IPv6,如何快速有效地按特定规则将v4地址换算成v6地址是一个比较麻烦的事,本例使用go语言编写生成代码来实现转换。

一、规则约定

本环境中对于IPv6参照IPv4进行分配,对原24位掩码的v4地址,则对应到120位的v6地址,将v4地址逐段转换为16进制,拼接成主机地址,再和v6的前缀地址拼接,最后形成完整的v6地址。

示例如下:v6前缀为“fa80:250:5:1”,v4地址为:192.168.0.1

v4地址逐段转换为16进制:192-c0,168-a8,0-0,1-01

转换后的v6地址为:fa80:250:5:1::c0a8:001

二、代码编写

完整测试通过的代码如下:

package main

import (
    "fmt"
    "regexp"
    "strings"
    "strconv"
    "os"
)

//过滤出输入信息中的IP字段
func RegexpIp(str string) []string {
    regstr := `[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}`
    reg, _ := regexp.Compile(regstr)
    s := reg.FindAllString(str, -1)
    return s
}

//将10进制字符转换到16进制数值
func tenTohex(tenstr string) string {
    tenint, err := strconv.ParseInt(tenstr, 10, 64)
    if err != nil {
        fmt.Println(err)
    }
    hexstr := strconv.FormatInt(tenint, 16)
    return hexstr
}


func main() {
    var ipinput string

    if len(os.Args) == 2 {
        ipinput = os.Args[1]
    } else {
        fmt.Println("usage,just like: ipto6 192.168.0.1")
        fmt.Println("请输入IP地址:")
        fmt.Scanln(&ipinput)
    }
    ipget := RegexpIp(ipinput)
    if len(ipget) != 0 {
        //fmt.Println("输入IP的地址是:", ipget[0])
        tenlist := strings.Split(ipget[0], ".")
        ipi1 := tenlist[0]
        ipi2 := tenlist[1]
        ipi3 := tenlist[2]
        ipi4 := tenlist[3]
        fmt.Printf("fa80:250:5:1::%s%02s:%s%02s", tenTohex(ipi1),tenTohex(ipi2),tenTohex(ipi3),tenTohex(ipi4))
     }
}

三、运行测试:

本代码如果直接运行,则会交互式提示输入IP,如果参数中带了v4的ip,则直接生成v6地址:

实测符合预期,编译为exe文件后执行结果:

对于ip前后混杂了其它字符,也能自动清除,如上所示,希望对大家有用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代先生.重庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值