o inh6@sdZddlZddlmZmZddlmZmZddl m Z m Z m Z m Z ddlmZmZmZiiiidZGdd d ejZGd d d eZGd d d eZGdddeZGdddeZGdddeZGdddeZddZdddZddZddZedS)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_parserhandler) Publisher Subscriber) IPAddress IPNetworkIPRangecidr_abbrev_to_verbose) _dict_items _callable _open_binary)IPv4IPv6 IPv6_unicast multicastc@s.eZdZd ddZddZddZdd ZdS) SaxRecordParserNcCs.d|_d|_d|_d|_d|_d|_||_dS)NrF)_level _is_active_record _tag_level _tag_payload _tag_feeding _callback)selfcallbackr:/usr/local/lib/python3.10/dist-packages/netaddr/ip/iana.py__init__3s zSaxRecordParser.__init__cCs|jd7_|jdur+|dkr'd|_|j|_i|_d|vr)|d|jd<dSdSdS|j|jdkr]|dkrUd|vrQd|vrS|j|dg}||ddSdSdSg|_d|_dSd|_dS) NFrecordTdatexreftypedata)rrrr setdefaultappendrr)rnameattrslrrr startElement<s&   zSaxRecordParser.startElementcCs|jdur?|dkr$|j|jkr$d|_d|_t|jr ||jd|_n|j|jdkr?|dkr?d|j|j|<d|_d|_|jd8_dS)NTrFrr!) rrrr rrjoinrr)rr&rrr endElementQs   zSaxRecordParser.endElementcCs|jdur |j|dSdS)NT)rrr%)rcontentrrr charactersas zSaxRecordParser.charactersN)__name__ __module__ __qualname__rr)r,r.rrrrr2s    rcs8eZdZdZfddZddZddZdd ZZS) XMLRecordParserzP A configurable Parser that understands how to parse XML based records. c s>tt|t|_|jt|j||_|j |dS)z` Constructor. fh - a valid, open file handle to XML based record data. N) superr3rr xmlparsersetContentHandlerrconsume_recordfh__dict__updaterr8kwargs __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)rrecrrrprocess_recordzszXMLRecordParser.process_recordcCs$||}|dur||dSdSr/)r@notifyrr?rrrrr7s zXMLRecordParser.consume_recordcCs|j|jdS)z Parse and normalises records, notifying registered subscribers with record data as it is encountered. N)r5parser8)rrrrrCszXMLRecordParser.parse) r0r1r2__doc__rr@r7rC __classcell__rrr=rr3fs   r3c(eZdZdZfddZddZZS) 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 tt||dS)z Constructor. fh - a valid, open file handle to an IANA IPv4 address space file. kwargs - additional parser options. N)r4rGrr;r=rrrzIPv4Parser.__init__cCspi}dD]}t||d||<qd|dvr.|dd\}}dt|t|f|d<|d|d<|S)l Callback method invoked for every record. See base class method for more details. )prefix designationr whoisstatusr*/rKz%d/%drN)strgetstripsplitint capitalize)rr?rkeyoctetrKrrrr@s zIPv4Parser.process_recordr0r1r2rDrr@rErrr=rrG  rGcrF) 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 rHz Constructor. fh - a valid, open file handle to an IANA IPv6 address space file. kwargs - additional parser options. N)r4rZrr;r=rrrrIzIPv6Parser.__init__cCsFt|ddt|ddt|ddgdd}|S)rJrKr* descriptionrfc)rK allocation referencerPrQrRrBrrrr@s  zIPv6Parser.process_recordrXrrr=rrZrYrZcrF)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 rHr[)r4rbrr;r=rrrrIzIPv6UnicastParser.__init__c Csdt|ddt|ddt|ddt|ddt|ddd}|S)rJrNr*r\rKr rM)rNr\rKr rMrarBrrrr@sz IPv6UnicastParser.process_recordrXrrr=rrbs  rbcs0eZdZdZfddZddZddZZS)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 rH)z Constructor. fh - a valid, open file handle to an IANA IPv4 multicast address allocation file. kwargs - additional parser options. N)r4rcrr;r=rrrs zMulticastParser.__init__cCsd|vr/|d\}}|d}|d}dddd|Dddd|DfS|d}ddd|DS)zX Removes variations from address entries found in this particular file. -.z%s-%scSg|]}tt|qSrrPrT.0irrr %z2MulticastParser.normalise_addr..cSrfrrgrhrrrrk&rlcSrfrrgrhrrrrk)rl)rSrRr+)raddra1a2o1o2rrrnormalise_addrszMulticastParser.normalise_addrcCs4d|vr|t|dt|ddd}|SdS)rJrmr\r*)addressdescrN)rrrPrQrBrrrr@+s zMulticastParser.process_record)r0r1r2rDrrrr@rErrr=rrcs   rcc@s eZdZdZddZddZdS) 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)dcttopic unique_key)rrvrwrxrrrr@s  zDictUpdater.__init__cCs||j}|jdkrtt|}||j|<dS|jdkr)tt|}||j|<dS|jdkr9t|}||j|<dS|jdkrjd}d|vr_|d\}}t||}|}t|dkr^|d}nt |}||j|<dSdS) z Callback function used by Publisher to notify this Subscriber about an update. Stores topic based information into dictionary passed to constructor. r rrrNrdrr) rxrwrr rvrSrcidrslenr)rr#data_idcidriprangefirstlastryrrrr:Ns,         zDictUpdater.updateN)r0r1r2rDrr:rrrrru:s rucCstttd}|ttddd|tttd}|ttddd|tttd}|ttddd|t ttd}|ttd d d |d S) zd Parse and load internal IANA data lookups with the latest information from data files. zipv4-address-space.xmlr rKzipv6-address-space.xmlrz$ipv6-unicast-address-assignments.xmlrzmulticast-addresses.xmlrrsN) rGr __package__attachru IANA_INFOrCrZrbrc)ipv4ipv6ipv6uamcastrrr load_infoms rcCs|durtj}ttD]9}|dt|d||d|dt|dt|}t|D]}||}|d||dq2q dS)z7 Pretty prints IANA information to filehandle. Nrd z%-45r)_sysstdoutsortedrwriterz)r8categoryiprangesr}detailsrrr pprint_infos  rcCs2t|dr ||vSt|dr||kStd|f)Nr~valuez$Unsupported IP range or address: %r!)hasattr Exception)ipip_rangerrr_within_boundss  rcCsi}|jdkrGttdD]\}}t||r#|dg|d|q |rEttdD]\}}t||rD|dg|d|q.|S|jdkrttdD]\}}t||rh|dg|d|qRttdD]\}}t||r|dg|d|qo|S)z7Returns informational data specific to this IP address.r r Multicastrr)versionr rrr$r% is_multicast)ip_addrinfor|rr}rrrquerys4          rr/)rDsysrxml.saxrr netaddr.corerr netaddr.iprrrr netaddr.compatr r r rContentHandlerrr3rGrZrbrcrurrrrrrrrs. 4+)*$23