3
@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   sH   || _ | j | _| j | _d| _x"t|j D ]}|| | j|< q.W 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j|}d }|}| jjd| d |  || jkr\| jjd|  d S d| j|< | jjd|  t }ddgdd	gd
dgd}	x
t|	j	 D ]}
| j
 rd S ytjj|tjj|
}| jjdddkr| jd }ntjj }|jd }tjj||dd}x8|jD ],}t|| jkr8qd| jt|< xt|	j	 D ]}| jjdt| d |	| d   tj|	| d tjtjB }tj|t|}t|dkrqVx`|D ]V}| jjd|  t|}t |	| d || j!|}| j"| |
dkrB| j# j$|ddd rBt d|| j!|}| j"| |
dkrd|krt d|| j!|}| j"| tjd|tjtjB }|rx|D ]}d|krq| j# j$|dddrd}nd}| jd r| jj%| r| jjd| d   |d!7 }t ||| j!|}| j"| qW qW qVW t|}t d"|| j!|}| j"| qW W q t&k
r } z,| jj'd#| d$ |
 d% t| d& W Y d d }~X qX qW d 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evtrJ   domainZevt_typeer   r   r   handleEvent;   s    



$

"





zsfp_dnsraw.handleEvent)rG   
__module____qualname____doc__r   optdescsr
   r   r2   r   r   r    rc   r   r   r   r   r      s   
r   )
rA   dns.resolverr4   	dns.querydns.rdatatypesflibr   r   r   r   r   r   r   r   <module>   s
   