ipv4与ipv6地址如何转换的python解决办法,ipv6python,ipv4与ipv6地址如
ipv4与ipv6地址如何转换的python解决办法,ipv6python,ipv4与ipv6地址如
ipv4与ipv6地址如何转换的python解决办法。要想知道ipv4与ipv6地址转换的问题,首先要了解它的概念。
ipv4与ipv6地址是什么简单的来说一下:
IPv4:是互联网协议的第四版,同时也是第一个被广泛使用,构成现今互联网技术的基石的协议;
IPv6:是互联网工程任务组设计的用于替代现行版本IPv4的下一代IP协议;
目前IP协议的版本号是IPv4,它的下一个版本就是IPv6。
ipv4与ipv6地址如何转换的python解决办法,源码如下:(需要用到twisted.python.compat及struct和python socket方法)
import struct,socket#import twisted.python.compat #导入twisted.python.compat 更方便# ipv4数字地址 def ipv4_to_string(ipv4): ipv4_n = socket.htonl(ipv4) data = struct.pack('I', ipv4_n) ipv4_string = socket.inet_ntop(socket.AF_INET, data) return ipv4_stringdef ipv4_from_string(ipv4_string): data = socket.inet_pton(socket.AF_INET, ipv4_string) ipv4_n = struct.unpack('I', data) ipv4 = socket.ntohl(ipv4_n[0]) return ipv4def ipv4_readable2int(ipv4): return int(ipv4)def ipv4_int2readable(ipv4): return str(ipv4)# ipv6用四个整数(tuple或用,分开的字符串)表示def ipv6_to_string(ipv6): ipv6_n = (socket.htonl(ipv6[0]), socket.htonl(ipv6[1]), socket.htonl(ipv6[2]), socket.htonl(ipv6[3])) data = struct.pack('IIII', ipv6_n[0], ipv6_n[1], ipv6_n[2], ipv6_n[3]) ipv6_string = socket.inet_ntop(socket.AF_INET6, data) return ipv6_stringdef ipv6_from_string(ipv6_string): data = socket.inet_pton(socket.AF_INET6, ipv6_string) ipv6_n = struct.unpack('IIII', data) ipv6 = (socket.ntohl(ipv6_n[0]), socket.ntohl(ipv6_n[1]), socket.ntohl(ipv6_n[2]), socket.ntohl(ipv6_n[3])) return ipv6def ipv6_tuple2readable(ipv6): return str(ipv6[0]) + ',' + str(ipv6[1]) + ',' + str(ipv6[2]) + ',' + str(ipv6[3])def ipv6_readable2tuple(ipv6): return tuple(ipv6.split(','))#win32 下实现 inet_pton 和 inet_ntopdef inet_ntop(family, ipstr): if family== socket.AF_INET: return socket.inet_ntoa(ipstr) elif family== socket.AF_INET6: v6addr = ':'.join(('%02X%02X' % (ord(i), ord(j))) for i,j in zip(ipstr[::2], ipstr[1::2])) return v6addr#www.iplaypy.comdef inet_pton(family, addr): if family== socket.AF_INET: return socket.inet_aton(addr) elif family== socket.AF_INET6: if '.' in addr: # a v4 addr v4addr = addr[addr.rindex(':')+1:] v4addr = socket.inet_aton(v4addr) v4addr = map(lambda x: ('%02X' % ord(x)), v4addr) v4addr.insert(2, ':') newaddr = addr[:addr.rindex(':')+1] + ''.join(v4addr) return inet_pton(family, newaddr) dbyts = [0]* 8 # 8 groups grps = addr.split(':') for i,v in enumerate(grps): if v: dbyts[i] = int(v, 16) else: for j, w in enumerate(grps[::-1]): if w: dbyts[7-j] = int(w, 16) else: break break return ''.join( (chr(i//256) + chr(i%256)) for i in dbyts) else: raise RuntimeError("What family?")
编橙之家文章,
相关内容
- python将ios及android文件写成excel的小工具,iosandroid,用p
- Python内置方法实现访问权限控制,python权限控制,Pytho
- Python获取MP3文件id3信息的方法源码,pythonid3,Python获取
- Python socket方法获取接口IP地址,pythonsocket,Python socke
- Python代码片段之Django静态文件URL的配置,,首先要说明这
- 一个初学者对正则表达式学习的小问题,初学者正则表
- 读取目录文件并生成日志的python方法示例,python示例
- python统计文件中文字数量的方法,python统计,虽然pytho
- python获取android源代码,pythonandroid,要在windows环境下
- 如何使用tornado运行Django,tornado运行django,如何使用tor
评论关闭