U
    @6^\                     @   sH   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                   @   sr   e Zd ZdZddddZdddZd	Ze 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	S )sfp_tldsearchz|TLD Search:Footprint:DNS:slow:Search all Internet TLDs for domains with the same name as the target (this can be very slow.)FT2   )
activeonlyskipwildcards_maxthreadsz>Only report domains that have content (try to fetch the page)?z.Skip TLDs and sub-TLDs that have wildcard DNS.)r   r   Nc                 C   sD   || _ |  | _d| _t | _t| D ]}|| | j	|< q,d S )NDNS)
sftempStorageresults__dataSource__	threadingLocklocklistkeysopts)selfsfcuserOptsopt r   8/var/www/spiderfoot.crq.systems/modules/sfp_tldsearch.pysetup+   s    

zsfp_tldsearch.setupc                 C   s   dgS )NINTERNET_NAMEr   r   r   r   r   watchedEvents5   s    zsfp_tldsearch.watchedEventsc                 C   s   dgS )NSIMILARDOMAINr   r   r   r   r   producedEvents;   s    zsfp_tldsearch.producedEventsc                 C   s   t j }d|_d|_t |_| jdddkr>| jd g|_	| jd rX| j
|rXd S zN| j
|}|s| j d| j|< W 5 Q R X n| j d| j|< W 5 Q R X W n> tk
r } z | j d| j|< W 5 Q R X W 5 d }~X Y nX d S )N   
_dnsserver r   FT)dnsresolverResolvertimeoutlifetimer   searchr   getnameserversr   checkDnsWildcardresolveHostr   
tldResultsBaseException)r   targettldr%   addrser   r   r   tryTld>   s$    
zsfp_tldsearch.tryTldc                 C   s   t  | _d}d}g }| jdt|  |D ]T}|\}}dtt dd }	|t	j
|	| j||fd ||   |d7 }q,|rd}
t	 D ]}|jdrd}
q|
sd}td	 q| jD ]$}| j| r|| jkr| || qd S )
NTr   z Spawning threads to check TLDs: Zthread_sfp_tldsearch_iɚ;)namer0   argsr!   Fg?)dictr.   r   infostrrandomSystemRandomrandintappendr   Threadr4   start	enumerater5   
startswithtimesleepr   	sendEvent)r   tldListsourceEventrunningitpairdomainr1   tnfoundrtresr   r   r   tryTldWrapperU   s,    

zsfp_tldsearch.tryTldWrapperc                 C   s   | j d|  d| j|< | jd r||  r0d S | j jd| | jd | jd dd}|d d k	rtd	|| j|}| | ntd	|| j|}| | d S )
Nz$Found a TLD with the target's name: Tr   zhttp://_fetchtimeout
_useragent)r'   	useragentnoLogcontentr   )	r   r8   r   r   checkForStopfetchUrlr   __name__notifyListeners)r   sourceresultZpageContentevtr   r   r   rD   u   s    

zsfp_tldsearch.sendEventc           	      C   s^  |j }|j}|j}|| jkr d S d| j|< | j|| jd }| jd| d |  t }|| jkrjd S d| j|< | jd D ]}t	|t
krt
| dd}n| }|ds~t|dkrq~|d	s~|d
s~|drq~|drq~|d | }|  r d S t|| jd kr,|||g q~| || t }q~t|dkrZ| || d S )NT_internettldszKeyword extracted from z: ignore)errorsz//r   !*z..z.arpa.r	   )	eventTypemoduledatar   r   domainKeywordr   debugr   typer9   striprA   lenendswithrV   r=   rP   )	r   event	eventNamesrcModuleName	eventDatakeywordZ
targetListr1   Z	tryDomainr   r   r   handleEvent   s@    





zsfp_tldsearch.handleEvent)rX   
__module____qualname____doc__r   optdescsr   r7   r.   r   r   r   r    r4   rP   rD   rq   r   r   r   r   r      s$   
 r   )
r:   r   rB   dns.resolverr$   sflibr   r   r   r   r   r   r   r   <module>   s
   