3
@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>   || _ | j | _d| _x"t|j D ]}|| | j|< q$W 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 j|rd| }d|kr,d| }|s8d| }| j j|| jd dd}|d d krp| j jd	|  d S ytj|d }W n4 tk
r } z| j jd
d d| _	d S d }~X 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jd| d |  || jkrV| jjd| d  d S d| j|< |jdrz| jd  rzd S |dkr| jd	  rd S |d
kr| jd sd S t	|j
| jd k r| jjdtt	|j
 d t| jd   d S |dkrL| jd sd S t	|j
| jd k rL| jjdtt	|j
 d t| jd   d S t }|jdrx:t	|D ]"}|jt| d| jt|< qhW n
|j| x|D ]}| j rd S | j|}|d krʐq|jdddk r| jjd|  |d&ks|jdrd}	|dkrd}	|dkr"d}	|dkr0d}	|dkr>d}	|dkrLd }	d!|jd" d# }
t|	d$| d% |
 | j|}| j| qW d 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]
)r   )	eventTypemoduledatar   r   debugr   
startswithr   r   	prefixlenstrr   appendcheckForStopr?   getr5   r   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDataqrylistipaddraddrr5   evtZinfourlr>   r   r   r   handleEvente   sx    













zsfp_threatcrowd.handleEvent)rL   
__module____qualname____doc__r   optdescsr   r   dictr   r$   r-   r?   rV   r   r   r   r   r      s(   r   )r6   netaddrr   sflibr   r   r   r   r   r   r   r   <module>   s   