3
@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| _| j | _x"t|j D ]}|| | j|< q$W 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|j djdddi}ddi}| jjdtjj||| jd	 | jd
 d}tj	d |d d krp| jj
d d S ytj|d }W n4 tk
r } z| jj
dt|  d S d }~X nX |S )Nurlraw_unicode_escapeasciireplace)errorszContent-Typez!application/x-www-form-urlencodedzhttp://www.ssltools.com/api/dns_fetchtimeout
_useragent)postDataheaderstimeout	useragent   contentzNo response from SSLTools.comz Error processing JSON response: )encodedecoder	   fetchUrlurllibparse	urlencoder   timesleepdebugjsonloadsBaseExceptionstr)r   domainparamsr0   resdataer   r   r   queryDns;   s"    

zsfp_ssltools.queryDnsc             C   s   |j djddddt|dd}dd	i}| jjd
tjj||d| jd d}t	j
d |d d krt| jjd d S ytj|d }W n4 tk
r } z| jjdt|  d S d }~X nX |S )Nr)   r*   r+   )r,   /true)r(   pathportZ	live_scanzContent-Typez!application/x-www-form-urlencodedz http://www.ssltools.com/api/scanr   r.   )r/   r0   r1   r2   r3   r4   zNo response from SSLTools.comz Error processing JSON response: )r5   r6   rA   r	   r7   r8   r9   r:   r   r;   r<   r=   r>   r?   r@   )r   rB   rK   rC   r0   rD   rE   rF   r   r   r   	queryScanW   s(    

zsfp_ssltools.queryScanc             C   s4  |j }|j}|j}|| jkr d S d| j|< | jjd| d |  | j|}|d krh| jjd|  d S |jd}x2|D ]*}| jj|rxt	d|| j
|}| j| qxW d}	| j||	}|d kr| jjd| d	 t|	  d S |jd
}
|
d kst|
dkr| jjd| d	 t|	  d S t	dt|
| j
|}| j| t	d|d	 t|	 | j
|}| j| |
jd}|rt	dt|| j
|}| j| y(|
jd}| jjt||| jd }W n6 tk
r } z| jjdt|  d S d }~X nX |jds| jjd|  d S t	d|d | j
|}| j| |jdrXt	d|d | j
|}| j| |jdrt	d|d | j
|}| j| |dkr|jdrt	ddj|jd| j
|}| j| x
t|jdt D ]}|jdd }| jj|| jd! sq| j j|dd"rd#}nd$}| jd% rT| jj| rT| jjd&| d'  |d(7 }t	||| j
|}| j| | jj|| jd! r|jd)rt	d*|| j
|}| j| nt	d+|| j
|}| j| qW |jd,rt	d-|jd.d/| j
|}| j| d S |jd0r0t	d1|jd.d/| j
|}| 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modulerE   r   r	   r=   rG   getvalidIPr   __name__notifyListenersrL   rA   len	parseCertr   r@   infojoinsetr   r+   	validHost	getTargetmatchesresolveHostisDomain
startswith)r   event	eventNamesrcModuleName	eventDatarE   rM   addressevtrK   rO   bannerrR   certrF   sanrB   evt_typer   r   r   handleEventv   s    

















zsfp_ssltools.handleEvent)rf   
__module____qualname____doc__r   optdescsr   dictr   r   r'   rG   rL   r}   r   r   r   r   r      s   	
r   )r>   r;   urllib.requestr8   urllib.parseurllib.errorsflibr   r   r   r   r   r   r   r   <module>   s   