o
    j                    @   s  d dl mZ d dl mZ d dlZd dlZd dlmZ d dlZd dlm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZ d dlmZmZmZm Z m!Z!m"Z" d dl#m$Z$ d dl%Z%d dl&Z&d Z'dZ(dZ)d Z*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEd ZFdZGd!ZHd"ZId#ZJd$ZKd%ZLd&ZMd'ZNd(ZOdZPdZQd ZRdZSdZTd ZUdZVdZWd)ZXdZYd ZZdZ[dZ\dZ]dZ^dZ_d Z`d*Zad+Zbd,Zcd ZddZedZfdZgd-Zhd ZidZjdZkdZldZmdZndZodZpdZqd Zrd!Zsd"ZtdZudZvdZwdZxdZyd.Zzd/Z{d/Z|d0Z}d1Z~d2Zd.Zd3Zd4Zd5ZdZdZd2Zd.Zd/Zd0ZdZdZdZdZd6Zd7Zd8ZdZd9Zd:Zd;Zd<Zd=Zd>Zd?ZdZd@ZdAZdBZdCZdDZdEZdFZdGZdHZdIZdJZdKZdLZdMZdNZdZdOZdPZdQZdRZdSZdTZdUZdVZdWZdXZdYZdZZdZdZdZdZdZdZdZdZdZdZdZdZd[ZdZdZdZdZdZdZd!ZdZdZd2Zd.Zd/Zd0Zd1Zd\ZdZdZdZdZdZdZdZdZd$Zd%Zd&Zd'Zd]Zd^Zd_Zd`ZdaZd(ZdZd ZdZdZdZd ZdZdZdZdZd6Zdbdc ZG ddde deeZG dfdg dgeZdhdi Zdjdk ZG dldm dmeZG dndo doZG dpdq dqeZG drds dsZG dtdu duZG dvdw dwZG dxdy dyZG dzd{ d{ZG d|d} d}eZG d~d deZG dd deZG dd deZ G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG ddÄ deZ G ddń deZ!G ddǄ deZ"G ddɄ deZ#G dd˄ deZ$G dd̈́ deZ%G ddτ deZ&G ddф deZ'G ddӄ deZ(G ddՄ deZ)G ddׄ deZ*G ddل deZ+G ddۄ deZ,G dd݄ deZ-G dd߄ deZ.G dd deZ/G dd deZ0G dd deZ1G dd deZ2G dd deZ3G dd deZ4G dd deZ5G dd deZ6G dd deZ7G dd deZ8G dd deZ9G dd deZ:G dd deZ;G dd de Z<G dd de Z=G dd deZ>G d d deZ?G dd deZ@G dd deZAG dd deZBG dd	 d	eZCG d
d deZDG dd deZEG dd deZFG dd deZGG dd deFZHG dd deZIG dd de ZJG dd de ZKG dd deZLG dd deZMG dd deZNG d d! d!eZOG d"d# d#eZPG d$d% d%eZQG d&d' d'e ZRG d(d) d)e ZSG d*d+ d+eZTG d,d- d-eZUG d.d/ d/e ZVG d0d1 d1e ZWG d2d3 d3e ZXG d4d5 d5eZYG d6d7 d7eZZG d8d9 d9e Z[G d:d; d;eZ\G d<d= d=e Z]G d>d? d?e Z^G d@dA dAeZ_G dBdC dCeZ`G dDdE dEeZaG dFdG dGeZbG dHdI dIe ZcG dJdK dKe ZdG dLdM dMeZeG dNdO dOeZfG dPdQ dQeZgG dRdS dSeZhG dTdU dUeZiG dVdW dWeZjG dXdY dYeZkG dZd[ d[eZlG d\d] d]eZmG d^d_ d_eZnG d`da daeZoG dbdc dceZpG ddde dee ZqG dfdg dge ZrG dhdi dieZsG djdk dkeZtG dldm dmeZuG dndo doeZvG dpdq dqeZwG drds dse ZxG dtdu dueZyG dvdw dwe ZzG dxdy dyeZ{G dzd{ d{e Z|G d|d} d}eZ}G d~d deZ~G dd deZG dd deZG dd deZi ddddddddd6dd7dd8dddd9dd:dd;dd<dd=dd?dddd@ddAdddddZi ddddddd6dd7dd8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	Zi dBddCddDddEddFddGddHdÓdIdēdJdœdKdƓdLdǓdMdȓdNdɓddʓdOd˓dPd̓dQd͓dRdiZdS (      )division)print_functionN)a2b_hex)packunpack	pack_intoerror)BigEndianStructurec_uint32)contextmanager)noValue)nmbntlm	nt_errorsLOG)	Structure)SPNEGO_NegTokenInit	TypesMechSPNEGO_NegTokenRespASN1_OID
asn1encodeASN1_AID)KRB5_AP_REQ   z
NT LM 0.12                                 zA:zLPT1:IPCCOMMz?????   @                 @     i   i   i      @0   l   m    l   [   i  i  i    i  i  i  i  i	  i           	   
                                                               !   "   #   $   %   &   '   (   )   *   +   ,      i  i   i   i   i   i    c                 C   sX   | dkrdt |dfS | dkrdt|dfS | dkr$dt|dfS | dkr*d	S d
S )Nr   zOS errorUnknown errorr   zServer errorr   zHardware error   )zBad commandz#Bad command. Please file bug report)rV   rV   )ERRDOSgetERRSRVERRHRD)errclasserrcode r^   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/smb.pystrerrorE  s   r`   c                   @   s"  e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdZFdZGdZHdZIdZJdZKdZLdDZMdZNdEZOdZPdFZQdZRdGZSdHZTdIZUdJZVdKZWdLZXdMZYdZZdNZ[dOZ\dPZ]dQZ^dRZ_dSZ`dTZadUZbdZcdVZddWZedXZfdYZgdVZhdZZid[Zjd\Zkd]Zld^Zmd_Znd`ZodaZpdbZqdcZrddZsdeZti dWdfdXdgdYdhdVdidZdjd[dkd\dld]dmd^dnd_dod`dpdadqddrddsddtdbdudcdvdddwiZui edxedyedzed{ed|e	d}e
d~edededddededededededi ededededededede#de$de%de&de'de/de+detdede dZvi dddddddddddddddDddddddEddddFddddGddHddIdddddddddddddddddZwdZxddi fexdevfddewfddeufddi fddi fddi fddi fddi fi	ZydddȄZzddʄ Z{dd̄ Z|dd΄ Z}ddЄ Z~dUS )SessionErrorr   r   r   r   r"   r0   r1   r2   r%   r3   r4   r6   r7   r8   r9   r!   r:   r;   rH   r   rI   2   r&   C   P   W   n   z   {   |                        r/   i  i  i.  iK  i^  ig  i	  B   i  i  i  i  i  i  i	  i
  i  i  i  i  i  i  i  i  i  i  i  i  i  1   4   A   D   E   F   G   Q   R   S   X   Y   Z   [            Nr?   r<   r=   r>   r@   rA   rB   rC   rD   rE   rF   rG   rJ   rK   rL   rO   )
ERRnowritez-Attempt to write on write-protected diskette.)
ERRbadunitzUnknown unit.)ERRnotreadyzDrive not ready.)	ERRbadcmdzUnknown command.)ERRdatazData error (CRC).)	ERRbadreqzBad request structure length.)ERRseekzSeek error.)ERRbadmediazUnknown media type.)ERRbadsectorzSector not found.)
ERRnopaperzPrinter out of paper.)ERRwritezWrite fault.)ERRreadzRead fault.)
ERRgeneralzGeneral failure.)ERRbadsharez(An open conflicts with an existing open.)ERRlockzA Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process.)ERRwrongdiskz$The wrong disk was found in a drive.)ERRFCBUnavailz)No FCBs are available to process request.)ERRsharebufexcz#A sharing buffer has been exceeded.)
ERRbadfunczInvalid function.)
ERRbadfilezFile not found.)
ERRbadpathzDirectory invalid.)	ERRnofidszNo file descriptors available)ERRnoaccesszAccess denied.)	ERRbadfidzInvalid file handle.)	ERRbadmcbz Memory control blocks destroyed.)ERRnomemz=Insufficient server memory to perform the requested function.)	ERRbadmemzInvalid memory block address.)	ERRbadenvzInvalid environment.r5   )ERRbadformatzInvalid format.)ERRbadaccesszInvalid open mode.)
ERRbaddatazInvalid data.)ERRres	reserved.)ERRbaddrivezInvalid drive specified.)ERRremcdzSA Delete Directory request attempted  to  remove  the  server's  current directory.)ERRdiffdevicezNot same device.)
ERRnofileszMA File Search command can find no more files matching the specified criteria.)r   zRThe sharing mode specified for an Open conflicts with existing  FIDs  on the file.)r   zA Lock request conflicted with an existing lock or specified an  invalid mode,  or an Unlock requested attempted to remove a lock held by another process.)ERRunsupzThe operation is unsupported)ERRnosuchsharez#You specified an invalid share name)ERRfilexistszXThe file named in a Create Directory, Make  New  File  or  Link  request already exists.)ERRinvalidnamezInvalid name)
ERRbadpipezPipe invalid.)ERRpipebusyz-All instances of the requested pipe are busy.)ERRpipeclosingzPipe close in progress.)ERRnotconnectedz No process on other end of pipe.)ERRmoredataz"There is more data to be returned.)ERRinvgroupz%Invalid workgroup (try the -W option))ERRlogonfailurezLogon failure)ERRdiskfullz	Disk full)r   General failure)ERRunknownlevelzUnknown info level)ERRerrorzNon-specific error code.)ERRbadpwzQBad password - name/password pair in a Tree Connect or Session Setup are invalid.)
ERRbadtyper   )	ERRaccesszThe requester does not have  the  necessary  access  rights  within  the specified  context for the requested function. The context is defined by the TID or the UID.)	ERRinvnidz5The tree ID (TID) specified in a command was invalid.)ERRinvnetnamez%Invalid network name in tree connect.)ERRinvdevicezsInvalid device - printer request made to non-printer connection or  non-printer request made to printer connection.)ERRqfullz8Print queue full (files) -- returned by open print file.)
ERRqtoobigzPrint queue full -- no space.3   )ERRqeofzEOF on print queue dump.)
ERRinvpfidzInvalid print file FID.)	ERRsmbcmdz2The server did not recognize the command received.)ERRsrverrorzHThe server encountered an internal error, e.g., system file unavailable.)ERRfilespecszZThe file handle (FID) and pathname parameters contained an invalid  combination of values.)ERRreservedr   )ERRbadpermitszThe access permissions specified for a file or directory are not a valid combination.  The server cannot set the requested attribute.)ERRsetattrmodez@The attribute mode in the Set File Attribute request is invalid.)	ERRpausedzServer is paused.)	ERRmsgoffzNot receiving messages.)	ERRnoroomzNo room to buffer message.)ERRrmunszToo many remote user names.)
ERRtimeoutzOperation timed out.)ERRnoresourcez-No resources currently available for request.)ERRtoomanyuidsz%Too many UIDs active on this session.)	ERRbaduidz3The UID is not known as a valid ID on this session.)	ERRusempxz)Temp unable to support Raw, use MPX mode.)	ERRusestdz4Temp unable to support Raw, use standard read/write.)
ERRcontmpxzContinue in MPX mode.)ERRnosupportzFunction not supported.)rx   ry   rz   r{   re   r|   r}   r~   r   r   r   r           SUCCESSrX   rZ   r[   ERRXOS   ERRRMX1   ERRRMX2   ERRRMX3rW   ERRCMDc                 C   sH   t | | || _|| _|rd| _|d> | | _n|| _|| _|| _d S )Nr   r!   )	Exception__init__	nt_status_argserror_class
error_codepacket)selferror_stringr   r   r   r   r^   r^   r_   r   A  s   
zSessionError.__init__c                 C      | j S N)r   r   r^   r^   r_   get_error_classM     zSessionError.get_error_classc                 C   r   r   )r   r   r^   r^   r_   get_error_codeP  r   zSessionError.get_error_codec                 C   r   r   )r   r   r^   r^   r_   get_error_packetS  r   zSessionError.get_error_packetc                 C   s   t j| jd }|s| j}| j}n|d }|d | jd }|s$| j}nd| }| jrN| j}|tjv rItj| d }tj| d }d| j||f S d| j S d||f S )Nr   r   z%s(%s)z&SMB SessionError: code: 0x%x - %s - %sz*SMB SessionError: unknown error code: 0x%xz%SMB SessionError: class: %s, code: %s)ra   error_classesrY   r   r   r   r   ERROR_MESSAGES)r   r   error_code_strerror_class_strr   keyerror_msg_shorterror_msg_verboser^   r^   r_   __str__V  s"   

zSessionError.__str__)r   r   )__name__
__module____qualname__
ERRsuccessr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ERRnetnamedelr   r   ERRinvalidparamERRcannotopenERRinsufficientbufferr   r   ERRnotlocked	ERRrenamer   r   r   r   r   ERRnomoreitemsERRbaddirectoryERReasnotsupportedr   ERRbuftoosmallERRunknownipcERRnosuchprintjobr   ERRnoipcERRdriveralreadyinstalledERRunknownprinterportERRunknownprinterdriverERRunknownprintprocessorERRinvalidseparatorfileERRinvalidjobpriorityERRinvalidprinternameERRprinteralreadyexistsERRinvalidprintercommandERRinvaliddatatypeERRinvalidenvironmentERRunknownprintmonitorERRprinterdriverinuseERRspoolfilenotfoundERRnostartdocERRnoaddjob!ERRprintprocessoralreadyinstalledERRprintmonitoralreadyinstalledERRinvalidprintmonitorERRprintmonitorinuseERRprinterhasjobsqueuedr   r   r   r   r   r   r   r   r   r   r   r   r   
ERRbadlinkr   	ERRbadpidr   r   r   r   r   r   r   r   r   	ERRuseMPX	ERRuseSTD
ERRcontMPXERRbadPWr   ERRunknownsmbr   r   r   r   r   r   r   r   r   r   r   r   r   ERRFCBunavailr   r   	hard_msgsdos_msgsserver_msgsrX   r   r   r   r   r   r   r^   r^   r^   r_   ra   U  s@   	
	
 !"%	
