3
@6^                 @   sL   d dl m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 )    )	IPNetworkN)
SpiderFootSpiderFootPluginSpiderFootEventc            1   @   s   e Zd ZdZdddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2g1d3d4d5d5d6d7Zd8d9d:d;d<d=d>Zd?Ze Ze	 Z
d?Zd@Ze	 fdAdBZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN Zd?S )Osfp_portscan_tcpzPort Scanner - TCP:Footprint,Investigate:Crawling and Scanning:slow,invasive:Scans for commonly open TCP ports on Internet-facing systems.Z21Z22Z23Z25Z53Z7980Z81Z88Z110Z111Z113Z119Z123Z137Z138Z139Z143161Z179Z389Z443Z445Z465512513Z514Z515Z3306Z5432Z1521Z2638Z1433Z3389Z5900Z5901Z5902Z5903Z5631Z631Z636Z990Z992Z993Z995Z1080Z8080Z8888Z9000   
   T   )portstimeout
maxthreads	randomizenetblockscannetblockscanmaxzSNumber of ports to try to open simultaneously (number of threads to spawn at once.)zThe TCP ports to scan. Prefix with an '@' to iterate through a file containing ports to try (one per line), e.g. @C:\ports.txt or @/home/bob/ports.txt. Or supply a URL to load the list from there.z#Seconds before giving up on a port.z%Randomize the order of ports scanned.z4Port scan all IPs within identified owned netblocks?zVMaximum netblock/subnet size to scan IPs within (CIDR value, 24 = /24, 16 = /16, etc.))r   r   r   r   r   r   NFc             C   s  || _ | j | _d| _tj | _x"t|j D ]}|| | j	|< q.W | j	d d j
ds| j	d d j
ds| j	d d j
dr| j j| j	d d }n
| j	d }xTt|D ]H}y| jjt| W q tk
r } z| j jd W Y d d }~X qX qW | j	d rtj j| j d S )	NzTarget Networkr   r   zhttp://zhttps://@z,Skipping invalid port specified in port listr   )sftempStorageresults__dataSource__	threadingLocklocklistkeysopts
startswithoptValueToDatasetportlistappendint
ValueErrordebugrandomSystemRandomshuffle)selfsfcuserOptsoptr"   porte r0   ;/var/www/spiderfoot.crq.systems/modules/sfp_portscan_tcp.pysetup8   s$    


"zsfp_portscan_tcp.setupc             C   s   ddgS )N
IP_ADDRESSNETBLOCK_OWNERr0   )r*   r0   r0   r1   watchedEventsS   s    zsfp_portscan_tcp.watchedEventsc             C   s   ddgS )NTCP_PORT_OPENTCP_PORT_OPEN_BANNERr0   )r*   r0   r0   r1   producedEventsY   s    zsfp_portscan_tcp.producedEventsc          %   C   s   yB| j j||| jd }| j d| j|d t| < W d Q R X W nH tk
r } z,| j d| j|d t| < W d Q R X d S d }~X nX y2| j" |jd| j|d t| < W d Q R X W n( tk
r } z|j  d S d }~X nX |j  d S )Nr   T:Fi   )	r   
safeSocketr   r   portResultsstr	Exceptionrecvclose)r*   ipr.   sockr/   r0   r0   r1   tryPort\   s    $ *zsfp_portscan_tcp.tryPortc             C   s   t  | _d}d}g }xp|t|k r| jjdt||  d |  |jtjdt||  | j	||| fd || j
  |d7 }qW x@|rd}x tj D ]}|jjdrd}qW |sd}tjd	 qW | jS )
NTr   zSpawning thread to check port: z on Zsfp_portscan_tcp_)nametargetargs   Fg      ?)dictr;   lenr   infor<   r#   r   ThreadrB   start	enumeraterC   r   timesleep)r*   r@   ZportListrunningitfoundZrtr0   r0   r1   tryPortWrapperp   s&     zsfp_portscan_tcp.tryPortWrapperc             C   s   x|D ]~}|| r| j jd| d  td|| j|}| j| || dkr|| dkrt|| ddd}td	|| j|}| j| qW d S )
Nz	TCP Port z found to be OPEN.r6    Tzutf-8replace)errorsr7   )r   rI   r   __name__notifyListenersr<   )r*   ZresArrayZsrcEventcpevtZbannerZbevtr0   r0   r1   	sendEvent   s    


zsfp_portscan_tcp.sendEventc             C   s  |j }|j}|j}t }| jr"d S | jjd| d |  | jsX| jjdd d| _d S y|dkr| j	d rt
|}|j| j	d k r| jjd	| d
  d S xN|D ]:}t|}|jdd dkrqd|jdkrq|j| qW n
|j| W nD tk
r2 }	 z&| jjd| d t|	 d d d S d }	~	X nX x|D ]}
|
| jkrb| jjd|
 d  d S d| j|
< d}g }x`| jD ]V}| j rd S || j	d k r|j| |d7 }n| j| j|
|| d}|g}q|W | j| j|
|| q:W d S )NzReceived event, z, from zNo ports specified in port listFTr4   r   r   zSkipping port scanning of z
, too big..   2550z.Strange netblock identified, unable to parse: z ()z	Skipping z as already scanned.r   r   rF   )r^   r_   )	eventTypemoduledatar   
errorStater   r&   r"   errorr   r   	prefixlenr<   splitr#   BaseExceptionr   checkForStopr[   rS   )r*   event	eventNamesrcModuleName	eventDataZscanIpsnetr@   ipaddrr/   ipAddrrP   ZportArrr.   r0   r0   r1   handleEvent   s\    





zsfp_portscan_tcp.handleEvent)rW   
__module____qualname____doc__r   optdescsr   r   r"   rG   r;   r   rd   r2   r5   r8   rB   rS   r[   rq   r0   r0   r0   r1   r      s<   r   )
netaddrr   r'   r   rM   sflibr   r   r   r   r0   r0   r0   r1   <module>   s
   