3
@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   s8   || _ | j | _x"t|j D ]}|| | j|< qW 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|jdd | jd | jd d}tjd |d d krDd S ytj|d }W n4 tk
r } z| j j	d	t
|  d S d }~X nX |jd
dks| j j	d|  d S |jd}|s| j j	d|  d S |S )Nzhttps://api.bgpview.io/asn/AS 
_useragent_fetchtimeout)	useragenttimeout   contentz-Error processing JSON response from BGPView: statusokz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|jdd d | jd | jd d}tjd |d	 d krHd S ytj|d	 }W n4 tk
r } z| j j	d
t
|  d S d }~X nX |jddks| j j	d|  d S |jd}|s| j j	d|  d S |S )Nzhttps://api.bgpview.io/asn/r   r   z/peersr   r   )r    r!   r"   r#   z-Error processing JSON response from BGPView: r$   r%   zNo peers found for ASN r&   )r   r'   r(   r   r)   r*   r+   r,   r-   r.   r/   r0   )r   r1   r2   r3   r4   r&   r   r   r   queryAsnPeersG   s&    

zsfp_bgpview.queryAsnPeersc             C   s   | j jd| | jd | jd d}tjd |d d kr<d S ytj|d }W n4 tk
r } z| j jdt	|  d S d }~X nX |j
dd	ks| j jd
|  d S |j
d}|s| j jd
|  d S |S )Nzhttps://api.bgpview.io/ip/r   r   )r    r!   r"   r#   z-Error processing JSON response from BGPView: r$   r%   z No results found for IP address r&   )r   r'   r   r)   r*   r+   r,   r-   r.   r/   r0   )r   r1   r2   r3   r4   r&   r   r   r   queryIpc   s&    

zsfp_bgpview.queryIpc             C   s   | j jd| | jd | jd d}tjd |d d kr<d S ytj|d }W n4 tk
r } z| j jdt	|  d S d }~X nX |j
dd	ks| j jd
|  d S |j
d}|s| j jd
|  d S |S )Nzhttps://api.bgpview.io/prefix/r   r   )r    r!   r"   r#   z-Error processing JSON response from BGPView: r$   r%   zNo results found for netblock r&   )r   r'   r   r)   r*   r+   r,   r-   r.   r/   r0   )r   r1   r2   r3   r4   r&   r   r   r   queryNetblock   s&    

zsfp_bgpview.queryNetblockc             C   s  |j }|j}|j}| jrd S | jjd| d |  || jkrV| jjd| d  d S d| j|< |dkr| j|}|s| jjd|  d S t	dt
|| j|}| j| |jd	}|sd S t	d
djdd |D | j|}| j| | j|}|s
| jjd|  d S t }	|jd}
|
d k	rVx0|
D ](}|jd}|sBq*|	jt
| q*W |jd}|d k	rx0|D ](}|jd}|sqp|	jt
| qpW x0t|	D ]$}t	dt
|| j|}| j| qW |dkrX| j|}|s| jjd|  d S t	dt
|| j|}| j| |jd	}|s.d S t	d
djdd |D | j|}| j| |d kr| j|}|s| jjd|  d S t	dt
|| j|}| j| |jd}|s| jjd|  d S x|D ]}|jd}|sqd|krq|jdsq|jdjd}|sq| jjd| d t
| d  t	dt
|| j|}| j| | jj|rt	d|| j|}| j| qW d S )!NzReceived event, z, from z	Skipping z as already mapped.Tr   zNo results found for ASN 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>zNo peers found for ASN 
ipv4_peersasn
ipv6_peersr   r   zNo results found for netblock c             S   s   g | ]}|r|qS r   r   )r9   r:   r   r   r   r;      s    r   r   z No results found for IP address prefixesz!No prefixes found for IP address prefix:zNetblock found: z ())r   r   )	eventTypemoduler&   
errorStater   r.   r   r5   infor   r/   __name__notifyListenersr0   joinr6   r	   appendsetr8   r7   validIpNetwork)r   event	eventNamesrcModuleName	eventDatar&   r4   addressevtZpeersr<   peerr=   r>   r?   r@   pr   r   r   handleEvent   s    





 













 







 
zsfp_bgpview.handleEvent)rG   
__module____qualname____doc__r   optdescsr   rE   dictr   r   r   r5   r6   r7   r8   rU   r   r   r   r   r      s   r   )r+   r)   sflibr   r   r   r   r   r   r   r   <module>   s   