$
ra   c                   @      e Zd ZdS )UnsupportedFeatureNr   r   r   r^   r^   r^   r_   r*  r      r*  c                 C   s   | d9 } | d7 } t | S )z
    Helper method that converts POSIX timestamps to FILETIME timestamps.
    
    :param int t: POSIX timestamp - can be retrieved from datetime library.
    
    :return int: FILETIME timestamp representing the given POSIX timestamp.
    逖      }*{Ginttr^   r^   r_   	POSIXtoFTv     	r3  c                 C   s   | d8 } | d } t | S )z
    Helper method that converts FILETIME timestamps to POSIX timestamps.
    
    :param int t: FILETIME timestamp.
    
    :return int: POSIX timestamp representing the given FILETIME timestamp.
    r.  r-  r/  r1  r^   r^   r_   	FTtoPOSIX  r4  r5  c                   @   s(   e Zd ZdedfdedfdedfgZdS )SMBDateStructyr2   mr"   dr0   Nr   r   r   r
   _fields_r^   r^   r^   r_   r6    
    r6  c                   @      e Zd ZdZdd Zedd Zejdd Zedd Zejd	d Zed
d Z	e	jdd Z	dd Z
dd Zedd Zedd ZdS )SMB_DATEz
    2.2.1.4.1 SMB_DATE
    Class representing an SMB Date value.
    https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/31b65222-4171-49b4-aeed-7d3f38ecf68b
    c                 C      || _ || _|| _dS )z
        :param int year: An integer representing the valid year part of the date.
        :param int month: An integer representing the valid month part of the date.
        :param int day: An integer representing the valid day part of the date.
        N)yearmonthday)r   r@  rA  rB  r^   r^   r_   r        
zSMB_DATE.__init__c                 C   s
   | j d S )N  )_yearr   r^   r^   r_   r@    s   
zSMB_DATE.yearc                 C   s*   |d }|dk s|dkrt d|| _d S )NrD  r   w   zInvalid year component.)
ValueErrorrE  r   valuer^   r^   r_   r@    s   
c                 C   r   r   )_monthr   r^   r^   r_   rA       zSMB_DATE.monthc                 C   "   |dk s|dkrt d|| _d S )Nr   r6   zInvalid month component.)rG  rJ  rH  r^   r^   r_   rA       
c                 C   r   r   )_dayr   r^   r^   r_   rB    rK  zSMB_DATE.dayc                 C   rL  )Nr   rH   zInvalid day component.)rG  rN  rH  r^   r^   r_   rB    rM  c                 C   &   | j d> d@ | jd> d@  | jd@  S )Nr3   i   r0   i  rH   )rE  rJ  rN  r   r^   r^   r_   r        &zSMB_DATE.packc                 C      t  }td|d|   |S )z
        Helper method to easily access the data as a struct.
        
        :return SMBDateStruct: The structure representation of the object.
        >Hr   )r6  r   r   r   resr^   r^   r_   r        zSMB_DATE.pack_intoc                 C      t  }td|d| | |S )z
        Helper method to easily convert packed bytes value to class object.
        
        :param bytes data: Packed bytes to be converted to a class object.
        
        :return SMB_DATE: The class representation of the packed data bytes.
        rR  r   )r6  r   from_structclsdatasr^   r^   r_   from_int     

zSMB_DATE.from_intc                 C   s   | |j d |j|jS )z
        Helper method to easily convert struct to class object.
        
        :param SMBDateStruct s: The struct object to be converted to a class object.
        
        :return SMB_DATE: The class representation of the struct object.
        rD  )r7  r8  r9  rY  r[  r^   r^   r_   rW    s   
zSMB_DATE.from_structN)r   r   r   __doc__r   propertyr@  setterrA  rB  r   r   classmethodr\  rW  r^   r^   r^   r_   r>    s*    






r>  c                   @   s(   e Zd ZdedfdedfdedfgZdS )SMBTimeStructhr0   r8  r1   r[  Nr:  r^   r^   r^   r_   rc    r<  rc  c                   @   r=  )SMB_TIMEz
    2.2.1.4.2 SMB_TIME
    Class representing an SMB Time value.
    https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/401749d1-ee41-4273-9dcb-698180e68745
    c                 C   r?  )a  
        :param int hour: An integer representing the valid hour part of the time.
        :param int minutes: An integer representing the valid minutes part of the time.
        :param int seconds: An integer representing the valid seconds part of the time.
        N)hourminutesseconds)r   rf  rg  rh  r^   r^   r_   r     rC  zSMB_TIME.__init__c                 C   r   r   )_hourr   r^   r^   r_   rf    rK  zSMB_TIME.hourc                 C   rL  )Nr   r@   zInvalid hour component.)rG  ri  rH  r^   r^   r_   rf    rM  c                 C   r   r   )_minutesr   r^   r^   r_   rg    rK  zSMB_TIME.minutesc                 C   rL  )Nr   ;   zInvalid minutes component.)rG  rj  rH  r^   r^   r_   rg    rM  c                 C   r   r   )_secondsr   r^   r^   r_   rh  #  rK  zSMB_TIME.secondsc                 C   rL  )Nr   rk  zInvalid seconds component.)rG  rl  rH  r^   r^   r_   rh  '  rM  c                 C   rO  )Nr5   i   r0   i  rH   )ri  rj  rl  r   r^   r^   r_   r   .  rP  zSMB_TIME.packc                 C   rQ  )z
        Helper method to easily access the data as a struct.
        
        :return SMBTimeStruct: The structure representation of the object.
        rR  r   )rc  r   r   rS  r^   r^   r_   r   1  rU  zSMB_TIME.pack_intoc                 C   rV  )z
        Helper method to easily convert packed bytes value to class object.
        
        :param bytes data: Packed bytes to be converted to a class object.
        
        :return SMB_TIME: The class representation of the packed data bytes.
        rR  r   )rc  r   rW  rX  r^   r^   r_   r\  <  r]  zSMB_TIME.from_intc                 C   s   | |j |j|jS )z
        Helper method to easily convert struct to class object.
        
        :param SMBTimeStruct s: The struct object to be converted to a class object.
        
        :return SMB_TIME: The class representation of the struct object.
        )rd  r8  r[  r^  r^   r^   r_   rW  J  s   
zSMB_TIME.from_structN)r   r   r   r_  r   r`  rf  ra  rg  rh  r   r   rb  r\  rW  r^   r^   r^   r_   re    s*    






re  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )SharedDevicec                 C      || _ || _|| _d S r   )_SharedDevice__name_SharedDevice__type_SharedDevice__comment)r   name
share_typecommentr^   r^   r_   r   X     
zSharedDevice.__init__c                 C   r   r   )ro  r   r^   r^   r_   get_name]  r   zSharedDevice.get_namec                 C   r   r   )rp  r   r^   r^   r_   get_type`  r   zSharedDevice.get_typec                 C   r   r   )rq  r   r^   r^   r_   get_commentc  r   zSharedDevice.get_commentc                 C   &   d| j  d t| j d | j d S )Nz<SharedDevice instance: name=z, type=, comment="">)ro  strrp  rq  r   r^   r^   r_   __repr__f  rP  zSharedDevice.__repr__N)r   r   r   r   rv  rw  rx  r}  r^   r^   r^   r_   rm  W  s    rm  c                   @   s   e Zd Z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d Z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#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zed/d0 Zd1S )2
SharedFilec
           
   	   C   s   || _ || _|| _|| _|| _|| _|| _zt|tr&|d |	d | _
n
|d |	d | _
W n ttfy?   || _
Y nw zt|trS|	d |		d | _W d S |	d |		d | _W d S  ttfyn   |	| _Y d S w )N     )_SharedFile__ctime_SharedFile__atime_SharedFile__wtime_SharedFile__mtime_SharedFile__filesize_SharedFile__allocsize_SharedFile__attribs
isinstancebytesindex_SharedFile__shortnamerG  	TypeError_SharedFile__longname)
r   ctimeatimewtimemtimefilesize	allocsizeattribs	shortnamelongnamer^   r^   r_   r   l  s,   


zSharedFile.__init__c                 C   r   r   )r  r   r^   r^   r_   	get_ctime  r   zSharedFile.get_ctimec                 C      |  | jS r   )_SharedFile__convert_smbtimer  r   r^   r^   r_   get_ctime_epoch     zSharedFile.get_ctime_epochc                 C   r   r   )r  r   r^   r^   r_   	get_wtime  r   zSharedFile.get_wtimec                 C   r  r   )r  r  r   r^   r^   r_   get_wtime_epoch  r  zSharedFile.get_wtime_epochc                 C   r   r   )r  r   r^   r^   r_   	get_mtime  r   zSharedFile.get_mtimec                 C   r  r   )r  r  r   r^   r^   r_   get_mtime_epoch  r  zSharedFile.get_mtime_epochc                 C   r   r   )r  r   r^   r^   r_   	get_atime  r   zSharedFile.get_atimec                 C   r  r   )r  r  r   r^   r^   r_   get_atime_epoch  r  zSharedFile.get_atime_epochc                 C   r   r   )r  r   r^   r^   r_   get_filesize  r   zSharedFile.get_filesizec                 C   r   r   )r  r   r^   r^   r_   get_allocsize  r   zSharedFile.get_allocsizec                 C   r   r   )r  r   r^   r^   r_   get_attributes  r   zSharedFile.get_attributesc                 C   
   | j t@ S r   )r  ATTR_ARCHIVEr   r^   r^   r_   
is_archive     
zSharedFile.is_archivec                 C   r  r   )r  ATTR_COMPRESSEDr   r^   r^   r_   is_compressed  r  zSharedFile.is_compressedc                 C   r  r   )r  ATTR_NORMALr   r^   r^   r_   	is_normal  r  zSharedFile.is_normalc                 C   r  r   )r  ATTR_HIDDENr   r^   r^   r_   	is_hidden  r  zSharedFile.is_hiddenc                 C   r  r   )r  ATTR_READONLYr   r^   r^   r_   is_readonly  r  zSharedFile.is_readonlyc                 C   r  r   )r  ATTR_TEMPORARYr   r^   r^   r_   is_temporary  r  zSharedFile.is_temporaryc                 C   r  r   )r  ATTR_DIRECTORYr   r^   r^   r_   is_directory  r  zSharedFile.is_directoryc                 C   r  r   )r  ATTR_SYSTEMr   r^   r^   r_   	is_system  r  zSharedFile.is_systemc                 C   r   r   )r  r   r^   r^   r_   get_shortname  r   zSharedFile.get_shortnamec                 C   r   r   )r  r   r^   r^   r_   get_longname  r   zSharedFile.get_longnamec                 C   s&   d| j  d | j d t| j d S )Nz!<SharedFile instance: shortname="z", longname="z", filesize=>)r  r  r|  r  r   r^   r^   r_   r}    rP  zSharedFile.__repr__c                 C   s0   | d? }| d@ }d}|d d |d@  d | S )Nr   l    g   Bg      @r-   l      gHz>r^   )r2  xr7  geo_cal_offsetr^   r^   r_   __convert_smbtime  s   zSharedFile.__convert_smbtimeN)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r}  staticmethodr  r^   r^   r^   r_   r~  k  s4    r~  c                   @      e Zd Zdd Zdd ZdS )
SMBMachinec                 C   rn  r   )_SMBMachine__nbname_SMBMachine__type_SMBMachine__comment)r   nbnamenbt_typert  r^   r^   r_   r     ru  zSMBMachine.__init__c                 C   ry  )Nz<SMBMachine instance: nbname="", type=rz  r{  )r  hexr  r  r   r^   r^   r_   r}    rP  zSMBMachine.__repr__Nr   r   r   r   r}  r^   r^   r^   r_   r        r  c                   @   r  )	SMBDomainc                 C   rn  r   )_SMBDomain__nbgroup_SMBDomain__type_SMBDomain__master_browser)r   nbgroupdomain_typemaster_browserr^   r^   r_   r     ru  zSMBDomain.__init__c                 C   ry  )Nz<SMBDomain instance: nbgroup="r  z, master browser="r{  )r  r  r  r  r   r^   r^   r_   r}    rP  zSMBDomain.__repr__Nr  r^   r^   r^   r_   r    r  r  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )NewSMBPacket))	Signatureu   "ÿSMB)CommandB=0)
ErrorClassr  	_reservedr  )	ErrorCode<H=0)Flags1r  )Flags2r  )PIDHighr  )SecurityFeatures8s=""Reservedr  )Tidz	<H=0xffff)Pidr  )Uidr  )Midr  )Dataz*:c                 K   sV   t j| fi | d| jv du rd| d< d| jv du rd| d< d|vr)g | d< d S d S )Nr  Fr   r  rZ  r  )r   r   fields)r   kargsr^   r^   r_   r     s   zNewSMBPacket.__init__c                 C   s\   t | d dkr|j| d< n|j| d d d d< t | | d d d d< | d | d S )Nr  r   r  
ParametersAndXCommand
AndXOffset)lencommandappend)r   r  r^   r^   r_   
addCommand  s
   zNewSMBPacket.addCommandc                 C   s2   | d t jt jt jfv o| d dko| d tjkS )Nr  r  r   r  )SMBSMB_COM_TRANSACTIONSMB_COM_READ_ANDXSMB_COM_READ_RAWra   r   r   r^   r^   r_   
isMoreData  s
   
