U
    @6^                     @   s4   d dl mZ d dlmZmZmZ G dd deZdS )    )	IPAddress)
SpiderFootSpiderFootPluginSpiderFootEventc                   @   s`   e Zd ZdZdddZdddZdZdZdZe	 fd	d
Z
dd Zdd Zdd ZdddZdS )sfp_dnsneighborzDNS Look-aside:Footprint,Investigate:DNS::Attempt to reverse-resolve the IP addresses next to your target to see if they are related.
   T)lookasidecountvalidatereversezyValidate that reverse-resolved hostnames still resolve back to that IP before considering them as aliases of your target.zOIf look-aside is enabled, the number of IPs on each 'side' of the IP to look up)r	   r   Nc                 C   sN   || _ |  | _|  | _|  | _d| _t| D ]}|| | j|< q6d S )NDNS)	sftempStorageevents
domresultshostresults__dataSource__listkeysopts)selfsfcuserOptsopt r   :/var/www/spiderfoot.crq.systems/modules/sfp_dnsneighbor.pysetup$   s    


zsfp_dnsneighbor.setupc                 C   s   dgS )N
IP_ADDRESSr   r   r   r   r   watchedEvents/   s    zsfp_dnsneighbor.watchedEventsc                 C   s   ddgS )NAFFILIATE_IPADDRr   r   r   r   r   r   producedEvents5   s    zsfp_dnsneighbor.producedEventsc              
   C   s  |j }|j}|j}| j|}d }|}| jd| d |  || jkrLd S d| j|< zt|}W n: tk
r }	 z| j	d| d W Y d S d }	~	X Y nX z0tt
|| jd  }
tt
|| jd  }W n< tk
r
 }	 z| j	d| d W Y d S d }	~	X Y nX | jdt| d	 t|
  t
|
}t
|}||krtt|}| jd
|  |  rpd S || jks||kr|d7 }q<| j|}|s| jd| d  |d7 }q<|  |rd}n$d}|D ]}|  |rd}qd| j|< | |||}|D ]j}|  r. d S ||kr<q| j|rP|}n|}|  |rt| ||d n| ||d q|d7 }q<d S )NzReceived event, z, from TzInvalid IP address received: Fr   z Received an invalid IP address: zLookaside max: z, min: z!Attempting look-aside lookup of:    zLook-aside resolve for z failed.)	eventTypemoduledatar   
hashstringdebugr   r   BaseExceptionerrorintr   strcheckForStopr   	resolveIP	getTargetmatchesprocessHostvalidIP)r   event	eventNamesrcModuleName	eventDataeventDataHashaddrsparentEventipeZminipZmaxipscsipaffilaevaddrparentr   r   r   handleEvent9   sr    

 




zsfp_dnsneighbor.handleEventc           
      C   s,  | j |j}|| jkr&|g| j|< nF|| j| ks>|j|krV| j d| d  d S | j| |g | j|< | j d|  |d krd}|  |rd}| j |s| j |}|r|D ]}|  |rd}qn|}d }|r| j |rd}n| j |rd}|sd S t	||| j
|}	| |	 |	S )NzSkipping host, z, already processed.zFound host: TFr   r   )r   r$   r#   r   r%   r,   r-   r/   resolveHostr   __name__notifyListeners)
r   hostr6   Z	affiliateZ
parentHashr<   ZhostipshostipZhtypeevtr   r   r   r.      s<    

zsfp_dnsneighbor.processHost)N)rC   
__module____qualname____doc__r   optdescsr   r   r   dictr   r   r   rA   r.   r   r   r   r   r      s   Tr   N)netaddrr   sflibr   r   r   r   r   r   r   r   <module>   s   