o i¾nhŸã@sÌdZddlZddlZddlmZejdvrddl m Z m Z nddlm Z m Z ddl mZmZmZddlmZmZmZmZmZmZmZddl m!Z!d Z"d Z#d Z$d Z%e Z&d Z'dZ(dZ)de"dZ*e"e#Z+de#dZ,e-dd„e.de"dƒDƒƒZ/e-dd„e.de"dƒDƒƒZ0e-dd„e.de"dƒDƒƒZ1e-dd„e.de"dƒDƒƒZ2d7dd„Z3d7dd„Z4d8dd„Z5dd„Z6dd „Z7d!d"„Z8d#d$„Zd%d&„Z9d'd(„Z:d)d*„Zd+d,„Zd8d-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Z;dS)9zIPv4 address logic.éN)Ú inet_aton)Úwin32Úcygwin)Ú inet_ptonÚAF_INET)ÚAddrFormatErrorÚZEROFILLÚ INET_PTON)Ú valid_wordsÚ valid_bitsÚ bits_to_intÚ int_to_bitsÚ valid_binÚ int_to_binÚ bin_to_int)Ú _str_typeé éú%dÚ.ÚIPv4éé éécCs$g|]}|tdt|dAf‘qS©rr©Úmax_intÚwidth©Ú.0Úi©r"ú@/usr/local/lib/python3.10/dist-packages/netaddr/strategy/ipv4.pyÚ Bó$r$cCs$g|]}tdt|dA|f‘qSrrrr"r"r#r$Fr%cCs g|] }|dt|df‘qSr©rrr"r"r#r$Jó cCs g|] }dt|d|f‘qSrr&rr"r"r#r$Nr'cCsv|dkrtdƒ‚d}|t@rd dd„| d¡Dƒ¡}z|t@r(tt|ƒW|St|ƒW|Sty:d}Y|Sw)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!TrcSóg|]}dt|ƒ‘qS©r©Úintrr"r"r#r$aózvalid_str..F) rrÚjoinÚsplitr Ú _inet_ptonrÚ _inet_atonÚ Exception)ÚaddrÚflagsÚvalidityr"r"r#Ú valid_strQs   ü ýýr6cCsv|t@rd dd„| d¡Dƒ¡}z|t@r"t dtt|ƒ¡dWSt dt|ƒ¡dWSt y:t d|fƒ‚w)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. rcSr)r*r+rr"r"r#r$yr-zstr_to_int..ú>Irz&%r is not a valid IPv4 address string!) rr.r/r Ú_structÚunpackr0rr1r2r)r3r4r"r"r#Ú str_to_intns  ÿr:cCsNd|kr tkr nnd|d?|d?d@|d?d@|d@fStd|fƒ‚)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!©rÚ ValueError)Úint_valÚdialectr"r"r#Ú int_to_str„s   ürBcCs2dd„t|ƒDƒ}| ¡| gd¢¡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-addrÚarpar(r)Ú int_to_wordsÚreverseÚextendr.)r@Úwordsr"r"r#Ú int_to_arpa—s rHcCs 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. r7)r8Úpack©r@r"r"r#Ú int_to_packed¤s rKcCst 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. r7r)r8r9)Ú packed_intr"r"r#Ú packed_to_int®srMcCó t|ttƒS©N)Ú _valid_wordsÚ word_sizeÚ num_words©rGr"r"r#r ¹ó r cCsHd|kr tksntd|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!r;r<r=rr>rJr"r"r#rD½sÿ  ýrDcCs4t|ƒs td|fƒ‚t dtjdg|¢RŽ¡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!r7Ú4Br)r r?r8r9rIrSr"r"r#Ú words_to_intÍsrVcCrNrO)Ú _valid_bitsrÚword_sep©Úbitsr"r"r#r ÙrTr cCrNrO)Ú _bits_to_intrrXrYr"r"r#r ÝrTr cCs |dur tƒd}t|tt|ƒS)NrX)ÚglobalsÚ _int_to_bitsrQrR)r@rXr"r"r#r ás r cCó t|tƒSrO)Ú _valid_binr©Úbin_valr"r"r#rçó rcCr^rO)Ú _int_to_binrrJr"r"r#rërbrcCr^rO)Ú _bin_to_intrr`r"r"r#rïrbrcCsÂg}td|ƒ}t|tƒrWd|vr|‚zd|vr#dd„| d¡Dƒ}ndt|ƒg}Wn ty4|‚wdt|ƒkrAdkrUn|‚tdt|ƒƒD]}| d ¡qLn|‚|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!ú:rcSr)r*r+)r Úor"r"r#r$r-z*expand_partial_address..rrrÚ0z %s.%s.%s.%s) rÚ isinstancerr/r,r?ÚlenÚrangeÚappendÚtuple)r3ÚtokensÚerrorr!r"r"r#Úexpand_partial_addressós,  € ÿý ÿ ro)rrO)<Ú__doc__ÚsysÚ_sysÚstructr8Úsocketrr1ÚplatformÚnetaddr.fbsocketrr0rÚ netaddr.corerrr Únetaddr.strategyr rPr rWr r[r r]rr_rrcrrdÚnetaddr.compatrrrQÚword_fmtrXÚfamilyÚ family_nameÚversionÚ word_baserrRÚmax_wordÚdictrjÚprefix_to_netmaskÚnetmask_to_prefixÚprefix_to_hostmaskÚhostmask_to_prefixr6r:rBrHrKrMrDrVror"r"r"r#Úsb  $   ÿÿÿÿ