zNewSMBPacket.isMoreDatac                 C   s   | d dko| d dkS )Nr  r?   r     r^   r   r^   r^   r_   isMoreProcessingRequired  s   z%NewSMBPacket.isMoreProcessingRequiredc                 C   s   | d |kr7| d dkr| d dkrdS |   rdS |  r dS td| d | d d>  | d | d	 tj@ | td
| d |f )Nr  r  r   r  r   SMB Library Errorr  r%   r  z2Unexpected answer from server: Got %d, Expected %d)r  r  ra   r  FLAGS2_NT_STATUSr*  )r   cmdr^   r^   r_   isValidAnswer  s   .zNewSMBPacket.isValidAnswerN)	r   r   r   	structurer   r  r  r  r  r^   r^   r^   r_   r    s    r  c                   @   s   e Zd ZdZdddZdS )
SMBCommand))	WordCountzB=len(Parameters)//2)_ParametersLengthz_-ParameterszWordCount*2)r  :)	ByteCount<H-Datar  r  Nc                 K   sV   t |t dkr|| _n|p|}tj| fd|i| |d u r)d| d< d| d< d S d S )Nr   rZ   r  r  )typer  r   r   )r   commandOrDatarZ  r  r^   r^   r_   r   %  s   zSMBCommand.__init__NN)r   r   r   r  r   r^   r^   r^   r_   r    s    r  c                   @   s"   e Zd ZdZdZdZdddZdS )AsciiOrUnicodeStructurer^   utf-8r   c                 K   s2   |t j@ r
| j| _n| j| _tj| fi | d S r   )r  FLAGS2_UNICODEUnicodeStructurer  AsciiStructurer   r   )r   flagsr  r^   r^   r_   r   6  s   

z AsciiOrUnicodeStructure.__init__Nr   )r   r   r   r	  r
  ENCODINGr   r^   r^   r^   r_   r  1  s
    r  c                   @   r)  )SMBCommand_ParametersNr+  r^   r^   r^   r_   r  =  r,  r  c                   @      e Zd ZdZdZdS )SMBAndXCommand_Parameters))r  zB=0xffr  )r  r  ))r  :=""N)r   r   r   	commonHdrr  r^   r^   r^   r_   r  @  s    r  c                   @      e Zd ZdZdS )SMBQueryFsAttributeInfo))FileSystemAttributes<L)MaxFilenNameLengthInBytesr  )LengthOfFileSystemNamez<L-FileSystemName)FileSystemNamer  Nr   r   r   r  r^   r^   r^   r_   r  N      r  c                   @      e Zd ZdZdZdZdS )SMBQueryFsInfoVolume))ulVolSerialNbr<L=0xABCDEFAA)
cCharCountz<B-VolumeLabel))VolumeLabelz))r!  uNr   r   r   r  r
  r	  r^   r^   r^   r_   r  V      r  c                   @   r  )FileFsSizeInformation)TotalAllocationUnits<q=148529400)AvailableAllocationUnits<q=14851044SectorsPerAllocationUnit<L=2BytesPerSectorz<L=512Nr  r^   r^   r^   r_   r&  c  r  r&  c                   @   r  )SMBQueryFsSizeInfo)r'  )TotalFreeAllocationUnitsr+  r,  r/  Nr  r^   r^   r^   r_   r1  l  r  r1  c                   @   r  )SMBFileFsFullSizeInformation)r'  )CallerAvailableAllocationUnitsr)  )ActualAvailableAllocationUnitsr)  )r-  z<L=15r/  Nr  r^   r^   r^   r_   r3  t  r  r3  c                   @   r  )SMBQueryFsVolumeInfo))VolumeCreationTime<q)SerialNumberr  )VolumeLabelSizez<L=len(VolumeLabel))r  z<H=0x10)r!  r  Nr  r^   r^   r^   r_   r6  }  r  r6  c                   @   r  )SMBQueryFsDeviceInfo))
DeviceType<L=0)DeviceCharacteristicsr=  Nr  r^   r^   r^   r_   r;    r  r;  c                   @   s   e Zd ZdZdZdZdS )SMBFindFileBothDirectoryInfo	NextEntryOffsetr=  	FileIndexr=  CreationTimer8  LastAccessTimer8  LastWriteTimer8  LastChangeTimer8  	EndOfFile<q=0AllocationSizerO  ExtFileAttributesr=  )FileNameLengthz<L-FileNameEaSizer=  ShortNameLength<B=0r  rZ  	ShortName24sFileNamer  Nr$  r^   r^   r^   r_   r?    s    r?  c                   @   r  )SMBFindFileIdFullDirectoryInfor@  )rT  rV  r  r=  FileIDrO  r`  r"  )rT  rV  rb  rc  r_  Nr$  r^   r^   r^   r_   ra    s    ra  c                   @   r  )SMBFindFileIdBothDirectoryInfor@  )rT  rV  rX  r[  r\  r  rc  re  )rT  rV  rX  r[  r\  r  rc  r_  Nr$  r^   r^   r^   r_   rf    s    
rf  c                   @   r  )SMBFindFileDirectoryInfo	rA  rC  rE  rG  rI  rK  rM  )rQ  z<q=1rR  rT  re  rT  r_  Nr$  r^   r^   r^   r_   rg    s    rg  c                   @   r  )SMBFindFileNamesInfo)rA  rC  ri  rj  Nr$  r^   r^   r^   r_   rk    s    rk  c                   @   r  )SMBFindFileFullDirectoryInforh  )rT  rW  r  re  )rT  rm  r_  Nr$  r^   r^   r^   r_   rl    s    rl  c                   @   r  )SMBFindInfoStandard)
)	ResumeKey<L=0xff)CreationDater  )rF  r  )LastAccessDater  )rH  r  )LastWriteDater  )rJ  r  rm  )rQ  <L=1)rS  r  )rU  z<B-FileNamere  )ru  r_  Nr$  r^   r^   r^   r_   rn  (  s    rn  c                   @   r  )SMBSetStandardInfo)
CreateDate<HrF  ry  rr  ry  rH  ry  rs  ry  rJ  ry  )r  z<B=10Nr  r^   r^   r^   r_   rv  @  r  rv  c                   @   r  )SMBSetFileDispositionInfo))DeletePending<BNr  r^   r^   r^   r_   r  L  r  r  c                   @   r  )SMBSetFileBasicInfo)rE  rG  rI  )
ChangeTimer8  rS  r  rb  Nr  r^   r^   r^   r_   r  R  r  r  c                   @   r  )SMBFileStreamInformation)rA  )StreamNameLengthr=  )
StreamSizerO  )StreamAllocationSizerO  )
StreamNamer  N)r   r   r   r  r^   r^   r^   r_   r  ]  r  r  c                   @   r  )SMBFileNetworkOpenInfo))rF  rO  rH  rO  rJ  rO  )r  rO  rP  rM  FileAttributesr=  rb  Nr  r^   r^   r^   r_   r  g  r  r  c                   @   r  )SMBSetFileEndOfFileInfo)rN  r8  Nr  r^   r^   r^   r_   r  t  r  r  c                   @   r  )SMBFindNext2_Parameters)SIDry  SearchCountry  InformationLevelry  )ro  r  Flagsry  re  r`  r#  Nr$  r^   r^   r^   r_   r  z      r  c                   @   r  )SMBFindNext2Response_Parameters)r  EndOfSearch<H=1EaErrorOffsetr  LastNameOffsetr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBFindNext2_Data)GetExtendedAttributesListLengthz_-GetExtendedAttributesListz'self["GetExtendedAttributesListLength"])GetExtendedAttributesListr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  ) SMBFindFirst2Response_Parameters)r  r  r  r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBFindFirst2_Parameters)SearchAttributesry  r  r  r  )SearchStorageTyper  r  r  Nr$  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBFindFirst2_Datar  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  ) SMBSetPathInformation_Parameters)r  )r  r  r  r  Nr$  r^   r^   r^   r_   r    r%  r  c                   @   r  )(SMBSetPathInformationResponse_Parametersr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  ) SMBSetFileInformation_Parameters)FIDry  r  )r  ry  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )(SMBSetFileInformationResponse_Parametersr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )"SMBQueryFileInformation_Parameters)r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )*SMBQueryFileInformationResponse_Parametersr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBQueryFileInformation_Data)GetExtendedAttributeListr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )*SMBQueryPathInformationResponse_Parametersr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )"SMBQueryPathInformation_Parameters)r  rb  r  r  Nr$  r^   r^   r^   r_   r    r%  r  c                   @   r  )SMBQueryPathInformation_Datar  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBQueryFileEaInfo)rV  Nr  r^   r^   r^   r_   r     r  r  c                   @   r  )SMBQueryFileBasicInfo)rE  rG  rI  rK  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBQueryFileStandardInfo)rQ  r8  r  NumberOfLinksr=  r  rZ  	Directoryr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBQueryFileAllInfo)rE  rG  rI  rK  r  rb  r  r  r  r  r  r  rV  rT  r_  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBNetShareEnum)	RAPOpcoder  	ParamDescr"  DataDescr"  	InfoLevelry  ReceiveBufferSizery  Nr  r^   r^   r^   r_   r  /  r  r  c                   @   r  )SMBNetShareEnumResponse)Statusr  Convertr  )EntriesReturnedry  )EntriesAvailablery  Nr  r^   r^   r^   r_   r  8  r  r  c                   @   r  )NetShareInfo1))NetworkName13s)PadrZ  )Typer  )RemarkOffsetLowr  )RemarkOffsetHighr  Nr  r^   r^   r^   r_   r  @  r  r  c                   @   r  )SMBNetServerGetInfoResponser  r  )TotalBytesAvailablery  Nr  r^   r^   r^   r_   r  J  r  r  c                   @   r  )SMBNetServerInfo1))
ServerName16s)MajorVersionzB=5)MinorVersionr  )
ServerType<L=3)ServerCommentLowr  )ServerCommentHighr  Nr  r^   r^   r^   r_   r  Q      r  c                   @   r  )SMBNetShareGetInfo)r  r  r  )	ShareNamer"  r  r  Nr  r^   r^   r^   r_   r  ]  r  r  c                   @   r  )SMBNetShareGetInfoResponser  Nr  r^   r^   r^   r_   r  g  r  r  c                   @   r  )r  ))Keyr=  )CIDr  )SequenceNumberr  Nr  r^   r^   r^   r_   r  o  r  r  c                   @   r  )SMBQueryInformation2_Parameters)Fidry  Nr  r^   r^   r^   r_   r  w  r  r  c                   @   r  )'SMBQueryInformation2Response_Parameters)	rw  rz  r{  r|  r}  r~  )FileDataSizer  )FileAllocationSizer  )r  r  Nr  r^   r^   r^   r_   r  |  r  r  c                   @   r  )SMBSessionSetupAndX_Parameters))	MaxBufferry  MaxMpxCountry  )VCNumberry  
SessionKeyr  )AnsiPwdLengthry  )UnicodePwdLengthry  )r  r=  Capabilitiesr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )'SMBSessionSetupAndX_Extended_Parameters))MaxBufferSizery  r  )VcNumberry  r   SecurityBlobLengthry  rb  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBSessionSetupAndX_Data)r  z	_-AnsiPwdzself["AnsiPwdLength"]r  z_-UnicodePwdzself["UnicodePwdLength"]AnsiPwdr  
UnicodePwdr  )Accountz=""PrimaryDomainr  NativeOSr  NativeLanManr  )r  r  r  r  )r  u=""r  r  r  r  r  r  Nr   r   r   r
  r	  r^   r^   r^   r_   r    s    r  c                   @   r  )!SMBSessionSetupAndX_Extended_Datar
  z_-SecurityBlobzself["SecurityBlobLength"]SecurityBlobr  r  r  )r!  r"  r  r  Nr  r^   r^   r^   r_   r        r  c                   @   r  )&SMBSessionSetupAndXResponse_Parameters))Actionry  Nr  r^   r^   r^   r_   r%    r  r%  c                   @   r  )0SMBSessionSetupAndX_Extended_Response_Parameters)r&  r  r	  Nr  r^   r^   r^   r_   r'    r  r'  c                   @   r  ) SMBSessionSetupAndXResponse_Data)r  r  r  )r  r  r  Nr  r^   r^   r^   r_   r)        r)  c                   @   s   e Zd ZdZdZdd ZdS )*SMBSessionSetupAndX_Extended_Response_Datar   )r!  r"  )PadLen_-Padz01 if (len(self["SecurityBlob"]) % 2 == 0) else 0r  r  r  r  c                 C   s2   | j | jkrt| d d dkrd| d< t| S )Nr#  r   r   r  r  )r  r	  r  r  getDatar   r^   r^   r_   r/    s   
z2SMBSessionSetupAndX_Extended_Response_Data.getDataN)r   r   r   r
  r	  r/  r^   r^   r^   r_   r+    s    r+  c                   @   r  )SMBTreeConnect_Parametersr^   Nr  r^   r^   r^   r_   r0    r  r0  c                   @   r  )SMBTreeConnect_Data))
