ó
    ã fi¬  ã                   ó<   • S SK r S SKrS SKrSSKJr   " S S5      rg)é    Né   )ÚAPIErrorc                   ó‚   • \ rS rSrSrSS jrSS jrS rSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSS jrSS jrSrg)ÚStreamé   zhttps://stream.shodan.ioNc                 ó   • Xl         X l        g ©N©Úapi_keyÚproxies)Úselfr   r   s      ÚR/home/gothic/public_html/Scylla/venv/lib/python3.13/site-packages/shodan/stream.pyÚ__init__ÚStream.__init__   s   € ØŒØ�ó    c                 ó*  • SU R                   0nU R                  U-   nU(       a  US::  d  US:X  a  S nU(       a  SUS'   Ub  X$S'     [        R                  " XTSUU R                  S9nUR
                  S:w  d  US:¼  a  OM:  UR
                  S
:w  a/   [        R                  " UR                  5      n[        US   5      eUR                  c  SUl        U$ ! [         a    [        S	5      ef = f! [         a    e [         a     Of = f[        S5      e)NÚkeyr   FÚ	heartbeatÚqueryT)ÚparamsÚstreamÚtimeoutr   i  z*Unable to contact the Shodan Streaming APIéÈ   Úerrorz>Invalid API key or you do not have access to the Streaming APIzutf-8)r   Úbase_urlÚrequestsÚgetr   Ústatus_codeÚ	Exceptionr   ÚjsonÚloadsÚtextÚencoding)r   Únamer   r   r   Ú
stream_urlÚreqÚdatas           r   Ú_create_streamÚStream._create_stream   s*  € à�4—<‘<ð
ˆð —]‘] TÑ)ˆ
ö ˜ 1›¨'°Q«,ØˆGö
 Ø"'ˆF�;ÑàÑØ#�7‰Oð	IØÜ—l’l :ÀTÐSZØ+/¯<©<ñ9�ð —?‘? cÓ)¨W¸«\Øñ ð �?‰?˜cÓ!ðÜ—z’z #§(¡(Ó+�Ü˜t G™}Ó-Ð-ð �<‰<ÑØ"ˆCŒLØˆ
øô ó 	IÜÐGÓHÐHð	Iûô ó ØÜó ÙðúäÐ[Ó\Ð\s$   Á8C Â C Â.C0 ÃC-Ã0DÄDc              #   ó–   #   • UR                  5        H1  nU(       d  M  U(       a  Uv •  M  [        R                  " U5      v •  M3     g 7fr	   )Ú
iter_linesr    r!   )r   r   ÚrawÚlines       r   Ú_iter_streamÚStream._iter_streamA   s6   é € Ø×%Ñ%Ö'ˆD÷ ˆtÞØ”JäŸ*š* TÓ*Ô*ò (ùs
   ‚A	Ÿ*A	c              #   óJ  #   • U(       a   U R                  SR                  U5      US9nOU R                  SUS9n U R                  XC5       H  nUv •  M	     g ! [        R                  R
                   a    [        S5      e[        R                   a    [        S5      ef = f7f)Nz/shodan/alert/{}©r   z/shodan/alertzStream timed out)	r(   Úformatr.   r   Ú
exceptionsÚConnectionErrorr   ÚsslÚSSLError)r   Úaidr   r,   r   r-   s         r   ÚalertÚStream.alertK   sœ   é € ÞØ×(Ñ(Ð);×)BÑ)BÀ3Ó)GÐQXÐ(ÐY‰Fà×(Ñ(¨À'Ð(ÐJˆFð	/Ø×)Ñ)¨&Ö6�Ø”
ò 7øä×"Ñ"×2Ñ2ó 	/ÜÐ-Ó.Ð.Ü�|‰|ó 	/ÜÐ-Ó.Ð.ð	/üs   ‚8B#»A ÁB#ÁAB Â B#c              #   ó    #   • U R                  SR                  SR                  U5      5      US9nU R                  XB5       H  nUv •  M	     g7f)z­
A filtered version of the "banners" stream to only return banners that match the ASNs of interest.

:param asn: A list of ASN to return banner data on.
:type asn: string[]
z/shodan/asn/{}Ú,r1   N©r(   r2   Újoinr.   )r   Úasnr,   r   r   r-   s         r   r>   Ú
Stream.asnY   sK   é € ð ×$Ñ$Ð%5×%<Ñ%<¸S¿X¹XÀc»]Ó%KÐU\Ð$Ð]ˆØ×%Ñ% fÖ2ˆDØŒJò 3ùó   ‚AAc              #   ód   #   • U R                  SUS9nU R                  X15       H  nUv •  M	     g7f)z³A real-time feed of the data that Shodan is currently collecting. Note that this is only available to
API subscription plans and for those it only returns a fraction of the data.
z/shodan/bannersr1   N©r(   r.   )r   r,   r   r   r-   s        r   ÚbannersÚStream.bannersd   s7   é € ð ×$Ñ$Ð%6ÀÐ$ÐHˆØ×%Ñ% fÖ2ˆDØŒJò 3ùó   ‚.0c              #   ó    #   • U R                  SR                  SR                  U5      5      US9nU R                  XB5       H  nUv •  M	     g7f)zÄ
A filtered version of the "banners" stream to only return banners that match the countries of interest.

:param countries: A list of countries to return banner data on.
:type countries: string[]
z/shodan/countries/{}r;   r1   Nr<   )r   Ú	countriesr,   r   r   r-   s         r   rG   ÚStream.countriesl   sL   é € ð ×$Ñ$Ð%;×%BÑ%BÀ3Ç8Á8ÈIÓCVÓ%WÐahÐ$ÐiˆØ×%Ñ% fÖ2ˆDØŒJò 3ùr@   c              #   ód   #   • U R                  SXS9nU R                  XB5       H  nUv •  M	     g7f)a)  
A filtered version of the "banners" stream to only return banners that match the query of interest. The query
can vary and mix-match with different arguments (ports, tags, vulns, etc).

