U
    @6^$                     @   s@   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                   @   sB   e Zd ZdZi Zi ZdZe fddZdd Z	dd Z
d	d
 ZdS )sfp_dnszonexferzZDNS Zone Transfer:Footprint,Investigate:DNS::Attempts to perform a full DNS zone transfer.Nc                 C   s:   || _ |  | _d| _t| D ]}|| | j|< q"d S )NDNS)sftempStorageevents__dataSource__listkeysopts)selfsfcuserOptsopt r   :/var/www/spiderfoot.crq.systems/modules/sfp_dnszonexfer.pysetup    s
    
zsfp_dnszonexfer.setupc                 C   s   dgS )NPROVIDER_DNSr   r   r   r   r   watchedEvents)   s    zsfp_dnszonexfer.watchedEventsc                 C   s   ddgS )NRAW_DNS_RECORDSINTERNET_NAMEr   r   r   r   r   producedEvents/   s    zsfp_dnszonexfer.producedEventsc                 C   s  |j }|j}|j}| j|}d }|}| jd| d |  |dkr^| jd| d  d S || jkr|| jd|  d S d| j|< tj	 }| j
dd	d	kr| j
d g|_| j|s| j|}	|	sd S t|	d
kr|	D ]}
| j|
r|
} qqn| jdd d S n|}|   D ]h}| jd|  zt }tjtj||}t|j }|D ]}
|||
 |
 qjtdd|| j|}| | |D ]}t !dt j"t j#B }t $||}t|d
kr|D ]V}| jd|  |%dr|d d }n|d | }td|| j|}| | qqW nJ t&k
r } z*| jd| d | d t'| d W 5 d }~X Y nX q"d S )NzReceived event, z, from r   z	Ignoring z, from self.zSkipping duplicate event for T
_dnsserver r   zBCouldn't resolve the name server, so not attempting zone transfer.FzTrying for name: r   
z^(\S+)\.?\s+\d+\s+IN\s+[AC].*z	Matched: .r   z"Failed to obtain DNS response for (z): )(	eventTypemoduledatar   
hashstringdebugr	   dnsresolverResolverr   getnameserversvalidIPresolveHostlenerror	getTargetgetNamesr   zonefrom_xfrqueryxfrnodesr   appendto_textr   join__name__notifyListenersrecompile
IGNORECASEDOTALLfindallendswithBaseExceptionstr)r   event	eventNamesrcModuleName	eventDataZeventDataHashaddrsparentEventresZnsipsnZnsipnameretznamesevtrowpatZgrpsZstrdataer   r   r   handleEvent3   s    



 zsfp_dnszonexfer.handleEvent)r9   
__module____qualname____doc__r   optdescsr	   dictr   r   r   rS   r   r   r   r   r      s   	r   )	r;   	dns.queryr&   dns.zonesflibr   r   r   r   r   r   r   r   <module>   s   