PathFormat"Pathr"  )PasswordFormatr3  )Passwordr"  )ServiceFormatr3  Servicer"  Nr  r^   r^   r^   r_   r1    r  r1  c                   @   r  )SMBTreeConnectAndX_Parameters)r  r  )PasswordLengthry  Nr  r^   r^   r^   r_   r;    r  r;  c                   @   r  )%SMBTreeConnectAndXResponse_Parameters))OptionalSupportr  Nr  r^   r^   r^   r_   r>    r  r>  c                   @   r  )-SMBTreeConnectAndXExtendedResponse_Parameters))r?  r  )MaximalShareAccessRights<L=0x1fffff)GuestMaximalShareAccessRightsrB  Nr  r^   r^   r^   r_   r@    r  r@  c                   @   r  )SMBTreeConnectAndX_Data))_PasswordLength
_-Passwordzself["_PasswordLength"]r7  r  r4  r9  ))rE  rF  z=self["_PasswordLength"] if self["_PasswordLength"] > 0 else 1rG  )r5  r#  r9  Nr  r^   r^   r^   r_   rD    r$  rD  c                   @   r  )SMBTreeConnectAndXResponse_Data)r9  r,  r-  zself["PadLen"]r.  )NativeFileSystemr"  )r9  rI  r.  )rJ  r#  Nr  r^   r^   r^   r_   rH  (  r*  rH  c                   @   r  )SMBNtCreateAndX_Parameters)r  )rU  ry  )CreateFlagsr  )RootFidr=  )
AccessMaskr  )AllocationSizeLor=  )AllocationSizeHir=  r  )ShareAccessr  )Dispositionrt  )CreateOptionsr  )Impersonationr.  )SecurityFlagszB=3Nr  r^   r^   r^   r_   rK  7  r  rK  c                   @   r  )"SMBNtCreateAndXResponse_Parameters)OplockLevelr  r  CreateActionr  
CreateTimerO  r  r  rL  rO  r  z<L=0x80rP  rM  FileTyper  IPCStater  IsDirectoryBNr  r^   r^   r^   r_   rV  H  r  rV  c                   @   r  )*SMBNtCreateAndXExtendedResponse_Parameters)rW  r  rY  r[  r  r  r]  r^  rP  rM  r_  ra  rc  )
VolumeGUIDr  )	FileIdLowr=  )
FileIdHighr=  )MaximalAccessRightsz<L=0x12019b)GuestMaximalAccessRightsz<L=0x120089Nr  r^   r^   r^   r_   rf  Z  r  rf  c                   @   r  )SMBNtCreateAndX_Datar  )r  re  r  Nr  r^   r^   r^   r_   rl  q  s    rl  c                   @   r  )SMBOpenAndX_Parameters)r<  DesiredAccessr  r  r  r  r  )rF  r=  )OpenModer  )rQ  r=  )r  r  Nr  r^   r^   r^   r_   rn  {  r  rn  c                   @   r)  )SMBOpenAndX_DataNr+  r^   r^   r^   r_   rt    r,  rt  c                   @   r  )SMBOpenAndXResponse_Parameters)
r  r  rr  
LastWritenr=  FileSizer=  GrantedAccessr  r_  ra  r(  )	ServerFidr=  r  r  Nr  r^   r^   r^   r_   ru    r  ru  c                   @   r  )SMBWrite_Parameters)r  Country  Offsetr  	Remainingry  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWriteResponse_Parameters)r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWrite_Data))BufferFormatz<B=1
DataLengthr   r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWriteAndX_Parameters)	rv  )r  r=  r  rp  	WriteModez<H=8r  r  DataLength_Hir  )r  r  
DataOffsetr  
HighOffsetr=  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWriteAndX_Data_Short))_PadLenr-  zself["DataOffset"] - 59r  r  r  z_-Datazself["DataLength"]r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWriteAndX_Data))r  r-  zself["DataOffset"] - 63r  r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWriteAndX_Parameters_Short)r  r  r  r  r  r  r  ry  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWriteAndXResponse_Parameters)r  )	Availablery  rb  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBWriteRaw_Parameters)	r  r  r~  r  Timeoutr=  )r  r  )
_reserved2r=  r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBRead_Parameters)r  r  r  )r  z<H=CountNr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBReadResponse_Parameters))r  r  )r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBReadResponse_Data))r  z<B=0x1r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBReadRaw_Parameters)r  r  MaxCountry  MinCount<H=MaxCountr  r~  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBNTTransaction_Parameters)MaxSetupCountrZ  	Reserved1r  TotalParameterCountr  TotalDataCountr  )MaxParameterCountz<L=1024)MaxDataCountz<L=65504ParameterCountr  ParameterOffsetr  	DataCountr  r  r  
SetupCountz<B=len(Setup)//2)Functionr  SetupLengthz_-SetupzSetupCount*2Setupr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )#SMBNTTransactionResponse_Parameters))r  z3s=""r  r  r  r  )ParameterDisplacementr=  r  r  )DataDisplacementr=  r  rZ  r  r  Nr  r^   r^   r^   r_   r  $  r  r  c                   @   r  )SMBNTTransaction_Data)
Pad1Lengthz_-Pad1zself["Pad1Length"]Pad1r  )NT_Trans_ParametersLengthz_-NT_Trans_Parametersz!self["NT_Trans_ParametersLength"])NT_Trans_Parametersr  
Pad2Lengthz_-Pad2zself["Pad2Length"]Pad2r  )NT_Trans_DataLengthz_-NT_Trans_Datazself["NT_Trans_DataLength"])NT_Trans_Datar  Nr  r^   r^   r^   r_   r  4  r  r  c                   @   r  )SMBNTTransactionResponse_Datar  r  )Trans_ParametersLength_-Trans_Parameterszself["Trans_ParametersLength"]Trans_Parametersr  r  r  )Trans_DataLength_-Trans_Datazself["Trans_DataLength"]
Trans_Datar  Nr  r^   r^   r^   r_   r  @  r  r  c                   @   r  )#SMBTransaction2Secondary_Parameters)	r  ry  r  ry  r  ry  r  ry  )r  ry  r  ry  r  ry  r  r  r  Nr  r^   r^   r^   r_   r  N  r  r  c                   @   r  )SMBTransaction2Secondary_Datar  Nr  r^   r^   r^   r_   r  [  r  r  c                   @   r  )SMBTransaction2_Parametersr  r  )r  z<H=1024)r  z<H=65504r  )r  rZ  r<  r  )	Reserved2r  r  r  r  r  r  )	Reserved3rZ  r  r  Nr  r^   r^   r^   r_   r  j  r  r  c                   @   r  )"SMBTransaction2Response_Parameters)r  r  r  r  r  r  r  r  r  r  r  r  rZ  r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBTransaction2_Datar  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBTransaction2Response_Datar  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBQueryInformation_Data)r  zB=4re  )r  r  Nr  r^   r^   r^   r_   r        r  c                   @   r  )&SMBQueryInformationResponse_Parameters))r  ry  )rJ  r  )rz  r  )r  z"0123456789Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBTransaction_Parametersr  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )!SMBTransactionResponse_Parameters)r  r  r  r  r  r  r  r  r  )r  r  r  r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBTransaction_SData))Namer"  r  r  r  r  r  r  )rm  )r  r#  r  r  r  r  Nr  r^   r^   r^   r_   r    r$  r  c                   @   r  )SMBTransaction_Data))
NameLengthz_-Name)r  r  r  r  r  r  Nr  r^   r^   r^   r_   r    r  r  c                   @   r  )SMBTransactionResponse_Data)r  r  r  r  Nr  r^   r^   r^   r_   r  	  r  r  c                   @   r  )SMBReadAndX_Parameters)r  r  r  r  )r  z<L=0x0r  r  r  Nr  r^   r^   r^   r_   r  	  r  r  c                   @   r  )SMBReadAndX_Parameters2)r  r  r  r  )r  z<L=0xffffffffr   Nr  r^   r^   r^   r_   r  	  r  r  c                   @   r  )SMBReadAndXResponse_Parameters)r  )DataModer  r~  r  r  )DataCount_Hir  )r  z6s=""Nr  r^   r^   r^   r_   r  !	  r  r  c                   @   r  )SMBEcho_Datar  Nr  r^   r^   r^   r_   r  -	  r  r  c                   @   r  )SMBEcho_Parameters))	EchoCountry  Nr  r^   r^   r^   r_   r  2	  r  r  c                   @   r  )SMBEchoResponse_Datar  Nr  r^   r^   r^   r_   r	  7	  r  r	  c                   @   r  )SMBEchoResponse_Parameters))r  r  Nr  r^   r^   r^   r_   r
  <	  r  r
  c                   @   r  )*SMBQueryInformationDiskResponse_Parameters))
TotalUnitsry  )BlocksPerUnitry  )	BlockSizery  )	FreeUnitsry  r  Nr  r^   r^   r^   r_   r  B	  r  r  c                   @   r  )SMBLogOffAndXr^   Nr  r^   r^   r^   r_   r  M	  r  r  c                   @   r  )SMBClose_Parameters)r  )Timer=  Nr  r^   r^   r^   r_   r  Q	  r  r  c                   @   r  )SMBFlush_Parameters)r  Nr  r^   r^   r^   r_   r  X	  r  r  c                   @   r  )SMBCreateDirectory_Datar  <B=4)DirectoryNamer"  r  )r  r#  Nr  r^   r^   r^   r_   r  ^	  r  r  c                   @   r  )SMBDelete_Data)r  re  )r  r  Nr  r^   r^   r^   r_   r  i	  r  r  c                   @   r  )SMBDelete_Parametersr  Nr  r^   r^   r^   r_   r  s	  r  r  c                   @   r  )SMBDeleteDirectory_Datar  r  Nr  r^   r^   r^   r_   r  y	  r  r  c                   @   r  )SMBCheckDirectory_Datar  r  Nr  r^   r^   r^   r_   r  	  r  r  c                   @   r  )SMBRename_Parametersr  Nr  r^   r^   r^   r_   r  	  r  r  c                   @   r  )SMBRename_Data)BufferFormat1r  )OldFileNamer"  BufferFormat2r  )NewFileNamer"  )r!  )r#  r#  r$  )r  r  )r&  r#  Nr  r^   r^   r^   r_   r   	  r*  r   c                   @   r  )SMBOpen_Parameters)ro  rq  Nr  r^   r^   r^   r_   r'  	  r  r'  c                   @   r  )SMBOpen_Data)FileNameFormatr3  re  )r)  r  Nr  r^   r^   r^   r_   r(  	  r  r(  c                   @   r  )SMBOpenResponse_Parameters)rv  rr  rw  ry  r{  Nr  r^   r^   r^   r_   r+  	  r  r+  c                   @   r  )SMBExtended_Security_Parameters)DialectIndexry  )SecurityModer  r  )MaxNumberVcsry  )r  r  )
MaxRawSizer  r   r  )LowDateTimer  )HighDateTimer  )ServerTimeZonery  )ChallengeLengthr  Nr  r^   r^   r^   r_   r,  	  r  r,  c                   @   r  )SMBExtended_Security_Data))
ServerGUIDr  r"  Nr  r^   r^   r^   r_   r6  	  r  r6  c                   @   r  )SMBNTLMDialect_Parametersr-  Nr  r^   r^   r^   r_   r8  	  r  r8  c                   @   s"   e Zd ZdZdddZdd ZdS )	SMBNTLMDialect_Data))r5  z_-Challengezself["ChallengeLength"])	Challenger  )Payloadr  )
DomainName_)r  r=  Nr   c                 C   s   t | || d S r   )r   r   )r   rZ  	alignmentr^   r^   r_   r   	  s   zSMBNTLMDialect_Data.__init__c                 C   s    t | | d| d< d| d< d S )Nr  r<  r  )r   
fromString)r   rZ  r^   r^   r_   r?  	  s   zSMBNTLMDialect_Data.fromString)Nr   )r   r   r   r  r   r?  r^   r^   r^   r_   r9  	  s    
r9  c                   @   s  e Zd ZG dd deZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLd$ZMdZNdZOdZPdZQd
ZRdZSd	ZTdZUdZVdZWdZXdZYdZZdZ[dZ\dZ]dZ^dZ_dZ`dZadZbdKZcdLZddZedMZfdNZgdZhdZidZjdZkd:ZldZmdZndZodLZpdOZqdPZrdMZsdNZtdZudZvdQZwdZxdZydZzdZ{dZ|dZ}dRe~jdSdRddRdRfdTdUZedVdW ZdXdY ZdZd[ Zd\d] Zd^d_ Zd`da Zdbdc ZddddeZdfdg Zdhdi Zedjdk Zdldm Zdndo Zdpdq Zdrds Zdtdu Zdvdw Zdxdy Zedzd{ Zd|d} Zd~d Zdd Zedd ZdddZdefddZdd Zdd ZdRedRfddZeZedd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdddZdd ZefddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZddÄ Zddń ZddǄ ZddɄ Zdd˄ Zddd̈́ZdddτZddф Zddӄ ZÐdddՄZĐdddׄZŐdddلZƐdddۄZǐddd݄ZȐddd߄ZɐdddZʐdddZːdddZ̐dddZdd ZdRdReeB eeeB eB eB eB eB eB fddZdd ZڐdddZeddRefddZeddRefddZeddRefddZߐdddZdddZdddZdddZdd dZdddZdd ZdddZddd	Zdd
dZdRS (  r  c                   @   r)  )zSMB.HostnameValidationExceptionNr+  r^   r^   r^   r_   HostnameValidationException	  r,  r@  r   r   r   r   r"   r0   r1   r2   r%   r3   r4   r5   r6   r7   r8   r9   r!   r:   r;   r<   r=   rC   rD   rE   rF   rG   rH   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   -   .   /   r.   rr   rb   r   rs   5   p   q   r   s   t   u   r                                                   r   r&   r+   rU   r)   r*   r   N  c
                 C   s@  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| _*t+j,t+j-B | _.t+j/t+j0B t+j1B | _2|d u rd| _3n|| _3|dkr|dkr|| _|d u rd| _n|| _|d u r|st45 }|6d	}
