U
    @†6^!  ã                   @   s8   d dl Z d dlZd dlmZmZmZ G dd„ deƒZdS )é    N)Ú
SpiderFootÚSpiderFootPluginÚSpiderFootEventc                   @   sf   e Zd ZdZi Zi ZdZdZeƒ fdd„Z	dd„ Z
dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Úsfp_bgpviewzbBGPView:Investigate,Footprint,Passive:Search Engines::Obtain network information from BGPView API.NFc                 C   s4   || _ |  ¡ | _t| ¡ ƒD ]}|| | j|< qd S )N)ÚsfÚtempStorageÚresultsÚlistÚkeysÚopts)ÚselfÚsfcÚuserOptsÚopt© r   ú6/var/www/spiderfoot.crq.systems/modules/sfp_bgpview.pyÚsetup   s    
zsfp_bgpview.setupc                 C   s   ddddgS )NÚ
IP_ADDRESSÚIPV6_ADDRESSÚBGP_AS_MEMBERÚNETBLOCK_MEMBERr   ©r   r   r   r   ÚwatchedEvents$   s    zsfp_bgpview.watchedEventsc                 C   s   dddddgS )Nr   ÚBGP_AS_PEERr   ÚPHYSICAL_ADDRESSÚRAW_RIR_DATAr   r   r   r   r   ÚproducedEvents'   s     ÿzsfp_bgpview.producedEventsc              
   C   sÜ   | j jd| dd¡ | jd | jd d}t d¡ |d d krDd S zt |d ¡}W n< tk
r’ } z| j  	d	t
|ƒ ¡ W Y ¢d S d }~X Y nX | d
¡dks¶| j  	d| ¡ d S | d¡}|sØ| j  	d| ¡ d S |S )Núhttps://api.bgpview.io/asn/ÚASÚ Ú
_useragentÚ_fetchtimeout©Ú	useragentÚtimeouté   Úcontentú-Error processing JSON response from BGPView: ÚstatusÚokúNo results found for ASN Údata©r   ÚfetchUrlÚreplacer   ÚtimeÚsleepÚjsonÚloadsÚBaseExceptionÚdebugÚstrÚget©r   ÚqryÚresÚ	json_dataÚer+   r   r   r   ÚqueryAsn+   s(    þ

zsfp_bgpview.queryAsnc              
   C   sà   | j jd| dd¡ d | jd | jd d}t d¡ |d	 d krHd S zt |d	 ¡}W n< tk
r– } z| j  	d
t
|ƒ ¡ W Y ¢d S d }~X Y nX | d¡dksº| j  	d| ¡ d S | d¡}|sÜ| j  	d| ¡ d S |S )Nr   r   r   z/peersr    r!   r"   r%   r&   r'   r(   r)   úNo peers found for ASN r+   r,   r7   r   r   r   ÚqueryAsnPeersG   s(    þ

zsfp_bgpview.queryAsnPeersc              
   C   sÔ   | j jd| | jd | jd d}t d¡ |d d kr<d S zt |d ¡}W n< tk
rŠ } z| j  dt	|ƒ ¡ W Y ¢d S d }~X Y nX | 
d¡d	ks®| j  d
| ¡ d S | 
d¡}|sÐ| j  d
| ¡ d S |S )Nzhttps://api.bgpview.io/ip/r    r!   r"   r%   r&   r'   r(   r)   ú No results found for IP address r+   ©r   r-   r   r/   r0   r1   r2   r3   r4   r5   r6   r7   r   r   r   ÚqueryIpc   s(    þ

zsfp_bgpview.queryIpc              
   C   sÔ   | j jd| | jd | jd d}t d¡ |d d kr<d S zt |d ¡}W n< tk
rŠ } z| j  dt	|ƒ ¡ W Y ¢d S d }~X Y nX | 
d¡d	ks®| j  d
| ¡ d S | 
d¡}|sÐ| j  d
| ¡ d S |S )Nzhttps://api.bgpview.io/prefix/r    r!   r"   r%   r&   r'   r(   r)   úNo results found for netblock r+   r@   r7   r   r   r   ÚqueryNetblock   s(    þ

zsfp_bgpview.queryNetblockc                 C   s~  |j }|j}|j}| jrd S | j d| d | ¡ || jkrV| j d| d ¡ d S d| j|< |dkrÂ|  |¡}|sŒ| j d| ¡ d S t	dt
|ƒ| j|ƒ}|  |¡ | d	¡}|s¼d S t	d
d dd„ |D ƒ¡| j|ƒ}|  |¡ |  |¡}|s
| j d| ¡ d S tƒ }	| d¡}
|
d k	rR|
D ](}| d¡}|s@q(|	 t
|ƒ¡ q(| d¡}|d k	r”|D ](}| d¡}|s‚qj|	 t
|ƒ¡ qjt|	ƒD ]$}t	dt
|ƒ| j|ƒ}|  |¡ qœ|dkrL|  |¡}|sð| j d| ¡ d S t	dt
|ƒ| j|ƒ}|  |¡ | d	¡}|s"d S t	d
d dd„ |D ƒ¡| j|ƒ}|  |¡ |dkrz|  |¡}|sz| j d| ¡ d S t	dt
|ƒ| j|ƒ}|  |¡ | d¡}|s¼| j d| ¡ d S |D ]¸}| d¡}|sØqÀd|kræqÀ| d¡söqÀ| d¡ d¡}|sqÀ| j d| d t
|ƒ d ¡ t	dt
|ƒ| j|ƒ}|  |¡ | j |¡rÀt	d|| j|ƒ}|  |¡ qÀd S )NzReceived event, z, from z	Skipping z as already mapped.Tr   r*   r   Zowner_addressr   z, c                 S   s   g | ]}|r|‘qS r   r   ©Ú.0Ú_fr   r   r   Ú
<listcomp>º   s      z+sfp_bgpview.handleEvent.<locals>.<listcomp>r=   Ú
ipv4_peersÚasnÚ
ipv6_peersr   r   rB   c                 S   s   g | ]}|r|‘qS r   r   rD   r   r   r   rG   è   s      )r   r   r?   Úprefixesz!No prefixes found for IP address Úprefixú:zNetblock found: z (ú))Ú	eventTypeÚmoduler+   Ú
errorStater   r4   r   r<   Úinfor   r5   Ú__name__ÚnotifyListenersr6   Újoinr>   r	   ÚappendÚsetrC   rA   ÚvalidIpNetwork)r   ÚeventÚ	eventNameÚsrcModuleNameÚ	eventDatar+   r;   ÚaddressÚevtZpeersrH   ÚpeerrI   rJ   rK   rL   Úpr   r   r   ÚhandleEvent›   s¨    





 











 






 
zsfp_bgpview.handleEvent)rS   Ú
__module__Ú__qualname__Ú__doc__r   Úoptdescsr   rQ   Údictr   r   r   r<   r>   rA   rC   ra   r   r   r   r   r      s   r   )r1   r/   Úsflibr   r   r   r   r   r   r   r   Ú<module>   s   