U
    @6^                     @   s0   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                   @   sj   e Zd ZdZddddZddddZd	Zd
Ze Z	dZ
e fddZdd Zdd ZdddZdd Zd	S )sfp_viewdnsz`ViewDNS.info:Investigate,Passive:Search Engines:apikey:Reverse Whois lookups using ViewDNS.info. Td   )api_keyverify	maxcohostzViewDNS.info API key.zMVerify co-hosts are valid by checking if they still resolve to the shared IP.zbStop reporting co-hosted sites after this many are found, as it would likely indicate web hosting.NFr   c                 C   sB   || _ |  | _t | _d| _t| D ]}|| | j|< q*d S )Nr   )sftempStorageresultslistaccumcohostcountkeysopts)selfsfcuserOptsopt r   6/var/www/spiderfoot.crq.systems/modules/sfp_viewdns.pysetup)   s    
zsfp_viewdns.setupc                 C   s
   dddgS )N	EMAILADDR
IP_ADDRESSPROVIDER_DNSr   r   r   r   r   watchedEvents6   s    zsfp_viewdns.watchedEventsc                 C   s
   dddgS )NAFFILIATE_INTERNET_NAMEAFFILIATE_DOMAIN_NAMECO_HOSTED_SITEr   r   r   r   r   producedEvents:   s    zsfp_viewdns.producedEvents   c              
   C   s  d }|dkrd}d}d}|dkr,d}d}d}|dkr@d}d	}d
}d| d | j d  }|d| d | d t| d 7 }| jj|| j d dd}	|	d dkr| jdd d| _d S |	d d kr| jd|  d S zt|	d }|	ds| jdd d| _W d S |	dr|	d}
|
	drN| jd |
	dd! d W d S t
|
	|t |kr| jd"t|  | j|
	| | |||d#  | j|
	|g  W n@ tk
r } z | jd$t| d W Y d S d }~X Y nX d S )%N	reverseiphosti'  domains	reversensnsreversewhoisqmatchesi  zhttps://api.viewdns.info/z	/?apikey=r   &=z&page=z&output=json_fetchtimeoutr   )timeout	useragentcode)Z400Z429500403zSViewDNS.info API key seems to have been rejected or you have exceeded usage limits.FTcontentzNo ViewDNS.info data found for queryz<Error querying ViewDNS.info. Could be unavailable right now.responseerrorzError querying ViewDNS.info: UnknownzLooping at ViewDNS page r#   z2Error processing JSON response from ViewDNS.info: )r   strr   fetchUrlr7   
errorStateinfojsonloadsgetlenr   debugr   extendr5   	Exception)r   qry	querytypepager<   attrZpagesizeZresponsekeyurlresrer   r   r   r5   >   sX    $
zsfp_viewdns.queryc                 C   s.  |j }|j}|j}| jrd S | jd| d |  | jd dkrZ| jdd d| _d S || jkr|| jd| d	  d S d| j|< d}|d
krd}d}|dkrd}d}|dkr| 	 
|rd}d}n| jd d S t | _| || | j}t }|d k	r*|D ]}	|	|}
|
r|
 | jkr2q|
 |kr||
  nq|
 dkrfq|d
krtd|
| j|}| j|
| jd rtd|
| j|}| | nj| j| jd krȐq|  jd7  _|dkr| jd r| j|
|s| jd qtd|
| j|}| | qd S )NzReceived event, z, from r   r   z3You enabled sfp_viewdns but did not set an API key!FTz	Skipping z as already mapped.r   r)   domainr   r$   namer   r'   z6DNS provider found but not related to target, skipping)z	demo1.comz	demo2.comz	demo3.comz	demo4.comz	demo5.comr   _internettldsr    r
   r#   r	   z"Host no longer resolves to our IP.r!   )	eventTypemoduledatar;   r   rA   r   r7   r   	getTargetr+   r   r   r5   r?   lowerappendr   __name__isDomainnotifyListenersr   
validateIP)r   event	eventNamesrcModuleName	eventDataZvalkeyidentrecZmyresrJ   hrK   evtr   r   r   handleEventt   sp    





zsfp_viewdns.handleEvent)r#   )rU   
__module____qualname____doc__r   optdescsr   r;   r   r   r   dictr   r   r"   r5   ra   r   r   r   r   r      s$   	
6r   )r=   sflibr   r   r   r   r   r   r   r   <module>   s   