|
d
kr|d |
 }|rt78|||||| j3| _d S t79|||||| j3| _| :  | jd t+j;@ t+j<kr| =dd d S d S || _| j:|	d | jd t+j;@ t+j<kr| =dd d S d S )Nr   r  TF    <   r[  z
*SMBSERVER.r  r/  )	negPacket)>_uid_SMB__server_name_SMB__client_name_SMB__server_os_SMB__server_os_major_SMB__server_os_minor_SMB__server_os_build_SMB__server_lanman_SMB__server_domain_SMB__server_dns_domain_name_SMB__server_dns_host_nameupper_SMB__remote_name_SMB__remote_host_SMB__isNTLMv2_dialects_parameters_dialects_data_doKerberos_SMB__userName_SMB__password_SMB__domain_SMB__lmhash_SMB__nthash_SMB__aesKey	_SMB__kdc	_SMB__TGT	_SMB__TGS_dialect_data_dialect_parameters_action_sessencrypt_passwordstidfid_strict_hostname_validation_validation_allow_absent_accepted_hostname_SignSequenceNumber_SigningSessionKey_SigningChallengeResponse_SignatureEnabled_SignatureVerificationEnabled_SignatureRequiredr  FLAGS1_PATHCASELESSFLAGS1_CANONICALIZED_PATHS_SMB__flags1FLAGS2_EXTENDED_SECURITYr  FLAGS2_LONG_NAMES_SMB__flags2_SMB__timeoutsocketgethostnamefindr   NetBIOSUDPSessionNetBIOSTCPSessionneg_sessionSECURITY_SHARE_MASKSECURITY_SHARE_SHARElogin)r   remote_nameremote_hostmy_name	host_type	sess_porttimeoutUDPsessionr_  ir^   r^   r_   r   
  s   


zSMB.__init__c                   C   s   dS )NFr^   r^   r^   r^   r_   ntlm_supported
     zSMB.ntlm_supportedc                 C   r   r   )rq  r   r^   r^   r_   getKerberos
  r   zSMB.getKerberosc                 C   r   r   rl  r   r^   r^   r_   get_remote_name
  r   zSMB.get_remote_namec                 C   s
   || _ dS )NTr  )r   rr  r^   r^   r_   set_remote_name  s   zSMB.set_remote_namec                 C   rn  r   )r  r  r  )r   validateaccept_emptyhostnamer^   r^   r_   set_hostname_validation  ru  zSMB.set_hostname_validationc                 C   r   r   )rm  r   r^   r^   r_   get_remote_host
  r   zSMB.get_remote_hostc                 C   s   | j | jfS r   r  r  r   r^   r^   r_   	get_flags  r  zSMB.get_flagsc                 C   s$   |d ur|| _ |d ur|| _d S d S r   r  )r   flags1flags2r^   r^   r_   	set_flags  s
   
zSMB.set_flagsc                 C   s   | j }|| _ |S r   r  r   r  prev_timeoutr^   r^   r_   set_timeout  s   zSMB.set_timeoutc                 C   r   r   r  r   r^   r^   r_   get_timeout  r   zSMB.get_timeoutc              	   c   s0    |  |}zd V  W |  | d S |  | w r   )r  r  r^   r^   r_   use_timeout  s
   
zSMB.use_timeoutc                 C   r   r   )r~  r   r^   r^   r_   get_session&  r   zSMB.get_sessionc                 C   r   r   )r  r   r^   r^   r_   get_tid)  r   zSMB.get_tidc                 C   r   r   )r  r   r^   r^   r_   get_fid,  r   zSMB.get_fidc                 C   r  r   )r}  SMB_SETUP_GUESTr   r^   r^   r_   isGuestSession/  r  zSMB.isGuestSessionc                 C   r   r   )rn  r   r^   r^   r_   doesSupportNTLMv22  r   zSMB.doesSupportNTLMv2c                 C   s   | j r| j   d | _ d S d S r   )r~  closer   r^   r^   r_   close_session5  s   

zSMB.close_sessionc                 C   s   | j | j}t| dS )NrZ  )r~  recv_packetr  r  get_trailer)r   rr^   r^   r_   recvSMB:  s   zSMB.recvSMBc              
   C   s   t d| d d \
}}}}}}}}	}
}|| |k s||
 |k r"d}nd}|d |d  }|	d |d  }	|| dd|d   ||||  ||	|	|  fS )Nz<HHHHHHHHHBr<   r   r   7   r   r=   )r   )paramsrZ  totparamcnt
totdatacntr=  paramcntparamoffsetparamdsdatacnt
dataoffsetdatadssetupcnthas_morer^   r^   r_   __decode_trans>  s   &4zSMB.__decode_transc                 C   sx   t d| j|d< t }|| || ||  | d d |d< | jr3|  jd7  _d S |  jd7  _d S )Nr8  r  r%   r   r   )r   r  hashlibmd5updater/  digestr  )r   r   signingSessionKeysigningChallengeResponser8  r^   r^   r_   signSMBJ  s   

zSMB.signSMBc                 C   s:   |d }|  ||| | jdur|  jd8  _|d |kS )Nr  Tr   )r  r  r  )r   r   r  r  	signaturer^   r^   r_   checkSignSMBl  s
   
zSMB.checkSignSMBc                 C   s|   | j |d< t d@ |d< |d  | jO  < |d  | jO  < | jr4|d  tjO  < | || j	| j
 | j|  d S )Nr  r   r  r  r  )r`  osgetpidr  r  r  r  FLAGS2_SMB_SECURITY_SIGNATUREr  r  r  r~  send_packetr/  )r   smbr^   r^   r_   sendSMBv  s   
zSMB.sendSMBc                 C   sf   	 |   r2|  |kr/|  dkr|  dkrdS td|  |  d>  |  |  tj@ 	 dS q)Nr   r   r  r%   )	rawDataget_commandr   r   ra   get_reserved
get_flags2r  r  )r[  r  r^   r^   r_   r    s   ,zSMB.isValidAnswerTc                    s    fdd}|d u rGt  }ttj}  d }|du r& j|tjB d n
 j|tj @ d d|d< ||  | 	  	 }||S |t |dS )	Nc              
      sj  | d t j@ r  jt jO  _| t jrt| d d }t|d  _t  _	 jd  j	d< z
 j	
|d  W n ttfyV } ztd| tddd	d
d d }~ww  jd t j@ rt|d  _z	t|d  _	W n ttfy } ztd| tddd	d
d d }~ww  jd t j@ rd _d
S  j	d d ur j	d  _ jd dkrtdd
S dS )Nr  r  r   r  r5  z%Negotiate response parsing failed: %sz7Connection failed: invalid or truncated server responser7   r  r   r  z7Negotiate extended security response parsing failed: %sr/  Tr  r.  r   z&Remote server does not know NT LM 0.12)r  r  r  r  SMB_COM_NEGOTIATEr  r8  ro  r9  rp  r?  rG  StructErrorr   debugra   CAP_EXTENDED_SECURITYr,  r6  SECURITY_SIGNATURES_REQUIREDr  ra  r*  )r  sessionResponseer   r^   r_   parsePacket  s@   z$SMB.neg_session.<locals>.parsePacketr   T)r  s   NT LM 0.12 r  r  )
r  r  r  r  r  r  r  r  r  r  )r   extended_securityr_  r  r  
negSessionr  r^   r   r_   r    s   ,


zSMB.neg_sessionr  c                 C   s   t d |r| jd dkr| t|}ts#trt|}nt	dt
 }ttj}t |d< t |d< | |d d< ||d d< ||d d	< || | | 	 |  }|tjrb|d S |d S )Nz[MS-CIFS] This is an original Core Protocol command.This command has been deprecated.Client Implementations SHOULD use SMB_COM_TREE_CONNECT_ANDXr5  r   z#SMB: Can	 conver path from unicode!r  r  r5  r7  r:  r   r  )r   warningro  get_ntlmv1_responser   compute_lmhashunicode_supportunicode_convertr|  r   r  r  r  SMB_COM_TREE_CONNECTr0  r1  rk  r  r  r  r  )r   pathpasswordservicer  treeConnectr^   r^   r_   tree_connect  s,   






zSMB.tree_connectc                 C   r   r   r`  r   r^   r^   r_   get_uid  r   zSMB.get_uidc                 C   
   || _ d S r   r  )r   uidr^   r^   r_   set_uid  r  zSMB.set_uidc                 C   s  |r| j d dkr| t|}nd}ts!trt|}ntd|d u r)t }n|}|	dd }zt
|  dddt
jd \}}}}}|d }	W n tyX   |  }	Y nw d|	 d | }| jtj@ rn| d	n|}ttj}
t |
d
< t| jd|
d< t||
d
 d< ||
d d< ||
d d< ||
d d< | jtj@ rd|
d d< ||
 | | 	 |  }|tjr|d | _| jS |d | _| jS )Nr5  r   r  z$SMB: Can	 convert path from unicode!\r  rd   \\utf-16ler  r  r  r=  r7  r5  r:  r  r   r  )ro  r  r   r  r  r  r|  r   r  splitr  getaddrinfor  IPPROTO_TCPr  r  r  rk  encoder  SMB_COM_TREE_CONNECT_ANDXr;  rD  r  r  r  r  r  r  )r   r  r  r  
smb_packetr  sharer=  sockaddrr  r  r^   r^   r_   tree_connect_andx  sN   
&





zSMB.tree_connect_andxc                   C   s   t S r   )SMB_DIALECTr^   r^   r^   r_   
getDialect@  r  zSMB.getDialectc                 C   r   r   )ra  r   r^   r^   r_   get_server_nameD  rK  zSMB.get_server_namec                 C   r   r   )rb  r   r^   r^   r_   get_client_nameH  r   zSMB.get_client_namec                 C   r   r   )r  r   r^   r^   r_   get_session_keyK  r   zSMB.get_session_keyc                 C   s   d| _ d| _|| _d S )NTr   )r  r  r  )r   r   r^   r^   r_   set_session_keyN  ru  zSMB.set_session_keyc                 C   s   d| j jv r| j d S d S Nr:  )rp  r  r   r^   r^   r_   get_encryption_keyS  s   
zSMB.get_encryption_keyc                 C   sN   | j d }|dK }|| j d O }|d8 }|d }tjj|tjjd}|dS )Nr3  r   r2  r.  r-  )tzz%a, %d %b %Y %H:%M:%S GMT)ro  datetimefromtimestamptimezoneutcstrftime)r   	timestampr9  r^   r^   r_   get_server_timeY  s   

zSMB.get_server_timec                 C   s4   t  }||d< |ttj | | |   d S )Nr  )r  r  r  r  SMB_COM_TREE_DISCONNECTr  r  )r   r  r  r^   r^   r_   disconnect_treeb  s
   
