ó
    ã fif8  ã                   óÞ  • S SK r S SKrS SKrS SKrS SKJr  S SKrS SKrS SKrS SK	J
r
Jr  S SKJr  \ R                  " 5       S 5       r\R!                  SS9S 5       r\R!                  SS9\ R$                  " S	S
SSS9\ R&                  " S\S9\ R&                  " S\S9S 5       5       5       5       r\R!                  SS9S 5       r\R!                  SS9\ R$                  " SSS\S9\ R$                  " SSS\S9\ R$                  " SSSS9\ R$                  " SSSS9\ R&                  " SS S!S"9S# 5       5       5       5       5       5       r\R!                  S$S9\ R&                  " S%\S9S& 5       5       rg)'é    N)Úget_api_keyÚasync_spinner)ÚCOLORIZE_FIELDSc                  ó   • g)ú"Scan an IP/ netblock using Shodan.N© r   ó    ÚT/home/gothic/public_html/Scylla/venv/lib/python3.13/site-packages/shodan/cli/scan.pyÚscanr      s   € ð 	r	   Úlist)Únamec                  óœ  • [        5       n [        R                  " U 5      n UR                  5       n[        U5      S:”  aº  [
        R                  " SR                  US   5      5        [
        R                  " SR                  SSSS	5      5        US
   SS  H]  n[
        R                  " SR                  [
        R                  " US   SS9[
        R                  " US   SS9US   US   5      5        M_     g[
        R                  " S5        g! [        R                   a%  n[
        R                  " UR                  5      eSnAff = f)zShow recently launched scansNr   z0# {} Scans Total - Showing 10 most recent scans:Útotalz# {:20} {:<15} {:<10} {:<15s}zScan IDÚStatusÚSizeÚ	TimestampÚmatchesé
   z{:31} {:<24} {:<10} {:<15s}ÚidÚyellow©ÚfgÚstatusÚcyanÚsizeÚcreatedz#You haven't yet launched any scans.)r   ÚshodanÚShodanÚscansÚAPIErrorÚclickÚClickExceptionÚvalueÚlenÚechoÚformatÚstyle)ÚkeyÚapir   Úer   s        r
   Ú	scan_listr+      s  € ô ‹-€Cô �-Š-˜Ó
€Cð,Ø—	‘	“ˆô ˆ5ƒz�Aƒ~Ü�
Š
ÐF×MÑMÈeÐT[ÉnÓ]Ô^Ü�
Š
Ð3×:Ñ:¸9ÀhÐPVÐXcÓdÔeà˜)Ñ$ S bÓ)ˆDÜ�JŠJØ.×5Ñ5Ü—K’K  T¡
¨xÑ8Ü—K’K  X¡°6Ñ:Ø˜‘LØ˜‘Oó	öò *ô 	�
Š
Ð8Õ9øô# �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   ¢D ÄEÄ& EÅEÚinternetz--quietz2Disable the printing of information to the screen.FT)ÚhelpÚdefaultÚis_flagÚport)ÚtypeÚprotocolc                 óü  • [        5       n[        R                  " U5      n [        R                  " SSS9  UR                  X5      n[        R                  " S5        UR                  5       nX;   a  [        R                  " S5        gSR                  X5      nSn[        R                  " US5       n	[        R                  " S	R                  U5      5        Sn
[        R                  " S
5        U
(       dÝ   UR                  R                  U/SS9 H´  nUS-  n[        R                  " X›5        U (       a  M'  [        R                  " SR                  [        R                  " [        R                  " U5      [        S   S9[        R                  " [        US   5      [        S   S9SR!                  US   5      5      5        M¶     U
(       d  MÝ  SSS5        [        R                  " SR                  U5      5        g! [        R"                   a,    U
(       a   ML  UR%                  US   5      nUS   S:X  a  Sn
 Nv[&        R(                   a,    U
(       a   MŠ  UR%                  US   5      nUS   S:X  a  Sn
 N´[*         a$  n[        R,                  " [/        U5      5      eSnAff = f! , (       d  f       Ná= f! [        R"                   a%  n[        R,                  " UR0                  5      eSnAff = f)zSScan the Internet for a specific port and protocol using the Shodan infrastructure.z%Submitting Internet scan to Shodan...F©ÚnlÚDonez‘The requested port is already indexed by Shodan. A new scan for the port has been launched, please subscribe to the real-time stream for results.z{0}-{1}.json.gzr   ÚwzSaving results to file: {0}z$Waiting for data, please stand by...éZ   )Útimeouté   z{0:<40} {1:<20} {2}Úip_strr   r0   Ú;Ú	hostnamesr   r   ÚDONETNz Scan finished: {0} devices found)r   r   r   r!   r%   Úscan_internetÚportsr&   ÚhelpersÚ	open_fileÚstreamÚwrite_bannerr'   Úget_ipr   ÚstrÚjoinr    Úscan_statusÚsocketr9   Ú	Exceptionr"   Úreprr#   )Úquietr0   r2   r(   r)   r   Úofficial_portsÚfilenameÚcounterÚfoutÚdoneÚbannerr*   s                r
   r?   r?   1   sd  € ô ‹-€CÜ
�-Š-˜Ó
€Cð:,ä�
Š
Ð:¸uÒEØ× Ñ  Ó0ˆÜ�
Š
�6Ôð
 Ÿ™›ˆØÓ!Ü�JŠJð  kõ  lð )×/Ñ/°Ó?ˆHØˆGÜ×"Ò" 8¨SÔ1°TÜ—
’
Ð8×?Ñ?ÀÓIÔJð �ô —
’
ÐAÔBÞð<Ø&)§j¡j×&6Ñ&6¸°vÀrÐ&6Ó&J˜FØ# q™L˜GÜ#×0Ò0°Ô>ç#( 5Ü %§
¢
Ð+@×+GÑ+GÜ$)§K¢K´·²¸vÓ0FÌ?Ð[cÑKdÑ$eÜ$)§K¢K´°F¸6±NÓ0CÌÐX^ÑH_Ñ$`Ø$'§H¡H¨V°KÑ-@Ó$Aó,Cö !"ñ 'K÷ ˜$÷ 2ôP �JŠJÐ9×@Ñ@ÀÓIÕJøô) "Ÿ?™?ó (ö  Ú!à"Ÿ™¨t°D©zÓ:˜Ø ™>¨VÓ3Ø#'˜DùÜ!Ÿ>™>ó (ö  Ú!à"Ÿ™¨t°D©zÓ:˜Ø ™>¨VÓ3Ø#'˜DùÜ$ó <Ü#×2Ò2´4¸³7Ó;Ð;ûð<ú÷M 2Õ1ûôR �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús’   ¢A'K Â
*K Â4AJ1Ã:>HÄ<BHÇJ1Ç-K ÈJ.ÈJ1È"J.ÉJ1ÉJ.ÉJ1É J.É?J1Ê	J.Ê
J)Ê)J.Ê.J1Ê1
J?Ê;K ËK;Ë K6Ë6K;Ú	protocolsc                  ó˜  • [        5       n [        R                  " U 5      n UR                  5       n[	        UR                  5       5       H@  u  p4[        R                  " [        R                  " SR                  U5      SS9U-   5        MB     g! [        R                   a%  n[        R                  " UR                  5      eSnAff = f)z7List the protocols that you can scan with using Shodan.z{0:<30}r   r   N)r   r   r   rS   ÚiterÚitemsr!   r%   r'   r&   r    r"   r#   )r(   r)   rS   r   Údescriptionr*   s         r
   Úscan_protocolsrX   w   s’   € ô ‹-€CÜ
�-Š-˜Ó
€Cð,Ø—M‘M“Oˆ	ä!% i§o¡oÓ&7Ö!8ÑˆDÜ�JŠJ”u—{’{ 9×#3Ñ#3°DÓ#9¸fÑEÈÑSÖTò "9øä�?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   ¢A-B ÂC	Â$ CÃC	Úsubmitz--waitz]How long to wait for results to come back. If this is set to "0" or below return immediately.é   )r-   r.   r1   z
--filenamez#Save the results in the given file.Ú z--force)r.   r/   z	--verboseÚ	netblocksz<ip address>éÿÿÿÿ)ÚmetavarÚnargsc           	      óØ  • [        5       n[        R                  " U5      nSn UR                  XBS9n[        R                  R                  5       R                  S5      n	[        R                  " S5        [        R                  " SR                  X˜S   5      5        U(       a(  [        R                  " SR                  US   5      5        U S	::  a@  [        R                  " S
R                  US   5      5        [        R                  " S5        GO1UR                  SR                  SR                  U5      5      U5      nUR                  5       nSn
US:w  a2  UR                  S5      (       d  US-  n[        R                  " US5      n
[         R"                  " 5       n[         R$                  " [&        U4S9nUR)                  5         [*        R,                  " [.        5      nSn[0        R0                  " 5       n0 nU(       Gd   UR2                  R5                  US   U S9 HÛ  nUR7                  SUR7                  SS5      5      nU(       d  M.  SR                  UUS   5      nUU;  a$  UU[        R8                  " U5         US   '   SUU'   [0        R0                  " 5       U-
  S:¼  d  M‹  UR;                  US   5      nU(       a(  [        R                  " SR                  US   5      5        US   S:X  d  MÙ  Sn  O    U(       d  GM  URG                  5         UR                  5         S nS nU(       Gað  [        R                  " S5        [M        U5       GHÉ  n[O        [Q        UU   RS                  5       5      5      S    n[        R                  " [        RT                  " US!S"9SS#9  S$U;   a@  US$   (       a6  [        R                  " S%R                  SR                  US$   5      5      SS#9  [        R                  " S5        S&U;   aJ  S'US&   ;   aA  US&   S'   (       a4  U" S(US&   S'   5        S)US&   ;   a  US&   S)   (       a  U" S*US&   S)   5        S+U;   a  US+   (       a  U" S,US+   5        S-U;   a  US-   (       a  U" S.US-   5        [        R                  " S5        S/U;   Ga   [W        US/   5      S	:”  aî  / nUS/    Hy  nURY                  S05      (       a  M  UR[                  5       S1:X  a&  UR]                  [        RT                  " S2S3S"95        MU  UR]                  [        RT                  " US3S"95        M{     [W        U5      S	:”  a[  [        R                  " S4R                  S55      SS#9  U H  n[        R                  " US6-   SS#9  M     [        R                  " S5        [        R                  " S75        [M        UU   5       H6  nU" UU   U   5        U
(       d  M  [        R^                  " X­U   U   5        M8     [        R                  " S5        GMÌ     O[        R                  " S85         U(       a  URc                  US   5        gg! [        R<                   a“    [0        R0                  " 5       U-
  U :  a  [0        R>                  " S5         GM¬  U(       a   GM§  UR;                  US   5      nUS   S:X  a  SnU(       a(  [        R                  " SR                  US   5      5         GN[@        RB                   a&    [0        R0                  " 5       U-
  U :  a   GM;  Sn GN:[D         aD  nURG                  5         UR                  5         [        RH                  " [K        U5      5      eSnAff = f! [        R<                   a%  n[        RH                  " UR`                  5      eSnAff = f! U(       a  URc                  US   5        f f = f)9r   N)Úforcez%Y-%m-%d %H:%Mr[   z1Starting Shodan scan at {} - {} scan credits leftÚcredits_leftz# Scan ID: {}r   r   zScan ID: {}zaExiting now, not waiting for results. Use the API or website to retrieve the results of the scan.zScan: {}ú, z.json.gzr7   )ÚtargetÚargsF)Úaidr9   ÚipÚipv6z{}:{}r0   Té<   z# Scan status: {}r   r>   g      à?c                 óN   • [         R                  " SR                  X5      5        g )Nz
  {:25s}{})r!   r%   r&   )r   r#   s     r
   Úprint_fieldÚ scan_submit.<locals>.print_fieldó   s   € Ü—
’
˜<×.Ñ.¨tÓ;Õ<r	   c           
      óÈ  • [         R                  " SR                  [         R                  " [	        U S   5      SS9S-   U S   -   5      SS9  S	U ;   aE  [         R                  " U S	   SS9  S
U ;   a'  [         R                  " SR                  U S
   5      SS9  [         R                  " S5        SU ;   Ga)  SU S   ;   a{  [        U S   S   5       Vs/ s H  oR                  S5      (       a  M  UPM     nn[        U5      S:”  a4  [         R                  " SR                  SR                  U5      5      5        SU S   ;   a›  U S   S   (       a�  [         R                  " S5        [         R                  " SR                  SU S   S   S   SU S   S   S   5      5        SU S   S   ;   a0  [         R                  " SR                  SU S   S   S   5      5        g g g g g s  snf )Nz
    {:20s}r0   Úgreenr   Ú/Ú	transportFr4   ÚproductÚversionú ({})r[   ÚsslÚversionsÚ-r   z    |-- SSL Versions: {}rc   Údhparamsz"    |-- Diffie-Hellman Parameters:z!        {:15s}{}
        {:15s}{}zBits:Úbitsz
Generator:Ú	generatorÚfingerprintz        {:15s}{}zFingerprint:)	r!   r%   r&   r'   rF   ÚsortedÚ
startswithr$   rG   )rR   rr   ru   s      r
   Úprint_bannerÚ!scan_submit.<locals>.print_bannerö   sï  € Ü—
’
˜<×.Ñ.¬u¯{ª{¼3¸vÀf¹~Ó;NÐSZÑ/[Ð^aÑ/aÐdjÐkvÑdwÑ/wÓxð  ~Cò  Dà Ó&Ü—J’J˜v iÑ0°UÒ;à  FÓ*ÜŸ
š
 7§>¡>°&¸Ñ2CÓ#DÈÒOä—
’
˜2”ð ˜F”?Ø! V¨E¡]Ó2ä;AÀ&ÈÁ-ÐPZÑB[Ô;\Ó#|Ò;\°×dvÑdvÐwz×d{§GÑ;\˜Ð#|Ü˜x›=¨1Ó,Ü!ŸJšJÐ'A×'HÑ'HÈÏÉÐS[ÓI\Ó']Ô^Ø! V¨E¡]Ó2°v¸e±}ÀZ×7PÜŸ
š
Ð#GÔHÜŸ
š
Ð#G×#NÑ#NÈwÐX^Ð_dÑXeÐfpÑXqÐrxÑXyð  |Hð  JPð  QVñ  JWð  Xbñ  Jcð  doñ  Jpó  $qô  rØ(¨F°5©M¸*Ñ,EÓEÜ!ŸJšJÐ'9×'@Ñ'@ÀÐQWÐX]ÑQ^Ð_iÑQjÐkxÑQyÓ'zÕ{ð Fð 8QÐ2ð #ùò $}s   ÃGÃ.Gz r:   r   r   r4   r=   rs   ÚlocationÚcountry_nameÚCountryÚcityÚCityÚorgÚOrganizationÚoszOperating SystemÚvulnsÚ!zCVE-2014-0160Ú
HeartbleedÚredz  {:25s}zVulnerabilities:Ú	z  Open Ports:z^No open ports found or the host has been recently crawled and cant get scanned again so soon.)2r   r   r   r   ÚdatetimeÚnowÚstrftimer!   r%   r&   Úcreate_alertrG   ÚstripÚendswithrA   rB   Ú	threadingÚEventÚThreadr   ÚstartÚcollectionsÚdefaultdictÚdictÚtimerC   ÚalertÚgetrE   rH   r    ÚsleeprI   r9   rJ   Úsetr"   rK   r{   ÚnextrU   rV   r'   r$   r|   ÚupperÚappendrD   r#   Údelete_alert)ÚwaitrN   ra   Úverboser\   r(   r)   rš   r   r�   rP   Úfinished_eventÚprogress_bar_threadÚhostsrQ   Ú
scan_startÚcacherR   rg   Ú	cache_keyr*   rk   r}   Úhostr‡   Úvulnr0   s                              r
   Úscan_submitr¬   …   se  € ô ‹-€CÜ
�-Š-˜Ó
€CØ€Eðx*à�x‰x˜	ˆxÐ/ˆä×Ñ×#Ñ#Ó%×.Ñ.Ð/?Ó@ˆä�
Š
�2ŒÜ�
Š
ÐF×MÑMÈcÐXfÑSgÓhÔiæÜ�JŠJ�×-Ñ-¨d°4©jÓ9Ô:ð �1‹9Ü�JŠJ�}×+Ñ+¨D°©JÓ7Ô8Ü�JŠJÐzÖ{ð ×$Ñ$ Z×%6Ñ%6°t·y±yÀÓ7KÓ%LÈiÓXˆEð  —~‘~Ó'ˆHØˆDØ˜2‹~à×(Ñ(¨×4Ñ4Ø 
Ñ*�HÜ×(Ò(¨°3Ó7�ô 'Ÿ_š_Ó.ˆNÜ"+×"2Ò"2¼-È~ÐN_Ñ"`ÐØ×%Ñ%Ô'ô  ×+Ò+¬DÓ1ˆEØˆDÜŸš›ˆJØˆEßð48Ø"%§*¡*×"2Ñ"2°u¸T±{ÈDÐ"2Ó"Q˜Ø#ŸZ™Z¨¨f¯j©j¸ÀÓ.FÓG˜Þ!Ù$ð %,§N¡N°2°v¸f±~Ó$F˜	Ø$¨EÓ1ØLR˜E¤'§.¢.°Ó"8Ñ9¸&À¹.ÑIØ/3˜E )Ñ,ô  Ÿ9š9›;¨Ñ3°rÕ9Ø#&§?¡?°4¸±:Ó#>˜Dæ&Ü %§
¢
Ð+>×+EÑ+EÀdÈ8ÁnÓ+UÔ Và# H™~°Õ7Ø'+ Ù %ò) #R÷ ‘dðn ×ÑÔ Ø×$Ñ$Ô&ò=ò|÷0 ä—
’
˜5Ô!ä  Ÿ-�BÜ¤ U¨2¡Y§_¡_Ó%6Ó 7Ó8¸Ñ;�Dä—J’JœuŸ{š{¨2°&Ñ9¸eÒDØ" dÓ*¨t°K×/@ÜŸ
š
 7§>¡>°$·)±)¸DÀÑ<MÓ2NÓ#OÐTYÒZÜ—J’J˜r”Nà! TÓ)¨nÀÀZÑ@PÓ.PÐUYÐZdÑUeÐft×UuÙ# I¨t°JÑ/?ÀÑ/OÔPà! T¨*Ñ%5Ó5¸$¸zÑ:JÈ6×:RÙ'¨°°ZÑ0@ÀÑ0HÔIØ “}¨¨e¯Ù# N°D¸±KÔ@Ø˜t“|¨¨T¯
Ù#Ð$6¸¸T¹
ÔCÜ—J’J˜r”Nð  $”¬3¨t°G©}Ó+=ÀÓ+AØ "˜Ø$(¨¤M˜DØ#Ÿ™¨s×3Ñ3Ù (Ø#Ÿz™z›|¨Ó>Ø %§¡¬U¯[ª[¸È%Ñ-PÖ Qà %§¡¬U¯[ª[¸À%Ñ-HÖ Iñ %2ô ˜u›:¨›>Ü!ŸJšJ z×'8Ñ'8Ð9KÓ'LÐQVÒWã(- Ü %§
¢
¨4°$©;¸5Ô Añ ).ô "ŸJšJ rœNô —J’J˜Ô/Ü & u¨R¡yÖ 1˜Ù$ U¨2¡Y¨t¡_Ô5÷  ˜4Ü#×0Ò0°¸R±yÀ±ÖGñ !2ô —J’J˜r—Nò_ (ôd —
’
Ð|Õ}ö
 Ø×Ñ˜U 4™[Õ)ð øôq —‘ó Oô Ÿ	š	› jÑ0°DÓ8ÜŸ
š
 3œÛ ö ÛàŸ?™?¨4°©:Ó6�DØ˜H‘~¨Ó/Ø#˜æÜŸ
š
Ð#6×#=Ñ#=¸dÀ8¹nÓ#MÔNúÜ—~‘~ó  ô Ÿ	š	› jÑ0°DÓ8Û à“DÜ ó 8Ø"×&Ñ&Ô(Ø'×,Ñ,Ô.Ü×.Ò.¬t°A«wÓ7Ð7ûð8ûôt �?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ûö Ø×Ñ˜U 4™[Õ)ð úsÌ   ¤C-^ Ä_ ÄC4^ ÈB$Y! Ê0A
Y! Ë>Y! Ì^ ÌY! Ì^ ÌK^ ×1;^ Ø,_ Ø-^ Ù_ Ù!A^Ú'^ Ú+^Ú2^ Ú6A^Ü^ Ü/^Ü6^ Ü:^Ü<^ Ü?	^Ý?^Þ^Þ^ Þ_Þ# _ß_ß_ ß_)r   Úscan_idc                 ó  • [        5       n[        R                  " U5      n UR                  U 5      n[        R
                  " US   5        g! [        R                   a%  n[        R                  " UR                  5      eSnAff = f)z&Check the status of an on-demand scan.r   N)	r   r   r   rH   r!   r%   r    r"   r#   )r­   r(   r)   r   r*   s        r
   rH   rH   M  se   € ô ‹-€CÜ
�-Š-˜Ó
€Cð,Ø�‰˜wÓ'ˆÜ�
Š
�4˜‘>Õ"øÜ�?‰?ó ,Ü×"Ò" 1§7¡7Ó+Ð+ûð,ús   ¢*A ÁBÁ! BÂB)r!   r–   rŒ   r   Úshodan.helpersrA   rI   r’   r™   Úshodan.cli.helpersr   r   Úshodan.cli.settingsr   Úgroupr   Úcommandr+   ÚoptionÚargumentÚintrF   r?   rX   r¬   rH   r   r	   r
   Ú<module>r·      s°  ðÛ Û Û Û Ý  Û Û Û ç 9Ý /ð ‡‚ƒñ	ó ð	ð
 ‡��6€Ðñ:ó ð:ð8 ‡��:€ÐØ‡‚ˆiÐRÐ\aÐkoÑpØ‡‚�˜SÑ!Ø‡‚�
 Ñ%ñ?,ó &ó "ó qó ð?,ðD ‡��;€Ðñ
,ó  ð
,ð ‡��8€ÐØ‡‚ˆhÐ|ð  GIð  PSñ  TØ‡‚ˆlÐ!FÐPRÐY\Ñ]Ø‡‚ˆi °Ñ5Ø‡‚ˆk 5°$Ñ7Ø‡‚� ^¸2Ñ>ñ*ó ?ó 8ó 6ó ^ó Tó ð*ðD ‡��8€ÐØ‡‚�	 Ñ$ñ,ó %ó ñ,r	   