3
@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   sH   || _ | j | _d| _tj | _x"t|j D ]}|| | j	|< q.W 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j }d|_d|_t |_| jjdddkr>| jd g|_	| jd rX| j
j|rXd S yN| j
j|}|s| j d| j|< W d Q R X n| j d| j|< W d Q R X W n> tk
r } z"| j d| j|< W d Q R X W Y d d }~X 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jdt|  x\|D ]T}|\}}dttj jdd }	|jt	j
|	| j||fd || j  |d7 }q.W x@|rd}
x t	j D ]}|jjdrd}
qW |
sd}tjd	 qW x.| jD ]$}| j| r|| jkr| j|| qW d S )
NTr   z Spawning threads to check TLDs: Zthread_sfp_tldsearch_iɚ;)namer/   argsr    Fg?)dictr-   r   infostrrandomSystemRandomrandintappendr   Threadr3   start	enumerater4   
startswithtimesleepr   	sendEvent)r   tldListsourceEventrunningitpairdomainr0   tnfoundrtresr   r   r   tryTldWrapperU   s,    
zsfp_tldsearch.tryTldWrapperc             C   s   | j jd|  d| j|< | jd r|| j r0d S | j jd| | jd | jd dd}|d d k	rtd	|| j|}| j| ntd	|| j|}| j| d S )
Nz$Found a TLD with the target's name: Tr   zhttp://_fetchtimeout
_useragent)r&   	useragentnoLogcontentr   )	r   r7   r   r   checkForStopfetchUrlr   __name__notifyListeners)r   sourceresultZpageContentevtr   r   r   rC   u   s    

zsfp_tldsearch.sendEventc       	      C   s`  |j }|j}|j}|| jkr d S d| j|< | jj|| jd }| jjd| d |  t }|| jkrjd S d| j|< x| jd D ]}t	|t
krt
|j dd}n|j }|jdst|dkrq|jd	s|jd
s|jdrq|jdrq|d | }| j rd S t|| jd kr,|j||g q| j|| t }qW t|dkr\| j|| d S )NT_internettldszKeyword extracted from z: ignore)errorsz//r   !*z..z.arpa.r	   )	eventTypemoduledatar   r   domainKeywordr   debugr   typer8   stripr@   lenendswithrU   r<   rO   )	r   event	eventNamesrcModuleName	eventDatakeywordZ
targetListr0   Z	tryDomainr   r   r   handleEvent   s@    






zsfp_tldsearch.handleEvent)rW   
__module____qualname____doc__r   optdescsr   r6   r-   r   r   r   r   r3   rO   rC   rp   r   r   r   r   r      s    
 r   )
r9   r   rA   dns.resolverr#   sflibr   r   r   r   r   r   r   r   <module>   s
   