zSMB.disconnect_treec           	      C   s   | dd}| jtj@ r|dn|}t }||d< ttj}t |d< ||d d< ||d d< t	t
B tB |d d< t| jd	|d
< ||d
 d< || | | |  }|tjr{t|d
 d }t|d }|d |d |d |d |d fS d S )N/r  r  r  r  rp  rs  r  r  r  r`  r   r  r  rx  rz  r|  )replacer  r  r  r  r  r  SMB_COM_OPENr'  r  r  r  r(  r  r  r  r  r+  	r   r  filename	open_modedesired_accessr  openFileopenFileResponseopenFileParametersr^   r^   r_   openk  s0   



zSMB.openc           	   
   C   s*  | dd}| jtj@ r|dn|}t }||d< ttj}t |d< ||d d< ||d d< t	t
B tB |d d< t| jd	|d
< ||d
 d< | jtj@ rTd|d
 d< || | | |  }|tjrt|d
 d }t|d }|d |d |d |d |d |d |d |d |d f	S d S )Nr   r  r  r  r  rp  rs  r  r  r  r`  r   r  r  r  rx  rz  r|  r`  rb  r&  r}  )r!  r  r  r  r  r  r  SMB_COM_OPEN_ANDXrn  r  r  r  rt  r  r  r  r  ru  r#  r^   r^   r_   	open_andx  s<   



zSMB.open_andxc                 C   s^   t  }||d< ttj}t |d< ||d d< || | | |  }|tjr-dS dS )Nr  r  r  r   r   )	r  r  r  SMB_COM_CLOSEr  r  r  r  r  )r   r  r  r  	closeFiler^   r^   r_   r    s   



z	SMB.closec           	      C   s   t  }||d< ttj}t |d< t |d< ||d d< t||d d< t||d d< t||d d< dt| t| |d d	< t||d d
< |d d	 t| |d d< ||d d< ||d d< ||d d< |rrt|d d< || | 	| d S )Nr  r  r  r  r  r  r  ?   r  r  r  r  r  r  r  )
r  r  r  r  r  r  r  TRANS_NO_RESPONSEr  r  )	r   r  setuprr  paramrZ  noAnswerr  transCommandr^   r^   r_   
send_trans  s&   



zSMB.send_transc                 C   s  t  }||d< td|}ttj}t |d< | jd |d d< t |d< ||d d< t||d d< t||d d	< t|d
krWddt| d  d }	d|	 }
|
|d d< nd|d d< d
}	t||d d< dt| t| |	 |d d< t|d
krddt| |	 t| d  d }d| |d d< nd|d d< d
}t||d d< |d d t| | |d d< ||d d< ||d d< ||d d< |	| | 
| d S )Nr  ry  r  r  r  r  r  r  r  r   r"   >      ÿr  r  r  r  r  r  r  r  r  r  )r  r   r  r  SMB_COM_TRANSACTION2r  ro  r  r  r  r  )r   r  r1  rr  r2  rZ  r  r  r4  padLenpadBytespad2Lenr^   r^   r_   send_trans2  s<   



 $ 
zSMB.send_trans2c              	   C   sf   |  |tjdtd||d |  }|tjr1t|d d }t|d }|d |d  d  S d S )Nr  <HHr  r  r   r  r  )	r<  r  TRANS2_QUERY_FILE_INFORMATIONr   r  r  r8  r  r  )r   r  r  fileInfoClassresptrans2Responsetrans2Parametersr^   r^   r_   query_file_info  s   zSMB.query_file_infoc           	      C   s   t  }||d< ||d< d|d< | |tjd| |  |  }|tjr@t|d d }t	|d }|d |d  d  S d S )	Nr  r  r   r  r  r  r  r  )
r  r<  r  TRANS2_SET_FILE_INFORMATIONr/  r  r  r8  r  r  )	r   r  r  r?  file_info_dataSMBTrans2SetFileInfo_Paramsr@  rA  rB  r^   r^   r_   set_file_info  s   zSMB.set_file_infoc           	      C   sn   | j d tj@ r| jdu rd}n| j d d@ }|}||k r5| ||||}|| |t|7 }||k sd S d S )Nr  F  r   )ro  r  CAP_LARGE_READXr  	read_andxr  )	r   r  r  offsetdatasizecallbackmax_buf_sizeread_offsetrZ  r^   r^   r_   __nonraw_retr_file$  s   zSMB.__nonraw_retr_filec                 C   s~   | j d tj@ r| jdu rd}n| j d d@ }|}	 ||}|s"d S | ||||}	t|	d d }
t|
d	 }||d
 7 }q)Nr  FrH  r  rI  r   r  r   r  r  )ro  r  CAP_LARGE_WRITEXr  
write_andxr  r  )r   r  r  rL  rM  rN  rO  write_offsetrZ  r  writeResponsewriteResponseParametersr^   r^   r_   __nonraw_stor_file1  s   zSMB.__nonraw_stor_filec                 C   r   r   )rh  r   r^   r^   r_   get_server_domainB  r   zSMB.get_server_domainc                 C   r   r   )ri  r   r^   r^   r_   get_server_dns_domain_nameE  r   zSMB.get_server_dns_domain_namec                 C   r   r   )rj  r   r^   r^   r_   get_server_dns_host_nameH  r   zSMB.get_server_dns_host_namec                 C   r   r   rc  r   r^   r^   r_   get_server_osK  r   zSMB.get_server_osc                 C   r   r   )rd  r   r^   r^   r_   get_server_os_majorN  r   zSMB.get_server_os_majorc                 C   r   r   )re  r   r^   r^   r_   get_server_os_minorQ  r   zSMB.get_server_os_minorc                 C   r   r   )rf  r   r^   r^   r_   get_server_os_buildT  r   zSMB.get_server_os_buildc                 C   r  r   r[  )r   r  r^   r^   r_   set_server_osW  r  zSMB.set_server_osc                 C   r   r   )rg  r   r^   r^   r_   get_server_lanmanZ  r   zSMB.get_server_lanmanc                 C   s   | j d tj@ tjkS )Nr/  )ro  r  r  SECURITY_SHARE_USERr   r^   r^   r_   is_login_required]  s   zSMB.is_login_requiredc                 C   r   r   )r  r   r^   r^   r_   is_signing_requiredc  r   zSMB.is_signing_requiredc                 C   s   | j d }t||S r  )rp  r   r  )r   r   	challenger^   r^   r_   r  f  s   
zSMB.get_ntlmv1_responsec                 C   st   | j dkr| js| dd S | j  | j kr6| j | j kr8| d| j | j  | j f d S d S )Nr  zLHostname was not supplied by target host and absent validation is disallowedz?Supplied hostname %s does not match reported hostnames %s or %s)ra  r  r@  lowerr  rj  r   r^   r^   r_   perform_hostname_validationj  s   

(zSMB.perform_hostname_validationc
           -   
   C   s  ddl m}
m}m}m} ddlm}m} ddlm	} ddl
m}m}m} ddlm}m} dd l}| j}|tj@ r@||tjA @ | _|dksH|dkrkt|d rRd	| }t|d r\d	| }z
t|}t|}W n   Y || _|| _|| _|| _|| _|| _|| _|| _|	| _d
| _ |||j!j"j#d}|d u r|	d u r||||||||\}}}}n|d }|d }|d }|	d u r|d| j$ |j!j%j#d}|||||||\}}}}n|	d }|	d }|	d }t& }| j'r|d  tj(O  < t)tj*} t+ | d< t, | d< d| d d< d| d d< d| d d< d| d d< tj-tj.B tj/B tj0B tj1B | d d< t2 }!t3d g|!d< |j4|| dd }| }"|"5|d  |
 }#d|#d< t6|j7jj#|#d < t8 }$|9|$|#d!< ||#d|"j: | }%d|%d"< ||%d#< ||%d$|j; |j<|j=j>}&|&j?|%d%< |:|&|%d&< |@|%}'|A|d'|'d }(tB|#d(< |jC|#d( d)< |(|#d( d< tDd*tEtFtDd*tGtFt3d+  tH |@|#  |!d,< t|!| d d-< | d I  |!I | d d.< d/| d d0< d1| d d2< |J|  | K| | L }|Mtj*rl|d3 | _Nt)|d d })tO|)d }*tP|d d4}+|*d- |+d-< z	|+Q|)d  W n tRtSfyC }, ztTUd5|, tVd6d7d8dd d },~,ww |*d9 | _W| jXd: tjY@ r\|jZ| _[d| _\d
| _]|tj@ rj|  jtjO  _dS t^d;)<Nr   )AP_REQAuthenticatorTGS_REPseq_set)getKerberosTGTgetKerberosTGS)	constants)	PrincipalKerberosTimeTicket)decoderencoderr  r   0%sT)r  KDC_REPcipher
sessionKeyzcifs/%sr  r  r     r  r  r   r  r  r  zMS KRB5 - Microsoft Kerberos 5	MechTypes)asn1Specticketr0   pvnozmsg-typez
ap-optionszauthenticator-vnocrealmcnamecusecr  r5   authenticatoretypere  zKRB5 - Kerberos 5	MechTokenr
  r#  Unixr  Sambar  r  r  )Session setup response parsing failed: %s;Authentication failed: invalid or truncated server responsem   r  r&  r/  #Error: Could not login successfully)_impacket.krb5.asn1rh  ri  rj  rk  impacket.krb5.kerberosv5rl  rm  impacket.krb5rn  impacket.krb5.typesro  rp  rq  pyasn1.codec.derrr  rs  r  r  r  r  r  r   rr  rs  rt  ru  rv  rw  rx  ry  rz  rq  PrincipalNameTypeNT_PRINCIPALrI  rl  NT_SRV_INSTr  r  r  r  SMB_COM_SESSION_SETUP_ANDXr  r  r  CAP_USE_NT_ERRORSCAP_UNICODErJ  rR  r   r   decode	from_asn1r0  ApplicationTagNumberslistencodeFlagsto_asn1components_to_asn1nowr  r  microsecondr  encryptr   enctyper   r   r   r   r   r/  r  r  r  r  r`  r'  r+  r?  rG  r  r   r  ra   r}  ro  r  contentsr  r  r  r   )-r   userr  domainlmhashnthashaesKeykdcHostTGTTGSrh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  r  r  userNametgtrv  oldSessionKeyrw  
serverNametgsr  sessionSetupblobr{  apReqoptsr  r  encodedAuthenticatorencryptedEncodedAuthenticatorr  sessionParameterssessionDatar  r^   r^   r_   kerberos_logint  s   



&





zSMB.kerberos_loginc              
   C   s  | j }|tj@ r||tjA @ | _ t }| jr|d  tjO  < ttj}	t |	d< t	 |	d< d|	d d< d|	d d< d|	d d	< d
|	d d< tj
tjB tjB tjB tjB |	d d< t }
td g|
d< tj|  || j|d}| |
d< t|
|	d d< |	d   |
 |	d d< d|	d d< d|	d d< ||	 | | |  }|tjrf|d | _t|d d
 }t|d }t|d d}|d |d< z	||d  W n ttfy } zt !d| t"ddddd d }~ww t#|d }t$|d }|d d
krt%|d d |d  }|tj& d ur3z|tj& d 'd | _(W n
 t)y2   Y nw |tj* d uraz| j(|tj* d 'd krU|tj* d 'd | _+W n
 t)y`   Y nw |tj, d urz|tj, d 'd | _-W n
 t)y   Y nw |tj. d urz|tj. d 'd | _/W n
 t)y   Y nw | j0r| 1  d!|j2v r|d! }t|d"krt3d#|d d" \| _4| _5| _6tj7||d ||||||d\}}|d ur|| _8t }| jr|d  tjO  < t# }| |d< t||	d d< | |	d d< |d | _9|d | _:||	 | | |  }d
| _|tjrd|d | _t|d d
 }t;|d }|d$ | _<| j=d% tj>@ rTd| _?d&| _@|tj@ rb|  j tjO  _ dS d S tAd')(Nr  r  r  rx  r  r   r  r   r  r   r  r  z2NTLMSSP - Microsoft NTLM Security Support Providerry  
use_ntlmv2r  r
  r#  r  r  r  r  r  r  r  r  r  r  ResponseTokenTargetInfoFields_lenTargetInfoFieldsr  Versionr"   z<BBHr&  r/  Tr  )Br  r  r  r  r  r  r  r  r  r  r  r  r  rJ  rR  r   r   r   getNTLMSSPType1r  r/  r  r  r  r  r  r`  r'  r+  r?  rG  r  r   r  ra   r   NTLMAuthChallengeAV_PAIRSNTLMSSP_AV_HOSTNAMEr  ra  UnicodeDecodeErrorNTLMSSP_AV_DOMAINNAMErh  NTLMSSP_AV_DNS_DOMAINNAMEri  NTLMSSP_AV_DNS_HOSTNAMErj  r  rg  r  r   rd  re  rf  getNTLMSSPType3r  rc  rg  r%  r}  ro  r  r  r  r   )r   r  r  r  r  r  r  r  r  r  r  authr  r  r  r  	respTokenntlmChallengeav_pairsversiontype3exportedSessionKey
respToken2r^   r^   r_   login_extended  s   



&


"






zSMB.login_extendedc                 C   s$   | j | j| j| j| j| j| j| jfS r   )rr  rs  rt  ru  rv  rw  ry  rz  r   r^   r^   r_   getCredentials  s   zSMB.getCredentialsc                 C   sD   t  }| jd tj@ r| jdu rd}n| jd }||d< ||d< |S )Nr  FrH  r  MaxReadSizeMaxWriteSize)dictro  r  rJ  r  )r   rT  max_sizer^   r^   r_   getIOCapabilities  s   
zSMB.getIOCapabilitiesc                 C   s<  |dks|dkr+t |d rd| }t |d rd| }z
t|}t|}W n   Y || _|| _|| _|| _|| _d| _d | _d | _	| j
d tj@ rz| j|||||dd W d S    |rt|  ddkswt|  d	dkr| j|||||d
d d
| _n Y d S |r| ||||| d
| _d S td)Nr  r   rt  r  Tr  s   Windows 2000r  s   SambaFz8Cannot authenticate against target, enable ntlm_fallback)r  r   rr  rs  rt  ru  rv  rw  ry  rz  ro  r  r  r  sixensure_binaryra  r  rn  login_standardra   )r   r  r  r  r  r  ntlm_fallbackr^   r^   r_   r    s@   
z	SMB.loginc                 C   s|  | j }|tj@ r||tjA @ | _ | jd dkrF|dks|dkr*| |}| |}n |rAt|}t|}| |}| |}n	d}d}n|}d}t }	t	tj
}
t |
d< t |
d< d|
d d< d|
d d	< t d
@ |
d d< | jd |
d d< t||
d d< t||
d d< tjtjB tjB tjB |
d d< ||
d d< ||
d d< t||
d d< t||
d d< ttj|
d d< d|
d d< |	|
 | |	 |  }	|	tj
r:|	d | _t	|	d d }t|d }t|	d |d d}|d | _|d t@ dkr|
d d | _|| _ n
|
d d | _|| _ |d | _!|d | _"|d | _#|tj@ r8|  j tjO  _ dS t$d)Nr5  r   r  r  r  rx  r  r   r  r   r  r  r  r  r  r  r  r  r  r  pysmbr  r  r  )r  rZ  r&  r   r  )%r  r  r  ro  r  r   r  compute_nthashr  r  r  r  r  r  r  r  CAP_RAW_MODEr  rJ  rR  r|  rr  r  r  r  r  r`  r%  r)  r}  SMB_SETUP_USE_LANMAN_KEYr  r  rc  rg  rh  r   )r   r  r  r  r  r  r  pwd_ansipwd_unicoder  r  r  r  r  r^   r^   r_   r    sl   







 






zSMB.login_standardc                 C   s  t  }||d< ttj}t |d< t |d< d}d| }| jtj@ rJdt| }	d|	d  }
|
d |	d	 }|	t| }d
|d
  }||d 7 }n|	d}||d d< d|d d< d|d d< d|d d< d|d d< |d |d d< d|d d< dt| t| |d d< d|d d< d|d d< ||d d< d|d d< d|d d< |rt
|d d< || | | |  }|tjrdS dS )Nr  r  r  zS   z\PIPE%s r/  r   r  r  r"   r  r  r   r  r  r  r  i  r  r  r  r  r  r  r  r  r  r  r   )r  r  r  r  r  r  r  r  r  r  r0  r  r  r  r  )r   r  piper  r3  r  r4  r1  rr  start_of_name	start_padend_of_namepad_lenr^   r^   r_   waitNamedPipeB  sH   





zSMB.waitNamedPipec                 C   s   |s| j d }t }||d< ttj}t |d< ||d d< ||d d< ||d d< || |rT	 | | |  }|	tjrSt|d d	 }	t
|	d }
|
d S q2d S )
Nr  r  r  r  r  r  r   r  r   )ro  r  r  r  SMB_COM_READr  r  r  r  r  r  )r   r  r  rL  r  wait_answerr  readansreadResponsereadDatar^   r^   r_   r  q  s(   





zSMB.readc                 C   sn  |s| j d tj@ r| jdu rd}n| j d }|d u rDt }||d< ttj}t |d< ||d d< ||d d< ||d d	< || n|}|rd
}		 | 	| | 
 }
|
tjrt|
d d }t|d }|d }|d d|d   }|	|
 |||  7 }	|
 s|	S t||d }|d d  |7  < qK| 	| | 
 }
