**以前のリビジョンの文書です**
目次
RFC5952
簡単にバイナリ to RFC5952表記な文字列に変換してみるコード。全部ちゃんと動くのか若干自信ない。
<code>
-*- coding: utf-8 -*-
-------------------------------------------------------------------------------
Name: module1
Purpose:
# Author: ruy
# Created: 21/01/2012
Copyright: (c) ruy 2012
Licence: BSD
-------------------------------------------------------------------------------
!/usr/bin/env python
import binascii
def ipv6rfc5952(addrhex):
s = '' octets = [] if len(addr_hex)==16: start, point, length = 0, -1, 0 for n in xrange(8): # RFC5952 section 1 octets.append( binascii.b2a_hex(addr_hex[n<<1:(n+1)<<1]).lstrip('0') ) if octets[n] is not '': temp = octets[start:].count('0') if temp > length: point = start+1 length = temp start = n else: octets[n] = '0'
# RFC5952 section 2 # RFC5952 section 4 if octets.count('0') == 8: s = '::' else: if point != -1: for n in xrange(length): octets.pop(point) octets.insert(point,'') s = ':'.join(octets)
# RFC5952 section 3 if s.count(':') == 7 and s.count('::') == 1: s = ':0:'.join(s.rsplit('::'))
# RFC5952 section 5 return s.lower()
def ipv6a2s(addrhex):
s = '' if len(addr_hex)==16: for n in xrange(8): s += binascii.b2a_hex(addr_hex[n*2:(n+1)*2]) + ':' return s.rstrip(':')
def main():
# 2001:db8::1 ipv6_addr =['\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', # :: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', # 1::1 '\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', # fe80:1:1:1:1:1:1:1 '\xfe\x80\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01', # fe80:1::1:0:0:0:1 '\xfe\x80\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01', # 2001::1:1 '\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01', # 2001::1:0:1 '\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01', # 2001::1:0:0:1 '\x20\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01', # 2001:0:0:1::1 '\x20\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01', # 2001:0:1::1 '\x20\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', # 2001:1::1 '\x20\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01', # 1000:100:10:1:1:10:100:1000 '\x10\x00\x01\x00\x00\x10\x00\x01\x00\x01\x00\x10\x01\x00\x10\x00', # 1000:100:10:1:0:10:100:1000 '\x10\x00\x01\x00\x00\x10\x00\x01\x00\x00\x00\x10\x01\x00\x10\x00'] for b in ipv6_addr: print ipv6_a2s(b) print ipv6_rfc5952(b)
if name == 'main':
main()
<code>