:param query: A space-separated list of key:value filters query to return banner data on.
:type query: string
z/shodan/custom)r   r   NrB   )r   r   r,   r   r   r-   s         r   ÚcustomÚStream.customw   s7   é € ð ×$Ñ$Ð%5¸UÐ$ÐTˆØ×%Ñ% fÖ2ˆDØŒJò 3ùrE   c              #   óÞ   #   • U R                  SR                  SR                  U Vs/ s H  n[        U5      PM     sn5      5      US9nU R	                  XR5       H  nUv •  M	     gs  snf 7f)z±
A filtered version of the "banners" stream to only return banners that match the ports of interest.

:param ports: A list of ports to return banner data on.
:type ports: int[]
z/shodan/ports/{}r;   r1   N)r(   r2   r=   Ústrr.   )r   Úportsr,   r   Úportr   r-   s          r   rN   ÚStream.portsƒ   sj   é € ð ×$Ñ$Ð%7×%>Ñ%>¸s¿x¹xÑ_dÓHeÒ_dÐW[ÌÈTÎÑ_dÑHeÓ?fÓ%gÐqxÐ$ÐyˆØ×%Ñ% fÖ2ˆDØŒJò 3ùò Ifùs   ‚&A-¨A(½0A-c              #   ó    #   • U R                  SR                  SR                  U5      5      US9nU R                  XB5       H  nUv •  M	     g7f)z°
A filtered version of the "banners" stream to only return banners that match the tags of interest.

:param tags: A list of tags to return banner data on.
:type tags: string[]
z/shodan/tags/{}r;   r1   Nr<   )r   Útagsr,   r   r   r-   s         r   rR   ÚStream.tagsŽ   sK   é € ð ×$Ñ$Ð%6×%=Ñ%=¸c¿h¹hÀt»nÓ%MÐW^Ð$Ð_ˆØ×%Ñ% fÖ2ˆDØŒJò 3ùr@   c              #   ó    #   • U R                  SR                  SR                  U5      5      US9nU R                  XB5       H  nUv •  M	     g7f)z¾
A filtered version of the "banners" stream to only return banners that match the vulnerabilities of interest.

:param vulns: A list of vulns to return banner data on.
:type vulns: string[]
z/shodan/vulns/{}r;   r1   Nr<   )r   Úvulnsr,   r   r   r-   s         r   rU   ÚStream.vulns™   sK   é € ð ×$Ñ$Ð%7×%>Ñ%>¸s¿x¹xÈ»Ó%OÐY`Ð$ÐaˆØ×%Ñ% fÖ2ˆDØŒJò 3ùr@   r
   r	   )NN)NNF)FN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r(   r.   r8   r>   rC   rG   rJ   rN   rR   rU   Ú__static_attributes__© r   r   r   r      s?   † à)€Hôô/òb+ô/ô	ôô	ô
ô	ô	÷	r   r   )r   r    r5   Ú	exceptionr   r   r\   r   r   Ú<module>r^      s   ðÛ Û Û 
å ÷Zò Zr   