z|
tjr|
W S W d S    |
 Y S )Nr  FrH  r  r  r  r  r  r  r\  r   r  r   r  r  r,   r  r  )ro  r  rJ  r  r  r  r  r  r  r  r  r  r  r/  r  min)r   r  r  rL  r  r  r
  r  readAndXanswerr  readAndXResponsereadAndXParameterscountr^   r^   r_   rK    sL   




zSMB.read_andxc           	      C   s   |s| j d }t }||d< ttj}t |d< ||d d< ||d d< ||d d< || | | |rK| j	| j
 }|sI| ||||}|S d S )Nr  r  r  r  r  r  )ro  r  r  r  r  r  r  r  r~  r  r  r  rK  )	r   r  r  rL  r  r  r  readRawrZ  r^   r^   r_   read_raw  s"   




zSMB.read_rawc                 C   s   t  }||d< ttj}t |d< t |d< ||d d< t||d d< ||d d< t||d d< ||d d< || | | |rP| 	 }|
tjrP|S d S )Nr  r  r  r  r  r  r  )r  r  r  SMB_COM_WRITEr  r  r  r  r  r  r  )r   r  r  rZ  rL  r  r  writer^   r^   r_   r    s"   




z	SMB.writeFc                 C   s  |d u rt  }||d< ttj}	||	 t |	d< ||	d d< ||	d d< d|	d d< t||	d d< t||	d d< t||	d d	< ||	d
< |du r| jd }
t||
kr|
d }d|	d d< d| }t|}||	d d< |d |	d d< |d | |	d
< | | |r| 	 }|
tj |}||d  }||k rd|	d d< t|d | |	d d< |d | |	d
< | | |r| 	 }|
tj ||	d d 7 }||d  }||k s|S n|}| | |r| 	 }|
tjr|S d S )Nr  r  r  r  r%   r  r  r  r  r  Tr  r]  r6   s   r   r"   )r  r  r  SMB_COM_WRITE_ANDXr  r  r  ro  r  r  r  )r   r  r  rZ  rL  r  write_pipe_moder
  r  	writeAndXmaxBuffSizechunks_sizesendDatatotalLensmbRespalreadySentr^   r^   r_   rS    sb   






zSMB.write_andxc                 C   s   t d t }||d< ttj}t |d< ||d d< ||d d< t||d d< d|d d< d|d d	< || | 	| | j
| |rT|  }|tjrT|S d S )
Nz[MS-CIFS] This command was introduced in the CorePlus dialect, but is often listed as part of the LAN Manager 1.0 dialect.This command has been deprecated.Clients SHOULD use SMB_COM_WRITE_ANDXr  r  r  r  r  r   r  r  )r   r  r  r  r  SMB_COM_WRITE_RAWr  r  r  r  r~  r  r  r  )r   r  r  rZ  rL  r  r  writeRawr^   r^   r_   	write_raw0  s$   




zSMB.write_rawc           
      C   st   | j |tdd|dd||d |s|sd S |  }|tjr8t|d d }t|d }	|d |	d	  d  S d S )
Nr=  rN   z\PIPE\ r  )r3  r  r   r  r  )r5  r   r  r  r  r  r  r  )
r   r  r  rZ  r3  
waitAnswerrL  r  transResponsetransParametersr^   r^   r_   TransactNamedPipeG  s   zSMB.TransactNamedPipec                 C   sJ   |   }|tjr#t|d d }t|d }|d |d  d  S d S )Nr  r   r  r  )r  r  r  r  r  r  )r   r[  r  r  r^   r^   r_   TransactNamedPipeRecvS  s   zSMB.TransactNamedPipeRecvc                 C   s>  | dd}| jtj@ r|dn|}|d u rt }||d< n|}|d u rpttj}	t |	d< t	| jd|	d< t
||	d d< d	|	d d
< ||	d d< d|	d d< ||	d d< ||	d d< ||	d d< | jtj@ rod|	d d< n|}	||	 | | 	 |  }|tjrt|d d }
t|
d }|d | _|d S q})Nr   r  r  r  r  r  r  rU  r?   rL  rN  r&   rS  rQ  rR  r`  r   r  r   r  )r!  r  r  r  r  r  r  SMB_COM_NT_CREATE_ANDXrK  rl  r  r  r  r  r  rV  r  )r   r  r$  r
  r  shareAccessModedisposition
accessMaskr  ntCreatentCreateResponsentCreateParametersr^   r^   r_   nt_create_andx[  s>   





zSMB.nt_create_andxc                 C   s@   t  }ttj}t |d< || | | |   d| _d S )Nr  r   )	r  r  r  SMB_COM_LOGOFF_ANDXr  r  r  r  r`  )r   r  logOffr^   r^   r_   logoff  s   




z
SMB.logoff*c              
   C   s  | dd}| jtj@ r|dn|}| d| j d | |}zt| j}tt	B t
B tB tB |d< d|d< ttB |d< t|d	< d
|d< | jtj@ rR|d |d< n|d |d< | |tjd|d g }d}d}d}	t||k r|  }
|
tjrt|
d d
 }t|d }|d }|	|d |d d d  d |d  7 }	||d |d d d  7 }t||k spt|	}|d }|d d
krt|d}| jtj@ r|d dn|d d}| jtj@ r|d dn|d d}t|d |d |d |d  |d! |d" |d# ||	}|| |d$ d
kr,t||d$ d  d
kr,||d$ d  }n|d% d
kr|d }t }||d< d&|d< t|d	< |d' |d(< ttB |d< | jtj@ r`|d |d< n|d) |d< | |tjd|d d}d}d}t||k r|  }
|
tjrt|
d d
 }t|d }|d }||d |d d d  d |d  7 }||d |d d d  7 }t|}t||k s}nn|d d
ksW |  | |S W |  | |S W |  | |S |  | w )*Nr   r  r  r  r  r'   r  r  r  r   r  s     r`  r  r  r   r\  r  r  r  r  r  r  r  r  r  r]  cp437rF  rH  rJ  rL  rN  rQ  rS  rB  r  r(   rD  ro  r  )!r!  r  r  r  r  r  rl  r  SMB_FILE_ATTRIBUTE_DIRECTORYSMB_FILE_ATTRIBUTE_HIDDENSMB_FILE_ATTRIBUTE_SYSTEMSMB_FILE_ATTRIBUTE_READONLYSMB_FILE_ATTRIBUTE_ARCHIVESMB_FIND_RETURN_RESUME_KEYSSMB_FIND_CLOSE_AT_EOS!SMB_FIND_FILE_BOTH_DIRECTORY_INFOr<  TRANS2_FIND_FIRST2r  r  r  r8  r  r  r  r?  r  r~  r  r  TRANS2_FIND_NEXT2r  r  )r   r  r  r  r  findFirstParameterfilestotalDataCountfindDatafindFirst2ParameterBlockr@  rA  rB  findParameterBlocksidrecordr  r$  
fileRecordresume_filenamefindNextParameterfindNext2ParameterBlockr^   r^   r_   	list_path  s   
(


((
-
-
zSMB.list_pathc              
   C   s   | dd}d}| d| j d | |}	z6| j|	||ttB tB tB d}| |	|}
t	|
d }| 
|	|||| W |dkrE| |	| | |	 d S |dkrV| |	| | |	 w )Nr   r  r  r  )r  r  rN  r   )r!  r  rl  r  READ_CONTROLFILE_READ_ATTRIBUTESFILE_READ_EAFILE_READ_DATArC  r  _SMB__nonraw_retr_filer  r  )r   r  r$  rN  moderL  r  r  r  r  rT  rM  r^   r^   r_   	retr_file  s   zSMB.retr_filec           
   
   C      | dd}d}| d| j d | |}	z$| j|	|||d}| |	||d| W |dkr3| |	| | |	 d S |dkrD| |	| | |	 w Nr   r  r  r  )r  r  r   r!  r  rl  r  _SMB__nonraw_stor_filer  r  
r   r  r$  rN  r.  rL  r  r  r  r  r^   r^   r_   	stor_file  s   zSMB.stor_filec           
   
   C   r0  r1  r2  r4  r^   r^   r_   stor_file_nonraw  s   zSMB.stor_file_nonrawc              	   C   s   | dd}| d| j d | |}zKt }||d< d|d< ttj}d|d< t| jd	|d
