3
@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>   || _ | j | _d| _x"t|j D ]}|| | j|< q$W 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j|}d }|}| jjd| d |  |dkr^| jjd| d  d S || jkr|| jjd|  d S d| j|< tjj	 }| j
jdd	d	kr| j
d g|_| jj|s| jj|}	|	sd S t|	d
krx2|	D ]}
| jj|
r|
}P qW n| jjdd d S n|}x| j j D ]t}| jjd|  yt }tjjtjj||}t|jj }x"|D ]}
|j||
 j|
 qtW tddj|| j|}| j| x|D ]}t j!dt j"t j#B }t j$||}t|d
krx^|D ]V}| jjd|  |j%dr|d d }n|d | }td|| j|}| j| qW qW W nJ t&k
r } z,| jjd| d | d t'| d W Y d d }~X nX q*W d S )NzReceived event, z, from r   z	Ignoring z, from self.zSkipping duplicate event for T
_dnsserver r   z"Couldn't resolve the name server, z 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): zBCouldn't resolve the name server, so not attempting zone transfer.)(	eventTypemoduledatar   
hashstringdebugr	   dnsresolverResolverr   getnameserversvalidIPresolveHostlenerror	getTargetgetNamesr   zoneZ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   sn    








zsfp_dnszonexfer.handleEvent)r8   
__module____qualname____doc__r   optdescsr	   dictr   r   r   rR   r   r   r   r   r      s   	r   )	r:   	dns.queryr&   Zdns.zonesflibr   r   r   r   r   r   r   r   <module>   s   