U
    @6^                     @   s<   d dl Z d dlmZ d dlmZmZmZ G dd deZdS )    N)	IPNetwork)
SpiderFootSpiderFootPluginSpiderFootEventc                   @   sj   e Zd ZdZdddddddZddddd	d
dZdZdZe fddZ	dd Z
dd Zdd Zdd ZdS )sfp_threatcrowdzThreatCrowd:Investigate,Passive:Reputation Systems::Obtain information from ThreatCrowd about identified IP addresses, domains and e-mail addresses.T   )checkcohostscheckaffiliatesnetblocklookupmaxnetblocksubnetlookup	maxsubnetzCheck co-hosted sites?zCheck affiliates?zvLook up all IPs on netblocks deemed to be owned by your target for possible hosts on the same target subdomain/domain?zyIf looking up owned netblocks, the maximum netblock size to look up all IPs within (CIDR value, 24 = /24, 16 = /16, etc.)z:Look up all IPs on subnets which your target is a part of?zsIf looking up subnets, the maximum subnet size to look up all the IPs within (CIDR value, 24 = /24, 16 = /16, etc.)NFc                 C   s:   || _ |  | _d| _t| D ]}|| | j|< q"d S )NF)sftempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r   :/var/www/spiderfoot.crq.systems/modules/sfp_threatcrowd.pysetup0   s
    
zsfp_threatcrowd.setupc                 C   s   ddddddddgS )	N
IP_ADDRESSAFFILIATE_IPADDRINTERNET_NAMECO_HOSTED_SITENETBLOCK_OWNER	EMAILADDRNETBLOCK_MEMBERAFFILIATE_INTERNET_NAMEr   r   r   r   r   watchedEvents<   s       zsfp_threatcrowd.watchedEventsc                 C   s   ddddddddgS )	NMALICIOUS_IPADDRMALICIOUS_INTERNET_NAMEMALICIOUS_COHOST!MALICIOUS_AFFILIATE_INTERNET_NAMEMALICIOUS_AFFILIATE_IPADDRMALICIOUS_NETBLOCKMALICIOUS_SUBNETMALICIOUS_EMAILADDRr   r$   r   r   r   producedEventsB   s       zsfp_threatcrowd.producedEventsc              
   C   s   d }d }| j |rd| }d|kr,d| }|s8d| }| j j|| jd dd}|d d krp| j d	|  d S zt|d }W n< tk
r } z| j d
d d| _	W Y d S d }~X Y nX |S )Nz7https://www.threatcrowd.org/searchApi/v2/ip/report/?ip=@z=https://www.threatcrowd.org/searchApi/v2/email/report/?email=z?https://www.threatcrowd.org/searchApi/v2/domain/report/?domain=_fetchtimeoutr   )timeout	useragentcontentzNo ThreatCrowd info found for z0Error processing JSON response from ThreatCrowd.FT)
r   validIPfetchUrlr   infojsonloads	Exceptionerrorr   )r   qryreturlreser   r   r   queryH   s&    zsfp_threatcrowd.queryc                 C   s  |j }|j}|j}| jrd S | jd| d |  || jkrV| jd| d  d S d| j|< |drx| jd sxd S |dkr| jd	 sd S |d
kr| jd sd S t	|j
| jd k r| jdtt	|j
 d t| jd   d S |dkrH| jd sd S t	|j
| jd k rH| jdtt	|j
 d t| jd   d S t }|drt	|D ]"}|t| d| jt|< qbn
|| |D ]}|  r d S | |}|d krq|dddk r| jd|  |dks|drd}	|dkrd}	|dkrd}	|dkr(d}	|dkr6d}	|dkrDd }	d!|d" d# }
t|	d$| d% |
 | j|}| | qd S )&NzReceived event, z, from z	Skipping z as already mapped.TZ	AFFILIATEr	   r   r   r    r
   r   z$Network size bigger than permitted: z > r"   r   r   	NETBLOCK_votesr   zFound ThreatCrowd URL data for )r   r&   r   r*   r   r'   r#   r)   r(   r!   r-   z<SFURL>Z	permalinkz</SFURL>zThreatCrowd [z]
)	eventTypemoduledatar   r   debugr   
startswithr   r   	prefixlenstrr   appendcheckForStopr@   getr6   r   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDataqrylistipaddraddrr6   evtZinfourlr?   r   r   r   handleEvente   s    












 zsfp_threatcrowd.handleEvent)rM   
__module____qualname____doc__r   optdescsr   r   dictr   r%   r.   r@   rW   r   r   r   r   r      s,   r   )r7   netaddrr   sflibr   r   r   r   r   r   r   r   <module>   s   