差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

次のリビジョン
前のリビジョン
programming:python:rfc5952 [2012/01/22 21:14]
yuki 作成
— (現在)
ライン 1: ライン 1:
-====== 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 ipv6_rfc5952(addr_hex):​ 
-    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 ipv6_a2s(addr_hex):​ 
-    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>​ 
  
programming/python/rfc5952.1327234446.txt.gz · 最終更新: 2012/01/22 21:14 by yuki
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0