【python】 IPv6 十六进制转十进制

2023-05-16

# coding:utf-8


class Ipv6:
    def __init__(self):
        pass

    def get_end_ipv6_with_mask(self, ipv6, mask):
        start_ipv6 = self.ipv6_2_dec(ipv6)
        return start_ipv6 + 2 ** (128 - int(mask)) - 1

    def ipv6_2_dec(self, ipv6):
        has_compress = ipv6.find('::') > -1
        has_ipv4 = ipv6.find('.') > -1
        if not has_compress and not has_ipv4:
            return self._ipv6_2_dec_without_compress(ipv6)
        elif has_compress and not has_ipv4:
            return self._ipv6_2_dec_with_compress(ipv6)
        elif not has_compress and has_ipv4:
            ipv4, ipv6 = self._split_ipv4_ipv6(ipv6)
            return self._ipv4_2_dec(ipv4) + self._ipv6_2_dec_without_compress(ipv6)
        ipv4, ipv6 = self._split_ipv4_ipv6(ipv6)
        return self._ipv4_2_dec(ipv4) + self._ipv6_2_dec_with_compress(ipv6)

    @staticmethod
    def _ipv4_2_dec(ip):
        dec_value = 0
        v_list = ip.split('.')
        v_list.reverse()
        t = 1
        for v in v_list:
            dec_value += int(v) * t
            t = t * 256
        return dec_value

    # Ipv6每段不补齐0 形成完整的4位,如2001:DB8:0:23:8:800:200C:417A,补齐为2001:0DB8:0000:0023:0008:0800:200C:417A
    @staticmethod
    def _fill_ipv6_seg_with_zero(ipv6_seg):
        ip_str = ''
        for seg in ipv6_seg:
            if len(seg) == 0:
                seg = "0000"
            elif len(seg) == 1:
                seg = '000' + seg
            elif len(seg) == 2:
                seg = '00' + seg
            elif len(seg) == 3:
                seg = '0' + seg
            ip_str += seg
        return ip_str

    # 没有0压缩的Ipv6转换为十进制,如2001:DB8:0:23:8:800:200C:417A
    def _ipv6_2_dec_without_compress(self, ipv6):
        ip_list = ipv6.split(":")
        ip_str = self._fill_ipv6_seg_with_zero(ip_list)
        return int(ip_str, 16)

    # 带0压缩的ipv6转换为十进制,如FF01::1101
    def _ipv6_2_dec_with_compress(self, ipv6):
        compress_list = ipv6.split("::")
        ip_str = ""
        part1 = []
        part2 = []
        if len(compress_list) == 2:
            part1 = compress_list[0].split(":") if compress_list[0] else []
            part2 = compress_list[1].split(":") if compress_list[1] else []
        if part1 or part2:
            ip_str += self._fill_ipv6_seg_with_zero(part1)
            for i in range(8 - len(part1) - len(part2)):
                ip_str += '0000'
            ip_str += self._fill_ipv6_seg_with_zero(part2)
            return int(ip_str, 16)
        else:
            return ""

    # 将内嵌ipv4的ipv6中的ipv6和ipv4分隔开,如FFFF::192.168.0.1  分隔为ipv4 192.168.0.1  ipv6 FFFF::0000:0000
    @staticmethod
    def _split_ipv4_ipv6(ipv6):
        ip_list = ipv6.split(":")
        ipv4str = ip_list[-1]
        ip_list.pop()
        ipv6str = ":".join(ip_list) + ":0000:0000"
        return ipv4str, ipv6str


def test():
    print(Ipv6().ipv6_2_dec("5555:5e:0:0:0:0:0:5668:eeee"))
    print(Ipv6().ipv6_2_dec("5555:5e:0:0:0:0:0:5668"))
    print(Ipv6().ipv6_2_dec("5555:5e::5668"))
    print(Ipv6().ipv6_2_dec("5555:5e::"))
    print(Ipv6().ipv6_2_dec("::5555:5e"))
    print(Ipv6().ipv6_2_dec("2001:DB8:0:23:8:800:192.168.0.1"))
    print(Ipv6().ipv6_2_dec("FFFF::192.168.0.1"))
    print(Ipv6().ipv6_2_dec("::192.168.0.1"))
    print(Ipv6().ipv6_2_dec("::FFFF:192.168.0.1"))
    print(Ipv6().get_end_ipv6_with_mask("::FFFF:192.168.0.1", "127"))


if __name__ == "__main__":
    test()

在某位大佬的源代码上的基础上修改而成

