U œ‰_ä6ã@sdZddlZddlmZmZddlmZmZddl m Z m Z m Z m Z ddlmZmZmZiiiidœZGdd „d ejƒZGd d „d eƒZGd d „d eƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZdd„Zddd„Zdd„Zdd„ZeƒdS)a Routines for accessing data published by IANA (Internet Assigned Numbers Authority). More details can be found at the following URLs :- - IANA Home Page - http://www.iana.org/ - IEEE Protocols Information Home Page - http://www.iana.org/protocols/ éN)Ú make_parserÚhandler)Ú PublisherÚ Subscriber)Ú IPAddressÚ IPNetworkÚIPRangeÚcidr_abbrev_to_verbose)Ú _dict_itemsÚ _callableÚ_importlib_resources)ÚIPv4ÚIPv6Ú IPv6_unicastÚ multicastc@s.eZdZd dd„Zdd„Zdd„Zdd „ZdS) ÚSaxRecordParserNcCs.d|_d|_d|_d|_d|_d|_||_dS)NrF)Ú_levelÚ _is_activeÚ_recordÚ _tag_levelÚ _tag_payloadÚ _tag_feedingÚ _callback)ÚselfÚcallback©rúg/private/var/folders/y3/n__7lzs1191bf6ypqtmfbcr1rfn98y/T/pip-unpacked-wheel-_tyv3h66/netaddr/ip/iana.pyÚ__init__3szSaxRecordParser.__init__cCs®|jd7_|jdkrL|dkrªd|_|j|_i|_d|krª|d|jd<n^|j|jdkr¤|dkr–d|kr¢d|kr¢|j |dg¡}| |d¡qªg|_d|_nd|_dS) NéFÚrecordTÚdateÚxrefÚtypeÚdata)rrrrÚ setdefaultÚappendrr)rÚnameÚattrsÚlrrrÚ startElement<s  zSaxRecordParser.startElementcCs|jdkr~|dkrH|j|jkrHd|_d|_t|jƒr@| |j¡d|_n6|j|jdkr~|dkr~d |j¡|j|<d|_d|_|jd8_dS)NTrFrr!Ú) rrrr rrÚjoinrr)rr&rrrÚ endElementQs   zSaxRecordParser.endElementcCs|jdkr|j |¡dS)NT)rrr%)rÚcontentrrrÚ charactersas zSaxRecordParser.characters)N)Ú__name__Ú __module__Ú __qualname__rr)r,r.rrrrr2s rcs8eZdZdZ‡fdd„Zdd„Zdd„Zdd „Z‡ZS) ÚXMLRecordParserzP A configurable Parser that understands how to parse XML based records. c s>tt|ƒ ¡tƒ|_|j t|jƒ¡||_|j   |¡dS)z` Constructor. fh - a valid, open file handle to XML based record data. N) Úsuperr2rrÚ xmlparserÚsetContentHandlerrÚconsume_recordÚfhÚ__dict__Úupdate©rr7Úkwargs©Ú __class__rrrks zXMLRecordParser.__init__cCs|S)a This is the callback method invoked for every record. It is usually over-ridden by base classes to provide specific record-based logic. Any record can be vetoed (not passed to registered Subscriber objects) by simply returning None. r)rÚrecrrrÚprocess_recordzszXMLRecordParser.process_recordcCs | |¡}|dk r| |¡dS)N)r?Únotify©rr>rrrrr6„s zXMLRecordParser.consume_recordcCs|j |j¡dS)z Parse and normalises records, notifying registered subscribers with record data as it is encountered. N)r4Úparser7)rrrrrB‰szXMLRecordParser.parse) r/r0r1Ú__doc__rr?r6rBÚ __classcell__rrr<rr2fs   r2cs(eZdZdZ‡fdd„Zdd„Z‡ZS)Ú IPv4Parserz÷ A XMLRecordParser that understands how to parse and retrieve data records from the IANA IPv4 address space file. It can be found online here :- - http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml c stt|ƒ |¡dS)z— Constructor. fh - a valid, open file handle to an IANA IPv4 address space file. kwargs - additional parser options. N)r3rErr:r<rrr›szIPv4Parser.__init__cCspi}dD]}t| |d¡ƒ ¡||<qd|dkr\|d d¡\}}dt|ƒt|ƒf|d<|d ¡|d<|S)úl Callback method invoked for every record. See base class method for more details. )ÚprefixZ designationr ÚwhoisÚstatusr*ú/rGz%d/%drI)ÚstrÚgetÚstripÚsplitÚintÚ capitalize)rr>rÚkeyÚoctetrGrrrr?¥s zIPv4Parser.process_record©r/r0r1rCrr?rDrrr<rrE‘s rEcs(eZdZdZ‡fdd„Zdd„Z‡ZS)Ú IPv6Parserz÷ A XMLRecordParser that understands how to parse and retrieve data records from the IANA IPv6 address space file. It can be found online here :- - http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xml c stt|ƒ |¡dS©z— Constructor. fh - a valid, open file handle to an IANA IPv6 address space file. kwargs - additional parser options. N)r3rTrr:r<rrrÄszIPv6Parser.__init__cCsFt| dd¡ƒ ¡t| dd¡ƒ ¡t| ddg¡dƒ ¡dœ}|S)rFrGr*Ú descriptionZrfcéÿÿÿÿ)rGZ allocationÚ reference©rKrLrMrArrrr?Îs ÷ zIPv6Parser.process_recordrSrrr<rrTºs rTcs(eZdZdZ‡fdd„Zdd„Z‡ZS)ÚIPv6UnicastParsera! A XMLRecordParser that understands how to parse and retrieve data records from the IANA IPv6 unicast address assignments file. It can be found online here :- - http://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xml c stt|ƒ |¡dSrU)r3rZrr:r<rrríszIPv6UnicastParser.__init__c Csdt| dd¡ƒ ¡t| dd¡ƒ ¡t| dd¡ƒ ¡t| dd¡ƒ ¡t| dd¡ƒ ¡dœ}|S)rFrIr*rVrGr rH)rIrVrGr rHrYrArrrr?÷sûz IPv6UnicastParser.process_recordrSrrr<rrZäs rZcs0eZdZdZ‡fdd„Zdd„Zdd„Z‡ZS)ÚMulticastParserzå A XMLRecordParser that knows how to process the IANA IPv4 multicast address allocation file. It can be found online here :- - http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml c stt|ƒ |¡dS)z³ Constructor. fh - a valid, open file handle to an IANA IPv4 multicast address allocation file. kwargs - additional parser options. N)r3r[rr:r<rrrs zMulticastParser.__init__cCs„d|kr^| d¡\}}| ¡ d¡}| ¡ d¡}dd dd„|Dƒ¡d dd„|Dƒ¡fS| ¡ d¡}d dd„|Dƒ¡SdS) zX Removes variations from address entries found in this particular file. ú-Ú.z%s-%scSsg|]}tt|ƒƒ‘qSr©rKrO©Ú.0ÚirrrÚ %sz2MulticastParser.normalise_addr..cSsg|]}tt|ƒƒ‘qSrr^r_rrrrb&scSsg|]}tt|ƒƒ‘qSrr^r_rrrrb)sN)rNrMr+)rÚaddrZa1Za2Zo1Zo2rrrÚnormalise_addrsÿzMulticastParser.normalise_addrcCs4d|kr0| t|dƒ¡t| dd¡ƒdœ}|SdS)rFrcrVr*)ÚaddressÚdescrN)rdrKrLrArrrr?+s þzMulticastParser.process_record)r/r0r1rCrrdr?rDrrr<rr[s r[c@s eZdZdZdd„Zdd„ZdS)Ú DictUpdaterzc Concrete Subscriber that inserts records received from a Publisher into a dictionary. cCs||_||_||_dS)zñ Constructor. dct - lookup dict or dict like object to insert records into. topic - high-level category name of data to be processed. unique_key - key name in data dict that uniquely identifies it. N)ÚdctÚtopicÚ unique_key)rrhrirjrrrr@s zDictUpdater.__init__cCsÎ||j}|jdkr,tt|ƒƒ}||j|<nž|jdkrNtt|ƒƒ}||j|<n||jdkrlt|ƒ}||j|<n^|jdkrÊd}d|kr¸| d¡\}}t||ƒ}| ¡}t|ƒdkrÀ|d}nt |ƒ}||j|<dS) z¶ Callback function used by Publisher to notify this Subscriber about an update. Stores topic based information into dictionary passed to constructor. r rrrNr\rr) rjrirr rhrNrÚcidrsÚlenr)rr#Zdata_idÚcidrÚiprangeÚfirstÚlastrkrrrr9Ns(             zDictUpdater.updateN)r/r0r1rCrr9rrrrrg:srgcCs¼tt td¡ƒ}| ttdddƒ¡| ¡tt td¡ƒ}| ttdddƒ¡| ¡t t td¡ƒ}| ttdddƒ¡| ¡t t td¡ƒ}| ttd d d ƒ¡| ¡d S) zd Parse and load internal IANA data lookups with the latest information from data files. zipv4-address-space.xmlr rGzipv6-address-space.xmlrz$ipv6-unicast-address-assignments.xmlrzmulticast-addresses.xmlrreN) rEr Ú open_binaryÚ __package__ÚattachrgÚ IANA_INFOrBrTrZr[)Zipv4Zipv6Zipv6uaZmcastrrrÚ load_infoms ÿrucCsŽ|dkrtj}ttƒD]r}| dt|ƒd¡| |d¡| dt|ƒd¡t|}t|ƒD]"}||}| d||d¡qdqdS)z7 Pretty prints IANA information to filehandle. Nr\Ú z%-45r)Ú_sysÚstdoutÚsortedrtÚwriterl)r7ÚcategoryZiprangesrnÚdetailsrrrÚ pprint_info…s  r}cCs6t|dƒr||kSt|dƒr$||kStd|fƒ‚dS)NroÚvaluez$Unsupported IP range or address: %r!)ÚhasattrÚ Exception)ÚipZip_rangerrrÚ_within_bounds–s   r‚cCsi}|jdkrŒttdƒD],\}}t||ƒr| dg¡|d |¡q| ¡rŠttdƒD],\}}t||ƒr\| dg¡|d |¡q\n€|jdkr ttdƒD],\}}t||ƒr¤| dg¡|d |¡q¤ttdƒD],\}}t||ƒrÞ| dg¡|d |¡qÞ|S)z7Returns informational data specific to this IP address.ér rZ Multicastérr)Úversionr rtr‚r$r%Ú is_multicast)Zip_addrÚinformrrnrrrÚquery¢s*          rˆ)N)rCÚsysrwZxml.saxrrZ netaddr.corerrZ netaddr.iprrrr Znetaddr.compatr r r rtÚContentHandlerrr2rErTrZr[rgrur}r‚rˆrrrrÚs, ü4+)*$23