差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン 両方とも次のリビジョン
programming:python:rfc5952 [2012/01/22 21:17]
yuki
programming:python:rfc5952 [2012/12/05 22:16]
yuki
ライン 2: ライン 2:
 簡単にバイナリ to [[http://​tools.ietf.org/​rfc/​rfc5952.txt|RFC5952]]表記な文字列に変換してみるコード。全部ちゃんと動くのか若干自信ない。 簡単にバイナリ to [[http://​tools.ietf.org/​rfc/​rfc5952.txt|RFC5952]]表記な文字列に変換してみるコード。全部ちゃんと動くのか若干自信ない。
  
-<​code>​ +こっちを見てください。 
-# -*- codingutf-8 -*- +[[https://bitbucket.org/ainoniwa/rfc5952/src/​dcb12192d35f730d843f2922e0d0b75f702d2092/​rfc5952.py]]
-#​------------------------------------------------------------------------------- +
-# 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[nis 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>​ +
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0