3
@6^+                 @   sX   d dl mZmZ d dlZd dlmZmZmZ dddddgd	d
diZG dd deZ	dS )    )	IPAddress	IPNetworkN)
SpiderFootSpiderFootPluginSpiderFootEventzbadips.com IP Reptutation List_badipslistipdomainz-https://www.badips.com/get/list/any/1?age=24hz{0})idtypechecksurlregexc               @   st   e Zd ZdZdddddZddddZd	Ze fd
dZdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zd	S )sfp_badipscomzpbadips.com:Investigate,Passive:Reputation Systems::Check if a domain or IP is malicious according to badips.com.T   )r   checkaffiliatescheckcohostscacheperiodzApply checks to affiliates?z?Apply checks to sites found to be co-hosted on the target's IP?z,Hours to cache list data before re-fetching.)r   r   r   Nc             C   s8   || _ | j | _x"t|j D ]}|| | j|< qW d S )N)sftempStorageresultsr   keysopts)selfZsfcuserOptsopt r   8/var/www/spiderfoot.crq.systems/modules/sfp_badipscom.pysetup5   s    
zsfp_badipscom.setupc             C   s   dddddgS )NINTERNET_NAME
IP_ADDRESSAFFILIATE_INTERNET_NAMEAFFILIATE_IPADDRCO_HOSTED_SITEr   )r   r   r   r   watchedEventsA   s    zsfp_badipscom.watchedEventsc             C   s   dddddgS )NMALICIOUS_IPADDRMALICIOUS_INTERNET_NAMEMALICIOUS_AFFILIATE_IPADDR!MALICIOUS_AFFILIATE_INTERNET_NAMEMALICIOUS_COHOSTr   )r   r   r   r   producedEventsI   s    zsfp_badipscom.producedEventsc             C   s   t |dkrDx6|D ].}tj||tjtjB r| jjd|  dS qW t |dkrx6|D ].}tj||tjtjB rV| jjd|  dS qVW | jjd d S )Nr   z#Found to be bad against bad regex: Tz$Found to be good againt good regex: FzNeither good nor bad, unknown.)lenrematch
IGNORECASEDOTALLr   debug)r   content	goodregexbadregexrxr   r   r   contentMaliciousO   s    

zsfp_badipscom.contentMaliciousc             C   s   | j jd| d |  xttj D ]}t| d }||kr&t| d dkr&tt| d }| j j|j|| jd | jd d	}|d
 d kr| j j	d|j| d d S | j
|d
 t| d t| d r&|j|S q&W d S )Nz	Querying z for maliciousness of r   r   queryr   _fetchtimeout
_useragent)timeout	useragentr2   zUnable to fetch Fr3   r4   )r   r1   r   	malchecksr   strfetchUrlformatr   errorr6   )r   r   target
targetTypecheckcidr   resr   r   r   resourceQueryc   s    $

zsfp_badipscom.resourceQueryc             C   s  d}|dkr | j j|| jd }xjttj D ]X}t| d }||koXt| d dkr0t }t| d }| j jd| | jjd	d
|d< |d d kr| j j	|| jd | jd d}|d d kr| j j
d| d d S | j jd| |d  |dkrFt }	dt| krt| d jdd}
tj|
tj}| j jd| d |
  xP|d jdD ].}tj||}t|d
krV|	j|d
  qVW n|d jd}	x|	D ]}t|dk s|jdrq|j }y6t|t|kr| j j|d | d |  |S W n< tk
r: } z| j jdt|  wW Y d d }~X nX qW d S dt| krxZ|d jdD ]H}||ks|dkrd||krd| j j|d | d | d  |S qdW q0ytt| d j|}tt| d j|}xj|d jdD ]X}|dkrtj||tjs"tj||tjr| j j|d | d | d  |S qW W q0 tk
r } z| j jd t|  w0W Y d d }~X q0X q0W d S )!N r
   _internettldsr   r   r   r   Zsfmal_r   r   r2   r8   r9   )r:   r;   zUnable to fetch FZnetblockr   z{0}z(\d+\.\d+\.\d+\.\d+)zNew regex for z: 
   #z found within netblock/subnet z in zError encountered parsing: /z
 found in z list.zError encountered parsing 2: )r   
hostDomainr   r   r<   r   dictcacheGetgetr>   r@   cachePutreplacer-   compiler/   r1   splitfindallr,   append
startswithstripr   r   	Exceptionr=   r?   r.   BaseException)r   r   rA   rB   Z	targetDomrC   rD   datar   Ziplistr5   patlinegrpr	   eZrxDomZrxTgtr   r   r   resourceListu   sr     

  zsfp_badipscom.resourceListc             C   s   xt tj D ]}t| d }||kr|t| d kr| jjd| d | d |  t| d dkrt| j|||S t| d dkr| j|||S qW d S )	Nr   r   zChecking maliciousness of z (z) with: r   r7   r   )r   r<   r   r   r1   rF   r`   )r   Z
resourceIdZitemTyperA   rC   rD   r   r   r   
lookupItem   s    zsfp_badipscom.lookupItemc             C   s~  |j }|j}|j}| jjd| d |  || jkrL| jjd| d  d S d| j|< |dkrr| jjdd rrd S |d	kr| jjd
d rd S xtt	j
 D ]}t	| d }| j| r|dkrd}|dkrd}nd}|dkrd}d}|d krd}|dkr d}|dkrd}|dkrd}| j|||}	| j r8d S |	d k	r|d | d d |	 d }
t||
| j|}| j| qW d S )!NzReceived event, z, from z	Skipping z, already checked.Tr$   r   Fr#   r   r   r!   r	   r&   r(   BGP_AS_OWNERBGP_AS_MEMBERZasnZMALICIOUS_ASNr    r"   r
   r'   r)   r*   z [z]
z<SFURL>z</SFURL>)r!   r#   )rb   rc   )r    r$   r"   )	eventTypemoduler[   r   r1   r   r   rP   r   r<   r   ra   checkForStopr   __name__notifyListeners)r   event	eventNameZsrcModuleNameZ	eventDatarC   rD   ZtypeIdZevtTyper   textevtr   r   r   handleEvent   sR    






zsfp_badipscom.handleEvent)rg   
__module____qualname____doc__r   optdescsr   rN   r   r%   r+   r6   rF   r`   ra   rm   r   r   r   r   r      s"   Mr   )
netaddrr   r   r-   sflibr   r   r   r<   r   r   r   r   r   <module>   s   
