ó
    ã fi…$  ã                   óÔ   • S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SS/ SQSS	.0r	 " S
 S\
5      r " S S\
5      rS rSS jr\S:X  a  SSKr\R"                  " \" 5       5        gg)aO  
F-Secure Virus World Map console edition

See README.md for more details

Copyright 2012-2013 Jyrki Muukkonen

Released under the MIT license.
See LICENSE.txt or http://www.opensource.org/licenses/mit-license.php

ASCII map in map-world-01.txt is copyright:
 "Map 1998 Matthew Thomas. Freely usable as long as this line is included"

é    N)ÚAPIError)Úget_ipÚworld)é   é   é   éI   )g     €V@g     €fÀg     €VÀç     €f@a¿  
               . _..::__:  ,-"-"._       |7       ,     _,.__             
       _.___ _ _<_>`!(._`.`-.    /        _._     `_ ,_/  '  '-._.---.-.__
     .{     " " `-==,',._\{  \  / {)     / _ ">_,-' `                mt-2_
      \_.:--.       `._ )`^-. "'      , [_/(                       __,/-' 
     '"'     \         "    _L       oD_,--'                )     /. (|   
              |           ,'         _)_.\\._<> 6              _,' /  '   
              `.         /          [_/_'` `"(                <'}  )      
               \\    .-. )          /   `-'"..' `:._          _)  '       
        `        \  (  `(          /         `:\  > \  ,-^.  /' '         
                  `._,   ""        |           \`'   \|   ?_)  {\         
                     `=.---.       `._._       ,'     "`  |' ,- '.        
                       |    `-._        |     /          `:`<_|h--._      
                       (        >       .     | ,          `=.__.`-'\     
                        `.     /        |     |{|              ,-.,\     .
                         |   ,'          \   / `'            ,"     \     
                         |  /             |_'                |  __  /     
                         | |                                 '-'  `-'   \.
                         |/                                        "    / 
                         \.                                            '  
                                                                          
                          ,/           ______._.--._ _..---.---------._   
         ,-----"-..?----_/ )      _,-'"             "                  (  
    Map 1998 Matthew Thomas. Freely usable as long as this line is included
)ÚcornersÚcoordsÚdatac                   ó4   • \ rS rSrSrS	S jrS rS rS rSr	g)
ÚAsciiMapé=   zC
Helper class for handling map drawing and coordinate calculations
Nc                 ó¤  • Uc	  [         U   nUS   U l        US   U l        US   U l        Uc  [        R
                  " SS5      nX0l        / U l        S U l        Uc  [        R                  " 5       nX@l        [        R                  " 5       (       a  [        R                  " 5         SnO[        R                  nS[        R                  U4S[        R                   U4S[        R"                  U4/n0 U l        [        R&                  " 5       (       a?  [)        US	5       H.  u  nu  p‰n
[        R*                  " XyU
5        XpR$                  U'   M0     g g )
Nr   r   r   r   éÿÿÿÿÚredÚblueÚpinkr   )ÚMAPSÚmapr   r   ÚcursesÚnewwinÚwindowr   Údata_timestampÚlocaleÚgetpreferredencodingÚencodingÚcan_change_colorÚuse_default_colorsÚCOLOR_BLACKÚ	COLOR_REDÚ
COLOR_BLUEÚCOLOR_MAGENTAÚcolorsÚ
has_colorsÚ	enumerateÚ	init_pair)ÚselfÚmap_nameÚmap_confr   r   Ú
backgroundÚ
tmp_colorsÚiÚnameÚfgcolorÚbgcolors              ÚX/home/gothic/public_html/Scylla/venv/lib/python3.13/site-packages/shodan/cli/worldmap.pyÚ__init__ÚAsciiMap.__init__A   s4  € ØÑÜ˜H‘~ˆHØ˜FÑ#ˆŒØ˜xÑ(ˆŒØ 	Ñ*ˆŒØ‰>Ü—]’] 1 aÓ(ˆFØŒàˆŒ	Ø"ˆÔð ÑÜ×2Ò2Ó4ˆHØ Œô ×"Ò"×$Ñ$Ü×%Ò%Ô'Ø‰Jä×+Ñ+ˆJð ”F×$Ñ$ jÐ1Ø”V×&Ñ&¨
Ð3Ø”V×)Ñ)¨:Ð6ð
ˆ
ð ˆŒÜ×Ò×ÑÜ/8¸ÀQÖ/GÑ+�Ñ+�D 7Ü× Ò  ¨WÔ5Ø$%—‘˜DÓ!ò 0Hð ó    c                 ó   • U R                   S   U R                   S   -
  nU R                   S   U R                   S   -
  nU* S-   nUS-   nUS-  U-  U R                   S   -   nUS-  U-  U R                   S   -   n[        U5      [        U5      4$ )	zÉ
Convert lat/lon coordinates to character positions.
Very naive version, assumes that we are drawing the whole world
TODO: filter out stuff that doesn't fit
TODO: make it possible to use "zoomed" maps
é   r   é   r   éZ   é´   g     €v@r
   )r   Úint)	r)   ÚlatÚlonÚwidthÚheightÚabs_latÚabs_lonÚxÚys	            r2   Úlatlon_to_coordsÚAsciiMap.latlon_to_coordsf   s–   € ð —‘˜a‘ 4§<¡<°¡?Ñ2ˆØ—,‘,˜q‘/ D§L¡L°¡OÑ3ˆð �$˜‘)ˆØ˜‘)ˆØ�u‰_ Ñ%¨¯©°Q©Ñ7ˆØ�u‰_ Ñ&¨¯©°a©Ñ8ˆÜ�1‹v”s˜1“vˆ~Ðr5   c                 ó&  • / n[         R                  " U[        [        U5      S5      5       HË  nSR	                  [        U5      US   US   S   5      nUS   S   (       a   USR	                  US   S   5      -  nSU;   a0  US   (       a&  US	R	                  S
R                  US   5      5      -  n[        US   S   5      [        US   S   5      SU[        R                  S4nUR                  U5        MÍ     X l        g! [         a     N’f = f)zL
Set / convert internal data.
For now it just selects a random set to show.
é   z{} -> {} / {}ÚportÚlocationÚcountry_codeÚcityz {}Útagsz / {}Ú,ÚlatitudeÚ	longitudeÚ*r   N)ÚrandomÚsampleÚminÚlenÚformatr   Ú	ExceptionÚjoinÚfloatr   ÚA_BOLDÚappendr   )r)   r   ÚentriesÚbannerÚdescÚentrys         r2   Úset_dataÚAsciiMap.set_dataw   s  € ð
 ˆô —m’m D¬#¬c°$«i¸Ó*;Ö<ˆFØ"×)Ñ)¬&°«.¸&À¹.È&ÐQ[ÑJ\Ð]kÑJlÓmˆDØ�jÑ! &×)ðØ˜EŸL™L¨°
Ñ);¸FÑ)CÓDÑD�Dð ˜Ó F¨6§NØ˜Ÿ™ s§x¡x°°v±Ó'?Ó@Ñ@�ô �f˜ZÑ(¨Ñ4Ó5Ü�f˜ZÑ(¨Ñ5Ó6ØØÜ—‘ØðˆEð �N‰N˜5Ö!ñ) =ð* �	øô !ó Ùðús   Á#DÄ
DÄDc                 óH  • U R                   R                  5         U R                   R                  SSU R                  5        U R                  S   S-
  nSnU R
                   Hõ  u  pEpgp‰U(       a*  UR                  U R                  S5      R                  5       nUS::  a    O¹U R                  XE5      u  p«U R                  (       a-  U	(       a&  U[        R                  " U R                  U	   5      -  nU R                   R                  XºXh5        U(       a  SR                  Xg5      nOSnUc  MÍ   U R                   R                  USXÈ5        US-  nUS-  nM÷     U R                   R                  U5        U R                   R!                  S	5        g! [         a       ME  f = f)
z$Draw internal data to curses window r   r8   é   rG   Úignorez{} {}Nr   T)r   ÚclearÚaddstrr   r   r   Úencoder   ÚdecoderD   r%   r   Ú
color_pairrU   rV   Ú	overwriteÚleaveok)r)   ÚtargetÚrowÚitems_to_showr<   r=   Úcharr]   ÚattrsÚcolorÚchar_xÚchar_yÚdet_shows                r2   ÚdrawÚAsciiMap.draw–   sV  € à�‰×ÑÔØ�‰×Ñ˜1˜a §¡Ô*ð �l‰l˜1‰o Ñ!ˆØˆØ26·)´)Ñ.ˆC�d %æØ—{‘{ 4§=¡=°(Ó;×BÑBÓD�Ø Ó!ÙØ!×2Ñ2°3Ó<‰NˆFØ�{�{žuØœ×*Ò*¨4¯;©;°uÑ+=Ó>Ñ>�Ø�K‰K×Ñ˜v¨tÔ;ÞØ"Ÿ>™>¨$Ó5‘à�àÓ#ðØ—K‘K×&Ñ& s¨A¨xÔ?Ø˜1‘H�CØ! QÑ&’Mñ' 3<ð. 	�‰×Ñ˜fÔ%Ø�‰×Ñ˜DÕ!øô	 !ó ãðús   Ä0'FÆ
F!Æ F!)r%   r   r   r   r   r   r   r   )r   NNN)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r3   rD   r_   rt   Ú__static_attributes__© r5   r2   r   r   =   s   † ñô#&òJò"õ> "r5   r   c                   ó.   • \ rS rSrSrS rSS jrS rSrg)	ÚMapAppé¹   z$Virus World Map ncurses application c                 óH   • Xl         S U l        SU l        SU l        SU l        g )Nr   é
   é<   )Úapir   Ú
last_fetchÚsleepÚpolling_interval)r)   rƒ   s     r2   r3   ÚMapApp.__init__»   s$   € ØŒØˆŒ	ØˆŒØˆŒ
Ø "ˆÕr5   c                 ó„  • SnU(       d  U R                   c  SnOU R                  U R                  -   U::  a  SnU(       aq   / nU R                  R                  R                  5        H8  nSU;   a  US   S   (       a  UR                  U5        [        U5      S:¼  d  M8    O   X@l         Xl        U$ U$ ! [         a    e f = f)z (Re)fetch data from JSON stream FTrI   rN   é   )	r   r„   r†   rƒ   ÚstreamÚbannersrZ   rT   r   )r)   Ú	epoch_nowÚforce_refreshÚrefreshr‹   r\   s         r2   Ú
fetch_dataÚMapApp.fetch_dataÂ   s¶   € àˆÞ˜DŸI™IÑ-Ø‰Gà�‰ ×!6Ñ!6Ñ6¸)ÓCØ�æðà�Ø"Ÿh™hŸo™o×5Ñ5Ö7�FØ! VÓ+°°zÑ0BÀ:×0NØŸ™ vÔ.Ü˜7“| rÕ)Ùñ	 8ð
 $”	Ø"+”ð ˆˆwˆøô ó Øðús   ÁAB3 ÂB3 Â3B?c           
      óÖ  • [        5       n[        R                  " U R                  5         [	        [
        R
                  " 5       5      nU R                  U5      nUR                  U R                  5         UR                  U5        UR                  SSS[        R                  5        UR                  SS[
        R                  " S[
        R                  " U5      5      R!                  S5      [        R                  5        UR#                  5       nU[%        S5      :X  a  g	U(       a  UR&                  R)                  5         GM  ! [        R                   a    [        S5      ef = f)
z#Initialize and run the application zTerminal window too smallr   r   zShodan Radaré(   z%c UTCé%   ÚqN)r   r   Ú	halfdelayr…   r;   Útimer�   r_   r   rt   ÚerrorrV   re   rY   ÚstrftimeÚgmtimeÚrjustÚgetchÚordr   Ú	redrawwin)r)   ÚscrÚmÚnowrŽ   Úevents         r2   ÚrunÚ
MapApp.runÚ   s  € ä‹JˆÜ×Ò˜Ÿ™Ô$ØÜ”d—i’i“kÓ"ˆCØ—o‘o cÓ*ˆGØ�J‰J�t—y‘yÔ!ð=Ø—‘�s”ð �J‰J�q˜!˜^¬V¯]©]Ô;Ø�J‰J�q˜"œdŸmšm¨H´d·k²kÀ#Ó6FÓG×MÑMÈbÓQÔSY×S`ÑS`Ôað —I‘I“KˆEØœ˜C›Ó Øö Ø—‘×"Ñ"Ô$ò) øô —<‘<ó =ÜÐ ;Ó<Ð<ð=ús   Á7E Å E()rƒ   r   r„   r†   r…   N)F)	rv   rw   rx   ry   rz   r3   r�   r¢   r{   r|   r5   r2   r~   r~   ¹   s   † Ù/ò#ôõ0%r5   r~   c                 óX   • [        U 5      n[        R                  " UR                  5      $ ©N)r~   r   Úwrapperr¢   )rƒ   Úapps     r2   Ú
launch_mapr¨   õ   s   € Ü
�‹+€CÜ�>Š>˜#Ÿ'™'Ó"Ð"r5   c                 óJ   • SSK Jn  SSKJn  U" U" 5       5      n[	        U5      $ )zMain function / entry point r   )ÚShodan)Úget_api_key)Úshodanrª   Úshodan.cli.helpersr«   r¨   )Úargvrª   r«   rƒ   s       r2   Úmainr¯   ú   s   € åÝ.á
‘“Ó
€CÜ�c‹?Ðr5   Ú__main__r¥   )rz   r   r   rQ   r–   Úshodan.exceptionr   Úshodan.helpersr   r   Úobjectr   r~   r¨   r¯   rv   ÚsysÚexitr|   r5   r2   Ú<module>r¶      s�   ðñó Û Û Û å %Ý !ð à!â.ðñ ð"€ôJy"ˆvô y"ôx9%ˆVô 9%òx#ô
ð ˆzÓÛØ‡H‚H‰T‹VÕð r5   