3
@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   sF   || _ | j | _t | _d| _x"t|j D ]}|| | j|< q,W 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jdd d| _d S |	d d kr| jjd|  d S ytj|	d }|j	ds
| jjd d d| _d S |j	d!r|j	d!}
|
j	d"rJ| jjd#|
j	d"d$ d d S t
|
j	|t |kr| jjd%t|  | jj|
j	| | j|||d&  | jj|
j	|g  W n8 tk
r } z| jjd't| d d S d }~X 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400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: )r1   r2   r3   r4   )r   strr   fetchUrlr8   
errorStateinfojsonloadsgetlenr   debugr   extendr6   	Exception)r   qry	querytypepager=   attrZpagesizeZresponsekeyurlresrer   r   r   r6   >   sV    $
zsfp_viewdns.queryc             C   s4  |j }|j}|j}| jrd S | jjd| d |  | jd dkrZ| jjdd d| _d S || jkr|| jjd| d	  d S d| j|< d}|d
krd}d}|dkrd}d}|dkr| j	 j
|rd}d}n| jjd d S t | _| j|| | j}t }|d k	r0x(|D ]}	|	j|}
|
r|
j | jkr6q|
j |kr|j|
j  nq|
j d krjq|d
krtd|
| j|}| jj|
| jd r td|
| j|}| j| nj| j| jd kr̐q|  jd7  _|dkr| jd r| jj|
|s| jjd qtd|
| j|}| j| qW 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	demo1.com	demo2.com	demo3.com	demo4.com	demo5.comr   _internettldsr   r
   r"   r	   z"Host no longer resolves to our IP.r    )rO   rP   rQ   rR   rS   )	eventTypemoduledatar<   r   rB   r   r8   r   	getTargetr*   r   r   r6   r@   lowerappendr   __name__isDomainnotifyListenersr   
validateIP)r   event	eventNamesrcModuleName	eventDataZvalkeyidentrecZmyresrK   hrL   evtr   r   r   handleEventt   sp    




zsfp_viewdns.handleEvent)r"   )r[   
__module____qualname____doc__r   optdescsr   r<   r   r   r   dictr   r   r!   r6   rg   r   r   r   r   r      s    
6r   )r>   sflibr   r   r   r   r   r   r   r   <module>   s   