^6@dZddlZddlmZmZddlmZmZddl m Z m Z m Z m Z ddlmZmZmZiiiidZGdd ej&ZGd d eZGd d eZGddeZGddeZGddeZGddeZdZddZdZdZey)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_importlib_resources)IPv4IPv6 IPv6_unicast multicastc&eZdZddZdZdZdZy)SaxRecordParserNcfd|_d|_d|_d|_d|_d|_||_y)NrF)_level _is_active_record _tag_level _tag_payload _tag_feeding _callback)selfcallbacks 1/usr/lib/python3/dist-packages/netaddr/ip/iana.py__init__zSaxRecordParser.__init__3s5    !c|xjdz c_|jdur=|dk(r7d|_|j|_i|_d|vr|d|jd<yyy|j|jdzk(rR|dk(r)+1B1B)CDLL&(,D%(-D% q r cX|jdur|jj|yy)NT)rrr))rcontents r characterszSaxRecordParser.charactersas)    $    $ $W - %r N)__name__ __module__ __qualname__rr-r1r4r rrr2s"&* .r rc4eZdZdZfdZdZdZdZxZS)XMLRecordParserzP A configurable Parser that understands how to parse XML based records. c tt| t|_|jj t |j||_|jj|y)z` Constructor. fh - a valid, open file handle to XML based record data. N) superr;rr xmlparsersetContentHandlerrconsume_recordfh__dict__updaterrAkwargs __class__s rrzXMLRecordParser.__init__ksQ ot-/$ ((9L9L)MN V$r c|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. r9)rrecs rprocess_recordzXMLRecordParser.process_recordzs  r cN|j|}||j|yyr5)rInotifyrrHr#s rr@zXMLRecordParser.consume_records)$$S)   KK  r cN|jj|jy)z Parse and normalises records, notifying registered subscribers with record data as it is encountered. N)r>parserA)rs rrNzXMLRecordParser.parses TWW%r ) r6r7r8__doc__rrIr@rN __classcell__rFs@rr;r;fs % &r r;c(eZdZdZfdZdZxZS) 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| |y)z Constructor. fh - a valid, open file handle to an IANA IPv4 address space file. kwargs - additional parser options. N)r=rSrrDs rrzIPv4Parser.__init__ j$(,r ci}dD].}t|j|dj||<0d|dvr3|djd\}}dt |t |fz|d<|dj |d<|S)l Callback method invoked for every record. See base class method for more details. )prefix designationr$whoisstatusr//rXz%d/%dr[)strgetstripsplitint capitalize)rrHr#keyoctetrXs rrIzIPv4Parser.process_recordsG 8Ccggc2./557F3K 8 &" "$X.44S9OUF&#e*c&k)BBF8 !(+668x r r6r7r8rOrrIrPrQs@rrSrSs-r rSc(eZdZdZfdZdZxZS) 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 ,tt| |yz Constructor. fh - a valid, open file handle to an IANA IPv6 address space file. kwargs - additional parser options. N)r=rgrrDs rrzIPv6Parser.__init__rUr ct|jddjt|jddjt|jddgdjd}|S)rWrXr/ descriptionrfc)rX allocation referencer]r^r_rLs rrIzIPv6Parser.process_recordso#''(B/0668cggmR89??ASWWURD1"56<<>   r rerQs@rrgrgs-r rgc(eZdZdZfdZdZxZS)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 ,tt| |yri)r=rrrrDs rrzIPv6UnicastParser.__init__s /3r c t|jddjt|jddjt|jddjt|jddjt|jddjd}|S)rWr[r/rkrXr$rZ)r[rkrXr$rZrprLs rrIz IPv6UnicastParser.process_records#''(B/0668sww}b9:@@B#''(B/0668+,224"-.446   r rerQs@rrrrrs4r rrc.eZdZdZfdZdZdZxZS)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 ,tt| |y)z Constructor. fh - a valid, open file handle to an IANA IPv4 multicast address allocation file. kwargs - additional parser options. N)r=rvrrDs rrzMulticastParser.__init__s ot-b1r c 6d|vr|jd\}}|jjd}|jjd}dj|Dcgc]}tt |c}ddj|Dcgc]}tt |c}S|jjd}dj|Dcgc]}tt |c}Scc}wcc}wcc}w)zX Removes variations from address entries found in this particular file. -.)r`r_r0r]ra)raddra1a2o1o2is rnormalise_addrzMulticastParser.normalise_addrs $;zz#HR!!#&B!!#&B!hhR'@CF '@A!hhR'@CF '@AC C##C(B88"5QSQ[56 6 (A'@6s&D D *Dcd|vr;|jt|dt|jddd}|Sy)rWr{rkr/)addressdescrN)rr]r^rLs rrIzMulticastParser.process_record+sH S=..s3v;/?@SWW]B78FM r )r6r7r8rOrrrIrPrQs@rrvrvs 2 7 r rvceZdZdZdZdZy) DictUpdaterzc Concrete Subscriber that inserts records received from a Publisher into a dictionary. c.||_||_||_y)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)rrrrs rrzDictUpdater.__init__@s $r c*||j}|jdk(r$tt|}||j|<y|jdk(r$tt|}||j|<y|jdk(rt|}||j|<y|jdk(red}d|vrD|j d\}}t ||}|j}t|dk(r|d}n t|}||j|<yy) z Callback function used by Publisher to notify this Subscriber about an update. Stores topic based information into dictionary passed to constructor. rrrrNryr"r) rrrr rr`r cidrslenr)rr'data_idcidriprangefirstlastrs rrCzDictUpdater.updateNs t' :: 3G<=D!DHHTN ZZ6 !3G<=D!DHHTN ZZ> )W%D!DHHTN ZZ; &Gg~ ' c 2 !%. u:?#AhG#G, $DHHW 'r N)r6r7r8rOrrCr9r rrr:s %%r rcttjtd}|j t t ddd|jttjtd}|j t t ddd|jttjtd}|j t t ddd|jttjtd}|j t t d d d |jy ) zd Parse and load internal IANA data lookups with the latest information from data files. zipv4-address-space.xmlrrXzipv6-address-space.xmlrz$ipv6-unicast-address-assignments.xmlrzmulticast-addresses.xmlrrN) rSr open_binary __package__attachr IANA_INFOrNrgrrrv)ipv4ipv6ipv6uamcasts r load_informs *66{D\] ^DKK If-vx@AJJL *66{D\] ^DKK If-vx@AJJL ((6\]F MM+i7RS LLN 0<<[Jcd eE LLY{3[)LM KKMr ch|tj}ttD]}|j dt |zdz|j |dz|j dt |zdzt|}t|D]!}||}|j d|z|zdz#y)z7 Pretty prints IANA information to filehandle. Nry z%-45r)_sysstdoutsortedrwriter)rAcategoryiprangesrdetailss r pprint_infors z [[9%; s8}$t+, D! s8}$t+,X&h' ;Gw'G HHW(72T9 : ; ;r cbt|dr||vSt|dr||k(Std|d)Nrvaluez!Unsupported IP range or address: !)hasattr Exception)ipip_ranges r_within_boundsrs8x!X~ 7 #X~ hH IIr ci}|jdk(rttdD]8\}}t||s|j dg|dj |:|j rMttdD]8\}}t||s|j dg|dj |:|S|jdk(rttdD]8\}}t||s|j dg|dj |:ttdD]8\}}t||s|j dg|dj |:|S)z7Returns informational data specific to this IP address.rr Multicastrr)versionr rrr(r) is_multicast)ip_addrinforr#rs rqueryrs] D!' &(9: ,LD&gt,+V ##F+ ,    !#.y/E#F 5!'73OOK4%,,V4 5 K A ' &(9: ,LD&gt,+V ##F+ , ( .(AB 4LD&gt,3^$++F3 4 Kr r5)rOsysrxml.saxrr netaddr.corerr netaddr.iprrr r netaddr.compatr r r rContentHandlerrr;rSrgrrrvrrrrrr9r rrs,(.LLGG     1.g,,1.h(&i(&V&&R''T!!H/o/d0%*0%f0;" J< r