源代码:python IPv6 十进制和十六进制互转

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python】 IPv6 十六进制转十进制 的相关文章

  • 网络测试技术——802.1X TLS认证(上篇)

    一 TLS认证简介 1 TLS认证 xff08 1 xff09 认证过程 最安全认证技术 实施最复杂 xff08 2 xff09 TLS双向证书认证 服务器对客户端进行认证 客户端对服务器进行认证 2 TLS认证过程 3 交换机认证模式 x
  • SRv6测试技术简介

    什么是SRv6 xff1f SRv6技术就是采用现有的IPv6转发技术 xff0c 通过扩展IPv6报文的头域 xff0c 实现类似标签转发的处理 SRv6将一些IPv6地址定义成实例化的SID xff08 Segment ID xff09
  • RENIX 软件RAW流发送——网络测试仪实操

    本文主要介绍了RENIX软件如何进行RAW流发送操作 文章通过预约端口 添加RAW流 修改负载 发送流量 查看流统计 数据包捕获六个步骤详细介绍了操作过程 步骤一 xff1a 预约端口 1 先安装RENIX软件 xff0c 正确安装情况下桌
  • RENIX软件OSPF和BFD、ISIS和BFD联动测试——网络测试仪实操

    本文介绍了RENIX软件BFD测试相关操作 xff0c 全文分为五大部分 第一部分为BFD概述 xff1b 第二部分为搭建OSPF和BFD联动测试环境 xff1b 第三部分为OSPF和BFD联动测试配置 xff1b 第四部分为搭建ISIS和
  • 信而泰 X-Snapper测试系统,助力家庭路由器IPv6支持度测试

    随着互联网的蓬勃发展 xff0c 宝贵而有限的IPv4地址资源一直在被分配使用 2019年11月25日 xff0c 负责英国 欧洲 中东和部分中亚地区互联网资源分配的欧洲网络协调中心 xff08 RIPE NCC xff09 宣布 xff0
  • 如何使用测试仪进行400G交换机性能测试

    一 400G以太网概述 400G以太网或400 Gigabit Ethernet 400GbE 由 IEEE P802 3bs Task Force 于 2017 年开发 xff0c 它使用与100 Gigabit Ethernet 大致相
  • 【python3】简易双因子Radius认证服务器,带UI界面

    需要将dictionary rfc2865放在运行的同级目录下 coding utf 8 from tkinter import from tkinter ttk import from tkinter import scrolledtex
  • 信而泰测试方案,助力客户打造网络安全防护“金钟罩”

    一 网络安全行业面临的挑战 据 Cybercrime Magazine 在最近一份报告中称 xff0c 仅2021年 xff0c 黑客攻击和各种网络犯罪就给全球经济造成了超过6万亿美元的损失 xff0c 预计到2025年 xff0c 此类犯
  • BGP BFD测试案例

    一 BFD原理 1 1 BFD技术简介 一种全网统一 检测迅速 监控网络中链路或者IP路由的双向转发连通状况 xff0c 并未上层应用提供服务的技术 1 2 BFD会话建立方式和监测机制 BFD的标识符 xff1a xff08 1 xff0
  • 数据中心典型测试场景浅析

    数据中心概述 数据中心泛指拥有众多服务器的大型机房 xff0c 通过利用通信运营商已有的互联网通信线路 带宽资源 xff0c 建立标准化的数据中心机房环境 xff0c 具有运行速度快 存储量大 安全性高等特点 数据中心东西向流量的占比更大
  • Vxlan协议原理及基本配置——网络测试仪实操手册

    一 Vxlan协议原理 1 Vxlan协议相关术语 一 缩略语 OSI中的概念 NVE Network Virtualization Edge 网络虚拟边缘节点 VTEP VXLAN Tunnel Endpoints xff0c VXLAN
  • 如何模拟VTEP下大量VM主机ARP消息——网络测试仪实操

    模拟VTEP下大量VM主机ARP消息 xff0c 按照下面的步骤 xff1a 1 打开 Renix 软件 xff0c 连接机框并预约测试端口 xff1b 2 创建一条RAW流量 xff08 Binding流量也可以 xff0c 这里用RAW
  • 信而泰自动化OSPFv2测试小技巧

    OSPFv2协议简介 OSPFv2 xff08 开放式最短路径优先版本2 xff09 是互联网协议 xff08 IP xff09 网络的路由协议 它使用链路状态路由 xff08 LSR xff09 算法 xff0c 并且属于在单个自治系统
  • OpenFlow协议原理及基本配置-网络测试仪实操

    一 OpenFlow协议原理 1 OpenFlow技术背景 转发和控制分离是SDN网络的本质特点之一 在SDN网络架构中 xff0c 控制平面与转发平面分离 xff0c 网络的管理和状态在逻辑上集中到一起 xff0c 底层的网络基础从应用中
  • 如何使用向导创建Openflow 流表-网络测试仪实操

    使用向导创建Openflow中的FlowTable xff0c 按照下面的步骤 xff1a 1 打开Renix软件 xff0c 连接机框并预约测试端口 xff1b 2 配置一个IPv4接口 3 配置一个OpenFlowController绑
  • 信而泰OLT使用介绍-网络测试仪实操

    一 OLT产品介绍 1 概述 PON作为FTTX网络发展的核心技术 xff0c 局端设备OLT尤其重要 本文档中主要介绍OLT的功能特性 业务配置 2 基本功能特性 2 1大容量和高集成度 ZXA10 C300集光接入 数据交换 路由处理于
  • 信而泰耦合测试-网络测试仪实操

    一 耦合测试原理 1 产生背景 常用测试无线设备过程中 xff0c 将无线设备置于屏蔽箱中 xff0c 通过无线网卡连接并运行iperf等类似软件的方式检测所述无线设备的吞吐量 相关技术中将所述无线设备置于所述屏蔽箱中的检测方法 xff0c
  • 【python】程序绑定PC和时间戳做定期授权码

    取磁盘编码或者网卡编码 43 时间戳16位格式 关于时间戳 xff0c 当前简单的实现是年月日转成对应的16位 xff0c 比如 23 03 28 gt 173E xff08 日先直接整除2 xff0c 每月不会超过31天 xff0c 整除
  • 信而泰ALPS 用户管理——网络测试仪实操

    本文介绍了如何在ALPS平台上Step By Step进行用户管理 用户管理介绍 设备在出厂时 xff0c 提供了一个默认管理员账号 xff0c 该账号为admin admin 管理员账号除了可用于测试之外 xff0c 还具有用户管理权限
  • 信而泰RENIX 802.1ag功能介绍-网络测试仪实操

    一 EOAM概述 1 以太网 1 1以太网优点 简单易用 价格低廉 高拓展性 大势所趋 xff0c 一统天下 1 2以太网缺点 可管理性差 定位故障手段少 定位故障速度慢 维护成本高 2 以太网OAM EOAM 为运营商服务 提高以太网可靠

随机推荐