IPv6 转 十进制:

 #!/usr/bin/python
# -*- coding: UTF-8 -*- import re def ipv62dec(ipv6):
if checkipv6(ipv6):
compressIndex = ipv6.find('::')
print("compressIndex:"+str(compressIndex)) ipv4Index = ipv6.find('.')
print("ipv4Index:"+str(ipv4Index)) if compressIndex==-1 and ipv4Index==-1:
print 'num: %d' % (noCompressipv62dec(ipv6))
elif compressIndex!=-1 and ipv4Index==-1:
print 'num: %d' % (compressipv62dec(ipv6))
elif compressIndex==-1 and ipv4Index!=-1:
ipv4,ipv6=ipv4v6Split(ipv6)
if ipv4 and ipv6:
print 'num: %d' % (ipv42dec(ipv4)+noCompressipv62dec(ipv6))
else:
return ""
elif compressIndex != -1 and ipv4Index != -1:
ipv4, ipv6 = ipv4v6Split(ipv6)
if ipv4 and ipv6:
print 'num: %d' % (ipv42dec(ipv4)+compressipv62dec(ipv6))
else:
return ""
else:
return ""
else:
return "" def ipv42dec(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 * (2 ** 8)
return dec_value #Ipv6每段不补齐0 形成完整的4位,如2001:DB8:0:23:8:800:200C:417A,补齐为2001:0DB8:0000:0023:0008:0800:200C:417A
def ipseg2str(ipseglist):
ipstr=''
for ipseg in ipseglist:
if len(ipseg) == 1:
ipseg = '' + ipseg
elif len(ipseg) == 2:
ipseg = '' + ipseg
elif len(ipseg) == 3:
ipseg = '' + ipseg
elif len(ipseg) == 4:
ipseg = ipseg
else:
return ""
ipstr += ipseg
return ipstr ##没有0压缩的Ipv6转换为十进制,如2001:DB8:0:23:8:800:200C:417A
def noCompressipv62dec(ipv6):
iplist = ipv6.split(":")
if iplist:
ipstr = ipseg2str(iplist)
print(ipstr)
return int(ipstr, 16)
else:
return "" #带0压缩的ipv6转换为十进制,如FF01::1101
def compressipv62dec(ipv6):
compressList = ipv6.split("::")
print("compressList:" + str(compressList))
ipstr = ""
part1 = []
part2 = []
if len(compressList) == 2:
part1 = compressList[0].split(":") if compressList[0] else []
part2 = compressList[1].split(":") if compressList[1] else []
if part1 or part2:
ipstr += ipseg2str(part1)
for i in range(8 - len(part1) - len(part2)):
ipstr += ''
ipstr += ipseg2str(part2)
print("ipstr:" + ipstr)
return int(ipstr, 16)
else:
return "" #将内嵌ipv4的ipv6中的ipv6和ipv4分隔开,如FFFF::192.168.0.1 分隔为ipv4 192.168.0.1 ipv6 FFFF::0000:0000
def ipv4v6Split(ipv6):
ipv4str = ''
ipv6str = ''
if checkipv6(ipv6):
list = ipv6.split(":")
if list:
ipv4str = list[len(list) - 1]
list.pop()
ipv6str = ":".join(list) + ":0000:0000"
print("ipv4:" + ipv4str)
print("ipv6:" + ipv6str)
return ipv4str,ipv6str #校验ipv6的格式
def checkipv6(ipv6):
matchobj = re.match(r'^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$',ipv6)
if matchobj:
return True
else:
return False ipv62dec('55555:5e:0:0:0:0:0:5668:eeee')
ipv62dec('5555:5e:0:0:0:0:0:5668')
ipv62dec('5555:5e::5668')
ipv62dec('5555:5e::')
ipv62dec('::5555:5e')
ipv62dec('2001:DB8:0:23:8:800:192.168.0.1')
ipv62dec('FFFF::192.168.0.1')
ipv62dec('::192.168.0.1')
ipv62dec('::FFFF:192.168.0.1')

十进制 转 IPv6:

 #!/usr/bin/python
# -*- coding: UTF-8 -*- import re #将ipv6中段中的0压缩,如005e 压缩为5e
def subZero(ipseg):
index=0
for i in range(len(ipseg)):
if ipseg[i]=='':
index+=1
else:
break
if index>=2:
return ipseg[index:] if ipseg[index:] else ''
else:
return ipseg #将十进制数转换为ipv6
def dec2ipv6(dec):
if checkdec(dec) and int(dec)<=340282366920938463463374607431768211455:
hexstr=(hex(int(dec)))[2:]
hexstrlen = len(hexstr)
while hexstrlen<32:
hexstr=''+hexstr
hexstrlen+=1
result=subZero(hexstr[0:4])+":"+subZero(hexstr[4:8])+":"+subZero(hexstr[8:12])+":"+subZero(hexstr[12:16])+":"+subZero(hexstr[16:20])+":"+subZero(hexstr[20:24])+":"+subZero(hexstr[24:28])+":"+subZero(hexstr[28:])
print("result:"+result)
return result
else:
return "" #校验十进制数字
def checkdec(dec):
matchobj = re.match(r'(0[dD])?[0-9]+$',dec)
if matchobj:
return True
else:
return False dec2ipv6('')
dec2ipv6('')
dec2ipv6('')
dec2ipv6('')
dec2ipv6('')

python IPv6 十进制和十六进制互转的更多相关文章

  1. C# 十进制与十六进制互转

    1.从十六进制转换为十进制 /// <summary> /// 十六进制转换到十进制 /// </summary> /// <param name="hex&q ...

  2. 【转】C# 二进制,十进制,十六进制 互转

    //十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Console.WriteLine(Convert.ToString(6 ...

  3. Delphi十进制和十六进制互转

    Delphi 自带函数 IntToHex 功能说明:该函数用于将“十进制”转换成“十六进制”.该函数有二个参数.第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据. 参考实例 ...

  4. Python进制转换(二进制、十进制和十六进制)

    #!/usr/bin/env python # -*- coding: utf-8 -*- # 2/10/16 base trans. wrote by srcdog on 20th, April, ...

  5. 二进制、十进制、十六进制(python)

    int(“x”,base=2/8/16)是把x都转换成十进制 二进制: 1111=1*2的3次方+1*2的2次方+1*2的1次方+1*2的0次方  =8+4+2+1=15 1000=1*2的3次方+0 ...

  6. python进制转换(二进制、十进制和十六进制)及注意事项

    使用内置函数实现进制转换实现比较简单,主要用到以下函数: bin().oct().int().hex() 下面分别详解一下各个函数的使用(附实例) 第一部分:其他进制转十进制 1.二进制转十进制 使用 ...

  7. Python 二进制,十进制,十六进制转换

    十六进制 到 十进制 使用 int() 函数 ,第一个参数是字符串 '0Xff' ,第二个参数是说明,这个字符串是几进制的数.  转化的结果是一个十进制数. >>> int('0xf ...

  8. Bugku-CTF加密篇之进制转换(二进制、八进制、十进制、十六进制,你能分的清吗?)

    进制转换 二进制.八进制.十进制.十六进制,你能分的清吗?

  9. ORACLE十进制与十六进制的转换

    十进制与十六进制的转换 十进制-->十六进制 select to_char(100,'XX') from dual; 十六进制-->十进制select to_number('7D','XX ...

随机推荐

  1. PAT 1058 选择题(20)(代码+思路)

    1058 选择题(20 分) 批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 100 ...

  2. 品味性能之道<一>:性能测试思维与误区

           <java performance><品悟性能优化 oracle><面向模式的软件架构-模式系统>读书笔记应用调优分享.      性能问题的解决,首 ...

  3. dump()

    输出格式化的对象

  4. 05 Maven 生命周期和插件

    Maven 生命周期和插件 除了坐标.依赖以及仓库之外, Maven 另外两个核心概念是生命周期和插件.在有关 Maven 的日常使用中,命令行的输入往往就对应了生命周期,如 mvn package ...

  5. Java中创建数组的几种方法

    Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...

  6. 2018.09.09 poj2949Word Rings(01分数规划+spfa判环)

    传送门 这题要先巧妙的转化一下. 对于每个字符串,我们把头尾的两个小字符串对应的点连边,边权是这个字符串的长度. 这样最多会出现26*26个点. 这个时候就只用求出边权和跟边数的最大比值了. 这个显然 ...

  7. 2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)

    传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在 ...

  8. 2018.08.20 loj#115. 无源汇有上下界可行流(模板)

    传送门 又get到一个新技能,好兴奋的说啊. 一道无源汇有上下界可行流的模板题. 其实这东西也不难,就是将下界变形而已. 准确来说,就是对于每个点,我们算出会从它那里强制流入与流出的流量,然后与超级源 ...

  9. ThinkPHP5 union分页

    直接贴代码,记录一下,备用 $a = Db::name(表名)->field(字段)->where(条件)->buildSql(); $b = Db::name(表名)->fi ...

  10. [K8S]污点调度

    如果不希望某个节点被调度可以使用以下命令进行设置  kubectl taint node master01 node-role.kubernetes.io/master="":No ...