U .Ѫ_Ÿã@sÌdZddlZddlZddlmZejdkrBsr#cCs$g|]}tdt|dA|f‘qSrrrr!r!r"r#FscCs g|]}|dt|df‘qSr©rrr!r!r"r#JscCs g|]}dt|d|f‘qSrr$rr!r!r"r#NscCst|dkrtdƒ‚d}|t@r6d dd„| d¡Dƒ¡}z |t@rLtt|ƒnt|ƒWntk rnd}YnX|S)aP :param addr: An IPv4 address in presentation (string) format. :param flags: decides which rules are applied to the interpretation of the addr value. Supported constants are INET_PTON and ZEROFILL. See the netaddr.core docs for details. :return: ``True`` if IPv4 address is valid, ``False`` otherwise. Úz Empty strings are not supported!TrcSsg|]}dt|ƒ‘qS©r©Úintrr!r!r"r#aszvalid_str..F) rrÚjoinÚsplitr Ú _inet_ptonrÚ _inet_atonÚ Exception)ÚaddrÚflagsZvalidityr!r!r"Ú valid_strQs    r0cCs„|t@r"d dd„| d¡Dƒ¡}z:|t@rDt dtt|ƒ¡dWSt dt|ƒ¡dWSWn"t k r~t d|fƒ‚YnXdS)aP :param addr: An IPv4 dotted decimal address in string form. :param flags: decides which rules are applied to the interpretation of the addr value. Supported constants are INET_PTON and ZEROFILL. See the netaddr.core docs for details. :return: The equivalent unsigned integer for a given IPv4 address. rcSsg|]}dt|ƒ‘qSr&r'rr!r!r"r#yszstr_to_int..ú>Irz&%r is not a valid IPv4 address string!N) rr)r*r Ú_structÚunpackr+rr,r-r)r.r/r!r!r"Ú str_to_intns r4cCsRd|krtkr@nn(d|d?|d?d@|d?d@|d@fStd|fƒ‚dS) zÝ :param int_val: An unsigned integer. :param dialect: (unused) Any value passed in is ignored. :return: The IPv4 presentation (string) format address equivalent to the unsigned integer provided. rz %d.%d.%d.%déééÿrz*%r is not a valid 32-bit unsigned integer!N©rÚ ValueError)Úint_valÚdialectr!r!r"Ú int_to_str„s   ür<cCs4dd„t|ƒDƒ}| ¡| dddg¡d |¡S)z“ :param int_val: An unsigned integer. :return: The reverse DNS lookup for an IPv4 address in network byte order integer form. cSsg|] }d|‘qSr&r!rr!r!r"r#žszint_to_arpa..zin-addrZarpar%r)Ú int_to_wordsÚreverseÚextendr))r:Úwordsr!r!r"Ú int_to_arpa—srAcCs t d|¡S)z• :param int_val: the integer to be packed. :return: a packed string that is equivalent to value represented by an unsigned integer. r1)r2Úpack©r:r!r!r"Ú int_to_packed¤srDcCst d|¡dS)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. r1r)r2r3)Z packed_intr!r!r"Ú packed_to_int®srEcCs t|ttƒS©N)Ú _valid_wordsÚ word_sizeÚ num_words©r@r!r!r"r ¹sr cCsHd|krtks$ntd|fƒ‚|d?|d?d@|d?d@|d@fS)z¥ :param int_val: An unsigned integer. :return: An integer word (octet) sequence that is equivalent to value represented by an unsigned integer. rz>%r is not a valid integer value supported bythis address type!r5r6r7rr8rCr!r!r"r=½sÿ  ýr=cCs0t|ƒstd|fƒ‚t dtjd|žŽ¡dS)z® :param words: A list or tuple containing integer octets. :return: An unsigned integer that is equivalent to value represented by word (octet) sequence. z1%r is not a valid octet list for an IPv4 address!r1Ú4Br)rK)r r9r2r3rBrJr!r!r"Ú words_to_intÍsrLcCs t|ttƒSrF)Ú _valid_bitsrÚword_sep©Úbitsr!r!r"r Ùsr cCs t|ttƒSrF)Ú _bits_to_intrrNrOr!r!r"r Ýsr cCs |dkrtƒd}t|tt|ƒS)NrN)ÚglobalsÚ _int_to_bitsrHrI)r:rNr!r!r"r ás r cCs t|tƒSrF)Ú _valid_binr©Úbin_valr!r!r"rçsrcCs t|tƒSrF)Ú _int_to_binrrCr!r!r"rësrcCs t|tƒSrF)Ú _bin_to_intrrUr!r!r"rïsrcCsÆg}td|ƒ}t|tƒr²d|kr&|‚z0d|krFdd„| d¡Dƒ}ndt|ƒg}Wntk rn|‚YnXdt|ƒkrˆdkr®nn"tdt|ƒƒD]}| d ¡qœn|‚|sº|‚d t |ƒS) zÅ Expands a partial IPv4 address into a full 4-octet version. :param addr: an partial or abbreviated IPv4 address :return: an expanded IP address in presentation format (x.x.x.x) z!invalid partial IPv4 address: %r!ú:rcSsg|]}dt|ƒ‘qSr&r')rÚor!r!r"r#sz*expand_partial_address..rrrÚ0z %s.%s.%s.%s) rÚ isinstancerr*r(r9ÚlenÚrangeÚappendÚtuple)r.ÚtokensÚerrorr r!r!r"Úexpand_partial_addressós$    rc)r)r)N)N)<Ú__doc__ÚsysÚ_sysÚstructr2Úsocketrr,ÚplatformZnetaddr.fbsocketrr+rÚ netaddr.corerrr Únetaddr.strategyr rGr rMr rQr rSrrTrrWrrXÚnetaddr.compatrrrHÚword_fmtrNÚfamilyÚ family_nameÚversionZ word_baserrIÚmax_wordÚdictr^Úprefix_to_netmaskÚnetmask_to_prefixZprefix_to_hostmaskÚhostmask_to_prefixr0r4r<rArDrEr=rLrcr!r!r!r"Ús`  $   ÿÿÿÿ