差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン 両方とも次のリビジョン
programming:python:rfc5952 [2012/01/22 21:17]
yuki
programming:python:rfc5952 [2012/12/05 22:22]
yuki
ライン 1: ライン 1:
 ====== RFC5952 ====== ====== RFC5952 ======
-簡単にバイナリ ​to [[http://​tools.ietf.org/​rfc/​rfc5952.txt|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+ >>> ​import ​rfc5952 
 + >>>​ binary = '​\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'​ 
 + >>>​ rfc5952.inet6_ntoa(binary) 
 + '​2001:​db8::​1'​ 
 + >>>​ string = "​2001:​db8:​1f1f:​90::​82"​ 
 + >>>​ rfc5952.inet6_aton(string) 
 + '​ \x01\r\xb8\x1f\x1f\x00\x90\x00\x00\x00\x00\x00\x00\x00\x82'​
  
-def ipv6_rfc5952(addr_hex):​ +Bitbucketで公開してます。
-    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 +  ​https://bitbucket.org/ainoniwa/​rfc5952/​src/​dcb12192d35f730d843f2922e0d0b75f702d2092/​rfc5952.py
-        # 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>+
  
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0