< | jtj	@ r;|
dn||d
 d< || | | 	 |  }|tjr^W | | d S qL| | w )Nr   r  r  r  r   r  r  r  r  r  r  r  )r!  r  rl  r  r  r  SMB_COM_CHECK_DIRECTORYr  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r[  r^   r^   r_   	check_dir  s&   
"

zSMB.check_dirc              	   C   s   | dd}| ||| | d| j d | |}zZt }||d< d|d< ttj}t |d< t	t
B tB |d d< t| jd	|d
< | jtj@ rO|d dn|d |d
 d< || | | 	 |  }|tjrtW | | d S qb| | w )Nr   r  r  r  r   r  r  r  r  r  r  r  r`  )r!  r(  r  rl  r  r  r  SMB_COM_DELETEr  r  r  r  r  r  r  r  r  r  r  r  r  r8  r^   r^   r_   remove*  s*   

*

z
SMB.removec              	   C   s   | dd}| ||| | d| j d | |}zE| jtj@ r&|dn|}t }||d< t	tj
}t| jd|d< ||d d< || | | 	 |  }|tj
r_W | | d S qM| | w )	Nr   r  r  r  r  r  r  r  )r!  r9  r  rl  r  r  r  r  r  r  SMB_COM_DELETE_DIRECTORYr  r  r  r  r  r  )r   r  r  r  r  r  	createDirr[  r^   r^   r_   rmdirE  s&   


z	SMB.rmdirc              	   C   s   | dd}| d| j d | |}zO| jtj@ r|dn|}t }||d< d|d< ttj	}t
| jd|d	< ||d	 d
< || | | |  }|tj	r[W | | dS W | | dS | | w )Nr   r  r  r  r  r   r  r  r  r  r   )r!  r  rl  r  r  r  r  r  r  SMB_COM_CREATE_DIRECTORYr  r  r  r  r  r  )r   r  r  r  r  r  r=  r^   r^   r_   mkdir^  s$   


z	SMB.mkdirc              	   C   s  | dd}| dd}| d| j d | |}zmt }||d< d|d< ttj}t |d< tt	B t
B |d d< t| jd	|d
< | jtj@ rL|dn||d
 d< | jtj@ r]|dn||d
 d< || | | |  }|tjrW | | dS W | | dS | | w )Nr   r  r  r  r   r  r  r  r  r  r  r#  r&  r   )r!  r  rl  r  r  r  SMB_COM_RENAMEr  r  r  r  r   r  r  r  r  r  r  r  r  )r   r  old_pathnew_pathr  r  r  	renameCmdr^   r^   r_   renamev  s*   

""

z
SMB.renamec                 C   s   | j d tj@ r| jdu rd}n| j d d@ }|}	 t|dkr#	 |S |d | }||d  }| ||||}t|d d }	t|	d	 }
||
d
 7 }q)Nr  FrH  r  rI  r   r   r  r  r  )ro  r  rR  r  r  rS  r  r  )r   treeIdfileIdrZ  rL  rO  rT  	writeDatar  rU  rV  r^   r^   r_   	writeFile  s   	zSMB.writeFilec                 C   s
   | j  S r   )r~  
get_socketr   r^   r^   r_   rJ    r  zSMB.get_socketc                 C   s  t  }||d< |dkrtd|nd}ttj}	t |	d< | jd |	d d< ||	d d< ||	d d< t||	d d	< t||	d d
< ||	d d< d|	d d< t |	d< dt| }
d|	d d< |
d dkrxdd|
d   |	d d< |
d|
d  7 }
t|dkr|
|	d d< nd|	d d< |
t|7 }
d|	d d< |
d dkrdd|
d   |	d d< |
d|
d  7 }
t|dkr|
|	d d< nd|	d d< t||	d d< t||	d d< ||	d d< ||	d d< |	|	 | 
| dS )aO  
        [MS-CIFS]: 2.2.4.62.1 SMB_COM_NT_TRANSACT request.
        :param tid:
        :param subcommand: The transaction subcommand code
        :param max_param_count:  This field MUST be set as specified in the subsections of Transaction subcommands.
        :param setup: Transaction context to the server, depends on transaction subcommand.
        :param param: Subcommand parameter bytes if any, depends on transaction subcommand.
        :param data: Subcommand data bytes if any, depends on transaction subcommand.
        :return: Buffer relative to requested subcommand.
        r  r  ry  r  r  r  r  r  r  r  r  r   r  r  I   r  r"   r  r  r  r  r  r  r  r  N)r  r   r  r  SMB_COM_NT_TRANSACTr  ro  r  r  r  r  )r   r  
subcommandmax_param_countr1  r2  rZ  r
  setup_bytesr4  rL  r^   r^   r_   send_nt_trans  sF   



zSMB.send_nt_transc              	   C   sf   | j |ddtd|d|d |  }|tjr1t|d d }t|d }|d |d  d	 S d	S )
a+  
        [MS-CIFS]: 2.2.7.6.1
        NT_TRANSACT_QUERY_SECURITY_DESC 0x0006
        :param tid: valid tree id.
        :param fid: valid file handle.
        :param additional_information: SecurityInfoFields. default = owner + group + dacl ie. 7
        :return: security descriptor buffer
        r1   r"   z<HHLr   )rM  rN  r2  r  r  r  N)rP  r   r  r  r  rL  r  r  )r   r  r  additional_informationr@  nt_trans_responsent_trans_parametersr^   r^   r_   query_sec_info  s   
	zSMB.query_sec_infoc                 C   sv   t  }ttj}t |d< t |d< ||d d< ||d d< || | | t|D ]}| 	 }|
tj q,dS )Nr  r  r  T)r  r  r  SMB_COM_ECHOr  r  r  r  ranger  r  )r   textr  r  comEchor  r@  r^   r^   r_   echo  s   




zSMB.echor  )TNr  )r  r  r  r  r  NN)r  r  r  T)r  r  r  )r0   r   )r   Nr   )r   Nr   N)r   r   )r   r   FN)r  r   r   r   )r  Nr   )r2   )r  r   )r   r   r   r   r@  r?  r<  r"  SMB_COM_CREATEr-  SMB_COM_FLUSHr:  rA  SMB_COM_QUERY_INFORMATIONSMB_COM_SET_INFORMATIONr  r  SMB_COM_LOCK_BYTE_RANGESMB_COM_UNLOCK_BYTE_RANGESMB_COM_CREATE_TEMPORARYSMB_COM_CREATE_NEWr7  SMB_COM_PROCESS_EXITSMB_COM_SEEKSMB_COM_LOCK_AND_READSMB_COM_WRITE_AND_UNLOCKr  SMB_COM_READ_MPXSMB_COM_READ_MPX_SECONDARYr  SMB_COM_WRITE_MPXSMB_COM_WRITE_MPX_SECONDARYSMB_COM_WRITE_COMPLETESMB_COM_QUERY_SERVERSMB_COM_SET_INFORMATION2SMB_COM_QUERY_INFORMATION2SMB_COM_LOCKING_ANDXr  SMB_COM_TRANSACTION_SECONDARYSMB_COM_IOCTLSMB_COM_IOCTL_SECONDARYSMB_COM_COPYSMB_COM_MOVErU  SMB_COM_WRITE_AND_CLOSEr+  r  r  SMB_COM_NEW_FILE_SIZESMB_COM_CLOSE_AND_TREE_DISCr8  SMB_COM_TRANSACTION2_SECONDARYSMB_COM_FIND_CLOSE2SMB_COM_FIND_NOTIFY_CLOSEr  r  r  r  r  r	  SMB_COM_QUERY_INFORMATION_DISKSMB_COM_SEARCHSMB_COM_FINDSMB_COM_FIND_UNIQUESMB_COM_FIND_CLOSErL  SMB_COM_NT_TRANSACT_SECONDARYr  SMB_COM_NT_CANCELSMB_COM_NT_RENAMESMB_COM_OPEN_PRINT_FILESMB_COM_WRITE_PRINT_FILESMB_COM_CLOSE_PRINT_FILESMB_COM_GET_PRINT_QUEUESMB_COM_READ_BULKSMB_COM_WRITE_BULKSMB_COM_WRITE_BULK_DATATRANS_TRANSACT_NMPIPEr  r  TRANS2_QUERY_FS_INFORMATIONTRANS2_QUERY_PATH_INFORMATIONr>  rD  TRANS2_SET_PATH_INFORMATIONr  r  rb  SECURITY_SIGNATURES_ENABLEDr  SECURITY_AUTH_MASKSECURITY_AUTH_ENCRYPTEDSECURITY_AUTH_PLAINTEXTRAW_READ_MASKRAW_WRITE_MASKr  CAP_MPX_MODEr  CAP_LARGE_FILESr  r  CAP_NT_SMBSrJ  rR  CAP_RPC_REMOTE_APISFLAGS1_LOCK_AND_READ_OKr  r  FLAGS1_REPLYr  
FLAGS2_EASr  FLAGS2_IS_LONG_NAME
FLAGS2_DFSFLAGS2_PAGING_IOr  r  FLAGS2_COMPRESSED&FLAGS2_SMB_SECURITY_SIGNATURE_REQUIREDr  NEGOTIATE_USER_SECURITYNEGOTIATE_ENCRYPT_PASSWORDS#NEGOTIATE_SECURITY_SIGNATURE_ENABLE%NEGOTIATE_SECURITY_SIGNATURE_REQUIREDSMB_SUPPORT_SEARCH_BITSSMB_SHARE_IS_IN_DFSr   TYPE_SERVERr   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  _SMB__decode_transr  r  r  r  r  SERVICE_ANYr  r  r   r  connect_treer  r  r  r  r  r  r  r  r*  r,  r  r5  r<  SMB_QUERY_FILE_STANDARD_INFOrC  rG  r-  r3  rX  rY  rZ  r\  r]  r^  r_  r`  ra  rc  rd  r  rg  r  r  r  r  r  r  r  r  rK  r  r  rS  r  r  r  FILE_SHARE_READFILE_SHARE_WRITE	FILE_OPENr)  FILE_WRITE_ATTRIBUTESr*  FILE_WRITE_EAr+  FILE_APPEND_DATAFILE_WRITE_DATAr  r  r(  r/  FILE_OVERWRITE_IFr5  r6  r9  r;  r>  r@  rE  rI  rJ  rP  rT  rY  r^   r^   r^   r_   r  	  s   

k


"

A!F
		!(+

 ) 
(S/6=0)W;r  zInvalid functionzFile not foundzInvalid directoryzToo many open fileszAccess deniedz.Invalid file handle. Please file a bug report.zMemory control blocks destroyedzOut of memoryzInvalid memory block addresszInvalid environmentzInvalid formatzInvalid open modezInvalid datazInvalid drivez,Attempt to remove server's current directoryzNot the same devicezNo files foundzSharing mode conflicts detectedzLock request conflicts detectedzFile already exists)r   rI   rd   zNon-specific errorzBad passwordz&Invalid tid. Please file a bug report.zInvalid network namezInvalid devicerr   zPrint queue fullrb   r   zEOF on print queue dumprs   zInvalid print file handlez1Command not recognized. Please file a bug report.rt   zInternal server errorrc   zInvalid pathrv   zInvalid access permissionsrx   zInvalid attribute modery   zServer is pausedrz   zNot receiving messageszNo room to buffer messageszToo many remote user nameszOperation timeoutzOut of resourcesz.Invalid user handle. Please file a bug report.z3Temporarily unable to support raw mode for transferzContinue in MPX modezUnsupported function)	r{   re   r|   r}   r   r   r   r   r   zMedia is write-protectedzUnknown unitzDrive not readyzUnknown commandz	CRC errorzBad requestz
Seek errorzUnknown media typezSector not foundzPrinter out of paperzWrite faultz
Read faultr   z$Open conflicts with an existing openzInvalid lock requestzWrong disk in drivezFCBs not availablezSharing buffer exceeded(  
__future__r   r   r  r  binasciir   r  structr   r   r   r   r  ctypesr	   r
   
contextlibr   pyasn1.type.univr   impacketr   r   r   r   impacket.structurer   impacket.spnegor   r   r   r   r   r   impacket.krb5.gssapir   r  r  r  r  r  SHARED_DISKSHARED_DISK_HIDDENSHARED_PRINT_QUEUESHARED_DEVICE
SHARED_IPCr  r  r  r  r  r  r  r  SERVICE_DISKSERVICE_PRINTERSERVICE_IPCSERVICE_COMMr  SV_TYPE_WORKSTATIONSV_TYPE_SERVERSV_TYPE_SQLSERVERSV_TYPE_DOMAIN_CTRLSV_TYPE_DOMAIN_BAKCTRLSV_TYPE_TIME_SOURCESV_TYPE_AFPSV_TYPE_NOVELLSV_TYPE_DOMAIN_MEMBERSV_TYPE_PRINTQ_SERVERSV_TYPE_DIALIN_SERVERSV_TYPE_XENIX_SERVER
SV_TYPE_NTSV_TYPE_WFWSV_TYPE_SERVER_NTSV_TYPE_POTENTIAL_BROWSERSV_TYPE_BACKUP_BROWSERSV_TYPE_MASTER_BROWSERSV_TYPE_DOMAIN_MASTERSV_TYPE_LOCAL_LIST_ONLYSV_TYPE_DOMAIN_ENUMSMB_O_CREAT
SMB_O_EXCL
SMB_O_OPENSMB_O_TRUNCSMB_SHARE_COMPATSMB_SHARE_DENY_EXCLSMB_SHARE_DENY_WRITESMB_SHARE_DENY_READEXECSMB_SHARE_DENY_NONESMB_ACCESS_READSMB_ACCESS_WRITESMB_ACCESS_READWRITESMB_ACCESS_EXECTRANS_DISCONNECT_TIDr0  STATUS_SUCCESSSTATUS_LOGON_FAILURESTATUS_LOGON_TYPE_NOT_GRANTEDMAX_TFRAG_SIZEEVASION_NONEEVASION_LOWEVASION_HIGHEVASION_MAXRPC_X_BAD_STUB_DATASMB_FILE_ATTRIBUTE_NORMALr  r  r  SMB_FILE_ATTRIBUTE_VOLUMEr  r  SMB_SEARCH_ATTRIBUTE_READONLYSMB_SEARCH_ATTRIBUTE_HIDDENSMB_SEARCH_ATTRIBUTE_SYSTEMSMB_SEARCH_ATTRIBUTE_DIRECTORYSMB_SEARCH_ATTRIBUTE_ARCHIVEr  r  SMB_INFO_ALLOCATIONSMB_INFO_VOLUMEFILE_FS_SIZE_INFORMATIONSMB_QUERY_FS_VOLUME_INFOSMB_QUERY_FS_SIZE_INFOSMB_QUERY_FILE_EA_INFOSMB_QUERY_FS_DEVICE_INFOSMB_QUERY_FS_ATTRIBUTE_INFOSMB_QUERY_FILE_BASIC_INFOr  SMB_QUERY_FILE_ALL_INFOSMB_QUERY_FILE_STREAM_INFOFILE_FS_FULL_SIZE_INFORMATIONSMB_INFO_STANDARDSMB_INFO_SET_EASSMB_SET_FILE_BASIC_INFOSMB_SET_FILE_DISPOSITION_INFOSMB_SET_FILE_ALLOCATION_INFOSMB_SET_FILE_END_OF_FILE_INFOFILE_DEVICE_BEEPFILE_DEVICE_CD_ROMFILE_DEVICE_CD_ROM_FILE_SYSTEMFILE_DEVICE_CONTROLLERFILE_DEVICE_DATALINKFILE_DEVICE_DFSFILE_DEVICE_DISKFILE_DEVICE_DISK_FILE_SYSTEMFILE_DEVICE_FILE_SYSTEMFILE_DEVICE_INPORT_PORTFILE_DEVICE_KEYBOARDFILE_DEVICE_MAILSLOTFILE_DEVICE_MIDI_INFILE_DEVICE_MIDI_OUTFILE_DEVICE_MOUSEFILE_DEVICE_MULTI_UNC_PROVIDERFILE_DEVICE_NAMED_PIPEFILE_DEVICE_NETWORKFILE_DEVICE_NETWORK_BROWSERFILE_DEVICE_NETWORK_FILE_SYSTEMFILE_DEVICE_NULLFILE_DEVICE_PARALLEL_PORTFILE_DEVICE_PHYSICAL_NETCARDFILE_DEVICE_PRINTERFILE_DEVICE_SCANNERFILE_DEVICE_SERIAL_MOUSE_PORTFILE_DEVICE_SERIAL_PORTFILE_DEVICE_SCREENFILE_DEVICE_SOUNDFILE_DEVICE_STREAMSFILE_DEVICE_TAPEFILE_DEVICE_TAPE_FILE_SYSTEMFILE_DEVICE_TRANSPORTFILE_DEVICE_UNKNOWNFILE_DEVICE_VIDEOFILE_DEVICE_VIRTUAL_DISKFILE_DEVICE_WAVE_INFILE_DEVICE_WAVE_OUTFILE_DEVICE_8042_PORTFILE_DEVICE_NETWORK_REDIRECTORFILE_DEVICE_BATTERYFILE_DEVICE_BUS_EXTENDERFILE_DEVICE_MODEMFILE_DEVICE_VDMFILE_REMOVABLE_MEDIAFILE_READ_ONLY_DEVICEFILE_FLOPPY_DISKETTEFILE_WRITE_ONCE_MEDIAFILE_REMOTE_DEVICEFILE_DEVICE_IS_MOUNTEDFILE_VIRTUAL_VOLUMEFILE_CASE_SENSITIVE_SEARCHFILE_CASE_PRESERVED_NAMESFILE_UNICODE_ON_DISKFILE_PERSISTENT_ACLSFILE_FILE_COMPRESSIONFILE_VOLUME_IS_COMPRESSEDSMB_FIND_CLOSE_AFTER_REQUESTr  r  SMB_FIND_CONTINUE_FROM_LASTSMB_FIND_WITH_BACKUP_INTENTFILE_DIRECTORY_FILEFILE_DELETE_ON_CLOSEFILE_NON_DIRECTORY_FILESMB_FIND_INFO_STANDARDSMB_FIND_FILE_DIRECTORY_INFO!SMB_FIND_FILE_FULL_DIRECTORY_INFOSMB_FIND_FILE_NAMES_INFOr  $SMB_FIND_FILE_ID_FULL_DIRECTORY_INFO$SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFOr,  r  r  r+  r  FILE_EXECUTEr*  r  DELETEr)  	WRITE_DACWRITE_OWNERSYNCHRONIZEACCESS_SYSTEM_SECURITYMAXIMUM_ALLOWEDGENERIC_ALLGENERIC_EXECUTEGENERIC_WRITEGENERIC_READFILE_SHARE_NONEr  r  FILE_SHARE_DELETEFILE_SUPERSEDEr  FILE_CREATEFILE_OPEN_IFFILE_OVERWRITEr  r`   r   ra   r*  r3  r5  r6  r>  rc  re  rm  r~  r  r  r  r  r  r  r  r  r  r&  r1  r3  r6  r;  r?  ra  rf  rg  rk  rl  rn  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r'  r)  r+  r0  r1  r;  r>  r@  rD  rH  rK  rV  rf  rl  rn  rt  ru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r   r'  r(  r+  r,  r6  r8  r9  objectr  rX   rZ   r[   r^   r^   r^   r_   <module>   s  3   [[c	
;		
"
	
	


		
	
	



                
	

	

	
