ӊ^ jdZddlZdZ ddlZej sedejejddlmZ m Z m Z dZddlmZddlmZmZmZmZmZmZmZmZ m!Z"d Z#d Z$d Z%e Z&d Z'd Z(d Z)de#zdz Z*e#e$zZ+de$zdz Z,e-e.de#dzDcgc]}|e*de#|z zdz z fc}Z/e-e.de#dzDcgc]}e*de#|z zdz z |fc}Z0e-e.de#dzDcgc]}|de#|z zdz fc}Z1e-e.de#dzDcgc]}de#|z zdz |fc}Z2Gdde3Z4Gdde4Z5Gdde4Z6d%dZ7d%dZ8d&dZ9dZ:dZ;dZR$/ Z(( R$PQQRs5cP|t}d} t|}|jrtt|}|St t jd|}|Dcgc]}|j|z}}tj|} |Scc}w#t$rt|dwxYw)z :param int_val: An unsigned integer. :param dialect: (optional) a Python class defining formatting options. :return: The IPv6 presentation (string) format address equivalent to the unsigned integer provided. Nz>8Hz) is not a valid 128-bit unsigned integer!) r int_to_packedr _inet_ntoprlist_structunpackrword_sepjoinr/ ValueError)int_valdialectr*r0wordswordtokenss r" int_to_strr@s D U"7+ ??h 3D K z:;E:?@$g&&-@F@==(D K A U'STTUs"'B #B B.B B B%ct|t}t|jdd}|j |gdz}dj |S)z :param int_val: An unsigned integer. :return: The reverse DNS lookup for an IPv6 address in network byte order integer form. rr()ip6arpar(.)r@r&r5replacereverser9)r;r*r?s r" int_to_arparGsI g| ,D $,,sB' (F NN ) )F 88F r!cHt|dd}tjdg|S)z :param int_val: the integer to be packed. :return: a packed string that is equivalent to value represented by an unsigned integer.  >4I)rr6pack)r;r=s r"r3r3s& !R (E << & &&r!cttjd|}d}tt |D]\}}|}|d|zz}||z}|S)a :param packed_int: a packed string containing an unsigned integer. It is assumed that string is packed in network byte order. :return: An unsigned integer equivalent to value of network address represented by packed binary string. rKrrJ)r5r6r7 enumeratereversed)r0r=r;inumr>s r"r.r.s\ z2 3EGHUO,!3rAv~D.! Nr!c,t|ttSN) _valid_words word_size num_wordsr=s r"rrs y) 44r!cX| td}| td}t|||S)NrVrU)globals _int_to_words)r;rVrUs r"rrs5Ik* Ik* )Y 77r!c,t|ttSrS) _words_to_intrUrVrWs r"r r s  9 55r!c,t|ttSrS) _valid_bitswidthr8bitss r"r r s tUH --r!c,t|ttSrS) _bits_to_intr_r8r`s r"r r s eX ..r!cL| td}t|tt|S)Nr8)rY _int_to_bitsrUrV)r;r8s r"r r s%9Z( Ix @@r!c"t|tSrS) _valid_binr_bin_vals r"r r s gu %%r!c"t|tSrS) _int_to_binr_)r;s r"rr w &&r!c"t|tSrS) _bin_to_intr_rhs r"rrrlr!)rrS)NN)=rstructr6 OPT_IMPORTSsocket_sockethas_ipv6r/rrr)rr4netaddr.fbsocket netaddr.corernetaddr.strategyrrTrrZr r\r r^r rcr rer rgrrkrrnr_rUr8family family_nameversion word_basemax_intrVmax_worddictrangeprefix_to_netmasknetmask_to_prefixprefix_to_hostmaskhostmask_to_prefixobjectrr$r&r,r1r@rGr3r.)rPs0r"rsT   +   ((  ##K )          u*q. Y   >A 49!U1W4EFqaA%!)$q( )*FH49!U1W4EFqguqy!A%&*FH*/57*;*/57*;6  <& R < '&586./A &''U++++XGG==s)