U
    @6^0                      @   sP   d dl Z d dlZd dlZ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                   @   s^   e Zd ZdZdddZdd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S )sfp_ssltoolsz{SSL Tools:Footprint,Investigate,Passive:Crawling and Scanning::Gather information about SSL certificates from SSLTools.com.T   )verifycertexpiringdaysz5Verify certificate subject alternative names resolve.zNNumber of days in the future a certificate expires to consider it as expiring.Nc                 C   s:   || _ d| _|  | _t| D ]}|| | j|< q"d S )Nz	SSL Tools)sf__dataSource__tempStorageresultslistkeysopts)selfsfcuserOptsopt r   7/var/www/spiderfoot.crq.systems/modules/sfp_ssltools.pysetup$   s
    
zsfp_ssltools.setupc                 C   s   ddgS )NINTERNET_NAME
IP_ADDRESSr   r   r   r   r   watchedEvents-   s    zsfp_ssltools.watchedEventsc                 C   s"   ddddddddd	d
dddddgS )Nr   TCP_PORT_OPENWEBSERVER_BANNERr   INTERNET_NAME_UNRESOLVEDAFFILIATE_INTERNET_NAME"AFFILIATE_INTERNET_NAME_UNRESOLVEDSSL_CERTIFICATE_ISSUEDSSL_CERTIFICATE_ISSUERSSL_CERTIFICATE_MISMATCHSSL_CERTIFICATE_EXPIREDSSL_CERTIFICATE_EXPIRINGSSL_CERTIFICATE_RAWDOMAIN_NAMEAFFILIATE_DOMAIN_NAMEr   r   r   r   r   producedEvents1   s          zsfp_ssltools.producedEventsc              
   C   s   d| djdddi}ddi}| jjdtj||| jd	 | jd
 d}t	d |d d krp| j
d d S zt|d }W n< tk
r } z| j
dt|  W Y d S d }~X Y nX |S )Nurlraw_unicode_escapeasciireplaceerrorsContent-Type!application/x-www-form-urlencodedzhttp://www.ssltools.com/api/dns_fetchtimeout
_useragentpostDataheaderstimeout	useragent   contentNo response from SSLTools.com Error processing JSON response: )encodedecoder	   fetchUrlurllibparse	urlencoder   timesleepdebugjsonloadsBaseExceptionstr)r   domainparamsr5   resdataer   r   r   queryDns;   s(     

zsfp_ssltools.queryDnsc              
   C   s   | djddddt|dd}dd	i}| jjd
tj||d| jd d}t	
d |d d krt| jd d S zt|d }W n< tk
r } z| jdt|  W Y d S d }~X Y nX |S )Nr*   r+   r,   r-   /true)r)   pathportZ	live_scanr/   r0   z http://www.ssltools.com/api/scanr   r2   r3   r8   r9   r:   r;   )r<   r=   rH   r	   r>   r?   r@   rA   r   rB   rC   rD   rE   rF   rG   )r   rI   rR   rJ   r5   rK   rL   rM   r   r   r   	queryScanW   s,    

zsfp_ssltools.queryScanc              
   C   s0  |j }|j}|j}|| jkr d S d| j|< | jd| d |  | |}|d krh| jd|  d S |d}|D ]*}| j|rvt	d|| j
|}| | qvd}	| ||	}|d kr| jd| d	 t|	  d S |d
}
|
d kst|
dkr| jd| d	 t|	  d S t	dt|
| j
|}| | t	d|d	 t|	 | j
|}| | |
d}|rt	dt|| j
|}| | z(|
d}| jt||| jd }W n> tk
r } z| jdt|  W Y d S d }~X Y nX |ds| jd|  d S t	d|d | j
|}| | |dr\t	d|d | j
|}| | |drt	d|d | j
|}| | |dkr|drt	dd|d| j
|}| | t|dt D ]}|dd }| j|| jd! sq|  j|dd"rd#}nd$}| jd% rR| j|sR| jd&| d'  |d(7 }t	||| j
|}| | | j|| jd! r|d)rt	d*|| j
|}| | nt	d+|| j
|}| | q|d,rt	d-|d.d/| j
|}| | d S |d0r,t	d1|d.d/| j
|}| | d S d S )2NTzReceived event, z, from zNo DNS information found for 	addressesr   i  z%No certificate information found for :responser   RAW_RIR_DATAr   serverr   dumpr   zError parsing certificate: textz!Failed to parse the SSL cert for r%   issuedr    issuerr!   mismatchr"   z, hostsaltnamesz*. _internettlds)includeChildrenr   r   r   zHost z could not be resolved_UNRESOLVED	AFFILIATEr'   r&   expiredr#   	expirystrUnknownexpiringr$   )	eventTypemodulerL   r   r	   rD   rN   getvalidIPr   __name__notifyListenersrS   rH   len	parseCertr   rG   infojoinsetr   r,   	validHost	getTargetmatchesresolveHostisDomain
startswith)r   event	eventNamesrcModuleName	eventDatarL   rT   addressevtrR   rV   bannerrY   certrM   sanrI   evt_typer   r   r   handleEventv   s    
















zsfp_ssltools.handleEvent)rm   
__module____qualname____doc__r   optdescsr   dictr   r   r(   rN   rS   r   r   r   r   r   r      s   	
r   )rE   rB   urllib.requestr?   urllib.parseurllib.errorsflibr   r   r   r   r   r   r   r   <module>   s   