ӊ^ dZddlZddlZddlmZejdvr ddl 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"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}Z2d"dZ3d"dZ4d#dZ5dZ6dZ7dZ8dZdZ9dZ:dZdZd#dZdZdZd Zd!Z;ycc}wcc}wcc}wcc}w)$zIPv4 address logic.N) inet_aton)win32cygwin) inet_ptonAF_INET)AddrFormatErrorZEROFILL INET_PTON) valid_words valid_bits bits_to_int int_to_bits valid_bin int_to_bin bin_to_int) _str_type %d.IPv4 c .|dk(r tdd}|tzr:dj|jdDcgc]}dt |zc}} |t zrt t||St| |Scc}w#t$rd}Y|SwxYw)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!TrrF) rr joinsplitintr _inet_ptonr _inet_aton Exception)addrflagsvalidityis 7/usr/lib/python3/dist-packages/netaddr/strategy/ipv4.py valid_strr)Qs rz@AAH xxx 3@1A@A 9  w % O t  OA  OsBB2 B BBc n|tzr:dj|jdDcgc]}dt|zc}} |tzr't j dtt|dSt j dt|dScc}w#t$rt|dwxYw)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. rr>Irz$ is not a valid IPv4 address string!) r rrr r _structunpackr!rr"r#r)r$r%r's r( str_to_intr.ns xxx 3@1A@AR 9 >>$ 7D(AB1E E>>$ 4(89!< < A R$PQQRsB/B5!BB4cxd|cxkr tkrnnd|dz |dz dz|dz dz|dzfzSt|d)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.%drz( is not a valid 32-bit unsigned integer!max_int ValueError)int_valdialects r( int_to_strr8sY Gw rM ]d " \T ! dN    RSSct|Dcgc]}d|z }}|j|jgddj|Scc}w)z :param int_val: An unsigned integer. :return: The reverse DNS lookup for an IPv4 address in network byte order integer form. r)zin-addrarparr) int_to_wordsreverseextendr)r6r'wordss r( int_to_arpar@sI ,G4 5!TAX 5E 5 MMO LL() 88E? 6s Ac.tjd|S)z :param int_val: the integer to be packed. :return: a packed string that is equivalent to value represented by an unsigned integer. r+)r,packr6s r( int_to_packedrDs <<g &&r9c4tjd|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. r+r)r,r-) packed_ints r( packed_to_intrGs >>$ +A ..r9c,t|ttSN) _valid_words word_size num_wordsr?s r(r r s y) 44r9cpd|cxkr tksnt|d|dz |dz dz|dz dz|dzfS)z :param int_val: An unsigned integer. :return: An integer word (octet) sequence that is equivalent to value represented by an unsigned integer. rz< is not a valid integer value supported bythis address type!r0r1r2rr3rCs r(r<r<sV  "7 "18;< < ] ]d " ]d " t^ r9ct|st|dtjdtjdg|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. z/ is not a valid octet list for an IPv4 address!r+4Br)r r5r,r-rBrMs r( words_to_intrQs? u PUWXX >>$ T :E : ;A >>r9c,t|ttSrI) _valid_bitswidthword_sepbitss r(r r s tUH --r9c,t|ttSrI) _bits_to_intrTrUrVs r(r r s eX ..r9cL| td}t|tt|S)NrU)globals _int_to_bitsrKrL)r6rUs r(rrs%9Z( Ix @@r9c"t|tSrI) _valid_binrTbin_vals r(rrs gu %%r9c"t|tSrI) _int_to_binrTrCs r(rr w &&r9c"t|tSrI) _bin_to_intrTr_s r(rrrcr9cg}td|z}t|trd|vr| d|vr+|jdDcgc]}dt |z}}ndt |zg}dt |cxkrdkr2n|tdt |z D]}|jdn||s|dt|zScc}w#t $r|wxYw) 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!:rrrr0z %s.%s.%s.%s) r isinstancerrr r5lenrangeappendtuple)r$tokenserroror's r(expand_partial_addressrqsF ?$F GE$ " $;K d{15CAA$Q-AAT*+ F q K1s6{?+ # c" #K  5= ((B K sCCCC C)rrI)<__doc__sys_sysstructr,socketrr"platformnetaddr.fbsocketrr!r netaddr.corerr r netaddr.strategyr rJr rSr rYrr\rr^rrbrrenetaddr.compatrrTrKword_fmtrUfamily family_nameversion word_baser4rLmax_worddictrkprefix_to_netmasknetmask_to_prefixprefix_to_hostmaskhostmask_to_prefixr)r.r8r@rDrGr<rQrq)r's0r(rs *==''BA8== %           u*q. Y   >A 49!UQY4GHqaA%!)$q( )*HJ49!UQY4GHqguqy!A%&*HJ*/519*=>Qa! Q  >@*/519*=>QqUQY!a >@:R,T& '/5  ?./A &''#)cII??sE5E##E(E-