U
    @6^e                     @   sH   d dl Z 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                   @   sN   e Zd ZdZddiZddiZdZdZe fddZ	dd	 Z
d
d Zdd ZdS )
sfp_dnsrawzhDNS Raw Records:Footprint,Investigate,Passive:DNS::Retrieves raw DNS records such as MX, TXT and others.verifyTzVerify SPF hostnames resolve.Nc                 C   sD   || _ |  | _|  | _d| _t| D ]}|| | j|< q,d S )NDNS)sftempStorageeventschecked__dataSource__listkeysopts)selfsfcuserOptsopt r   5/var/www/spiderfoot.crq.systems/modules/sfp_dnsraw.pysetup%   s    

zsfp_dnsraw.setupc                 C   s
   dddgS )NINTERNET_NAMEDOMAIN_NAMEZDOMAIN_NAME_PARENTr   r   r   r   r   watchedEvents/   s    zsfp_dnsraw.watchedEventsc              	   C   s   ddddddddd	g	S )
NPROVIDER_MAILPROVIDER_DNSRAW_DNS_RECORDSDNS_TEXTDNS_SPFr   ZINTERNET_NAME_UNRESOLVEDAFFILIATE_INTERNET_NAMEZ"AFFILIATE_INTERNET_NAME_UNRESOLVEDr   r   r   r   r   producedEvents5   s    
  zsfp_dnsraw.producedEventsc                 C   s  |j }|j}|j}| j|}d }|}| jd| d |  || jkr\| jd|  d S d| j|< | jd|  t }ddgdd	gd
dgd}	t|		 D ]}
| 
 r d S ztj|tj|
}| jdddkr| jd }ntj }|jd }tjj||dd}|jD ]}t|| jkr2qd| jt|< t|		 D ]}| jdt| d |	| d   t|	| d tjtjB }t|t|}t|dkrqL|D ]N}| jd|  t|}t |	| d || j!|}| "| |
dkr2| # j$|ddds2t d|| j!|}| "| |
dkrd|krt d|| j!|}| "| td|tjtjB }|r|D ]}d|krq| # j$|dddrd}nd}| jd r| j%|s| jd| d   |d!7 }t ||| j!|}| "| qqqLt|}t d"|| j!|}| "| qW q t&k
r } z*| j'd#| d$ |
 d% t| d& W 5 d }~X Y qX qd S )'NzReceived event, z, from zSkipping duplicate event for TzGathering DNS records for z(\S+\s+(?:\d+)?\s+IN\s+MX\s+\d+\s+(\S+)\.r   z"\S+\s+(?:\d+)?\s+IN\s+NS\s+(\S+)\.r   z\S+\s+TXT\s+"(.[^"]*)"r   )MXNSTXT
_dnsserver r      )timeoutz	Checking z + against z	Matched:    r$   )includeChildrenincludeParentsr    zv=spfr   zinclude:(.+?) _r   r   zHost z could not be resolvedZ_UNRESOLVEDr   z"Failed to obtain DNS response for (z): F)(	eventTypemoduledatar   
hashstringdebugr
   dictr   r   checkForStopdnsmessage
make_query	rdatatype	from_textr   getresolverget_default_resolvernameserversqueryudpanswerstrr   recompile
IGNORECASEDOTALLfindalllenr   __name__notifyListeners	getTargetmatchesresolveHostBaseExceptionerror)r   event	eventNamesrcModuleName	eventDataeventDataHashaddrsparentEventZrecdataZrecsrecreqnnsresxrxpatgrpsmstrdataevtrK   domainZevt_typeer   r   r   handleEvent;   s    



$
 
   
 

 zsfp_dnsraw.handleEvent)rH   
__module____qualname____doc__r   optdescsr
   r   r3   r   r   r!   rd   r   r   r   r   r      s     
r   )
rB   dns.resolverr5   	dns.querydns.rdatatypesflibr   r   r   r   r   r   r   r   <module>   s
   