gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnurl] 20/219: tests: make Impacket (SMB server) Python 3


From: gnunet
Subject: [GNUnet-SVN] [gnurl] 20/219: tests: make Impacket (SMB server) Python 3 compatible
Date: Wed, 22 May 2019 19:15:59 +0200

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnurl.

commit aba1c515534197cab1588ab0f3a2343be1f0a8e5
Author: cclauss <address@hidden>
AuthorDate: Fri Apr 5 01:32:39 2019 +0200

    tests: make Impacket (SMB server) Python 3 compatible
    
    Closes #3731
    Fixes #3289
---
 docs/KNOWN_BUGS                                 |   7 -
 tests/python_dependencies/impacket/nmb.py       |  46 ++---
 tests/python_dependencies/impacket/ntlm.py      |  78 ++++----
 tests/python_dependencies/impacket/smb.py       |  22 +--
 tests/python_dependencies/impacket/smb3.py      |  69 +++----
 tests/python_dependencies/impacket/smbserver.py | 228 ++++++++++++------------
 tests/python_dependencies/impacket/spnego.py    | 154 ++++++++--------
 tests/python_dependencies/impacket/structure.py |  69 +++----
 tests/python_dependencies/impacket/uuid.py      |  21 ++-
 9 files changed, 352 insertions(+), 342 deletions(-)

diff --git a/docs/KNOWN_BUGS b/docs/KNOWN_BUGS
index 92956c617..67c7b1661 100644
--- a/docs/KNOWN_BUGS
+++ b/docs/KNOWN_BUGS
@@ -46,7 +46,6 @@ problems may have been fixed or changed somewhat since this 
was written!
  4.5 Improve --data-urlencode space encoding
 
  5. Build and portability issues
- 5.1 tests not compatible with python3
  5.2 curl-config --libs contains private details
  5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
  5.4 Cannot compile against a static build of OpenLDAP
@@ -372,12 +371,6 @@ problems may have been fixed or changed somewhat since 
this was written!
 
 5. Build and portability issues
 
-5.1 tests not compatible with python3
-
- The smb test server still needs python2.
-
- See https://github.com/curl/curl/issues/3289
-
 5.2 curl-config --libs contains private details
 
  "curl-config --libs" will include details set in LDFLAGS when configure is
diff --git a/tests/python_dependencies/impacket/nmb.py 
b/tests/python_dependencies/impacket/nmb.py
index dc8777e65..791377bc2 100644
--- a/tests/python_dependencies/impacket/nmb.py
+++ b/tests/python_dependencies/impacket/nmb.py
@@ -1,3 +1,5 @@
+from __future__ import print_function
+from __future__ import absolute_import
 # Copyright (c) 2003-2016 CORE Security Technologies
 #
 # This software is provided under under a slightly modified version
@@ -40,7 +42,7 @@ from random import randint
 from struct import pack, unpack
 import time
 
-from structure import Structure
+from .structure import Structure
 
 CVS_REVISION = '$Revision: 526 $'
 
@@ -454,7 +456,7 @@ class NetBIOS:
             except socket.error:
                 pass
         if not has_bind:
-            raise NetBIOSError, ( 'Cannot bind to a good UDP port', 
ERRCLASS_OS, errno.EAGAIN )
+            raise NetBIOSError( 'Cannot bind to a good UDP port', ERRCLASS_OS, 
errno.EAGAIN)
         self.__sock = s
 
     # Set the default NetBIOS domain nameserver.
@@ -531,15 +533,15 @@ class NetBIOS:
                             if res.get_rcode() == 0x03:
                                 return None
                             else:
-                                raise NetBIOSError, ( 'Negative name query 
response', ERRCLASS_QUERY, res.get_rcode() )
+                                raise NetBIOSError( 'Negative name query 
response', ERRCLASS_QUERY, res.get_rcode())
                         
                         if res.get_ancount() != 1:
                             raise NetBIOSError( 'Malformed response')
                         
                         return NBPositiveNameQueryResponse(res.get_answers())
-            except select.error, ex:
+            except select.error as ex:
                 if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
-                    raise NetBIOSError, ( 'Error occurs while waiting for 
response', ERRCLASS_OS, ex[0] )
+                    raise NetBIOSError( 'Error occurs while waiting for 
response', ERRCLASS_OS, ex[0])
                 raise
 
 
@@ -570,25 +572,25 @@ class NetBIOS:
                 else:
                     try:
                         data, _ = self.__sock.recvfrom(65536, 0)
-                    except Exception, e:
-                        raise NetBIOSError, "recvfrom error: %s" % str(e)
+                    except Exception as e:
+                        raise NetBIOSError("recvfrom error: %s" % str(e))
                     self.__sock.close()
                     res = NetBIOSPacket(data)
                     if res.get_trn_id() == p.get_trn_id():
                         if res.get_rcode():
                             if res.get_rcode() == 0x03:
                                 # I'm just guessing here
-                                raise NetBIOSError, "Cannot get data from 
server"
+                                raise NetBIOSError("Cannot get data from 
server")
                             else:
-                                raise NetBIOSError, ( 'Negative name query 
response', ERRCLASS_QUERY, res.get_rcode() )
+                                raise NetBIOSError( 'Negative name query 
response', ERRCLASS_QUERY, res.get_rcode())
                         answ = NBNodeStatusResponse(res.get_answers())
                         self.mac = answ.get_mac()
                         return answ.get_node_names()
-            except select.error, ex:
+            except select.error as ex:
                 if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
-                    raise NetBIOSError, ( 'Error occurs while waiting for 
response', ERRCLASS_OS, ex[0] )
-            except socket.error, ex:
-                raise NetBIOSError, 'Connection error: %s' % str(ex)
+                    raise NetBIOSError( 'Error occurs while waiting for 
response', ERRCLASS_OS, ex[0])
+            except socket.error as ex:
+                raise NetBIOSError('Connection error: %s' % str(ex))
 
 # Perform first and second level encoding of name as specified in RFC 1001 
(Section 4)
 def encode_name(name, type, scope):
@@ -841,7 +843,7 @@ class NetBIOSTCPSession(NetBIOSSession):
             af, socktype, proto, canonname, sa = socket.getaddrinfo(peer[0], 
peer[1], 0, socket.SOCK_STREAM)[0]
             sock = socket.socket(af, socktype, proto)
             sock.connect(sa)
-        except socket.error, e:
+        except socket.error as e:
             raise socket.error("Connection error (%s:%s)" % (peer[0], 
peer[1]), e)
         return sock
 
@@ -866,7 +868,7 @@ class NetBIOSTCPSession(NetBIOSSession):
         while 1:
             p = self.recv_packet(timeout)
             if p.get_type() == NETBIOS_SESSION_NEGATIVE_RESPONSE:
-                raise NetBIOSError, ( 'Cannot request session', 
ERRCLASS_SESSION, ord(p.get_trailer()[0]) )
+                raise NetBIOSError( 'Cannot request session', 
ERRCLASS_SESSION, ord(p.get_trailer()[0]))
             elif p.get_type() == NETBIOS_SESSION_POSITIVE_RESPONSE:
                 break
             else:
@@ -896,13 +898,13 @@ class NetBIOSTCPSession(NetBIOSSession):
 
                 received = self._sock.recv(bytes_left)
                 if len(received) == 0:
-                    raise NetBIOSError, ( 'Error while reading from remote', 
ERRCLASS_OS, None)
+                    raise NetBIOSError( 'Error while reading from remote', 
ERRCLASS_OS, None)
 
                 data = data + received
                 bytes_left = read_length - len(data)
-            except select.error, ex:
+            except select.error as ex:
                 if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
-                    raise NetBIOSError, ( 'Error occurs while reading from 
remote', ERRCLASS_OS, ex[0] )
+                    raise NetBIOSError( 'Error occurs while reading from 
remote', ERRCLASS_OS, ex[0])
 
         return data
 
@@ -919,13 +921,13 @@ class NetBIOSTCPSession(NetBIOSSession):
 
                 received = self._sock.recv(bytes_left)
                 if len(received) == 0:
-                    raise NetBIOSError, ( 'Error while reading from remote', 
ERRCLASS_OS, None)
+                    raise NetBIOSError( 'Error while reading from remote', 
ERRCLASS_OS, None)
 
                 data = data + received
                 bytes_left = read_length - len(data)
-            except select.error, ex:
+            except select.error as ex:
                 if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
-                    raise NetBIOSError, ( 'Error occurs while reading from 
remote', ERRCLASS_OS, ex[0] )
+                    raise NetBIOSError( 'Error occurs while reading from 
remote', ERRCLASS_OS, ex[0])
 
         return data
 
@@ -974,7 +976,7 @@ def main():
                 
     
     n = get_netbios_host_by_name("some-host")
-    print n
+    print(n)
 
 if __name__ == '__main__':
     main()
diff --git a/tests/python_dependencies/impacket/ntlm.py 
b/tests/python_dependencies/impacket/ntlm.py
index 8376644bd..8845e9d50 100644
--- a/tests/python_dependencies/impacket/ntlm.py
+++ b/tests/python_dependencies/impacket/ntlm.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
 # Copyright (c) 2003-2016 CORE Security Technologies:
 #
 # This software is provided under under a slightly modified version
@@ -17,8 +18,8 @@ from impacket.structure import Structure
 from impacket import LOG
 
 
-# This is important. NTLMv2 is not negotiated by the client or server. 
-# It is used if set locally on both sides. Change this item if you don't want 
to use 
+# This is important. NTLMv2 is not negotiated by the client or server.
+# It is used if set locally on both sides. Change this item if you don't want 
to use
 # NTLMv2 by default and fall back to NTLMv1 (with EXTENDED_SESSION_SECURITY or 
not)
 # Check the following links:
 # http://davenport.sourceforge.net/ntlm.html
@@ -209,7 +210,7 @@ class AV_PAIRS():
         self.fields[key] = (len(value),value)
 
     def __getitem__(self, key):
-        if self.fields.has_key(key):
+        if key in self.fields:
            return self.fields[key]
         return None
 
@@ -236,16 +237,16 @@ class AV_PAIRS():
 
     def dump(self):
         for i in self.fields.keys():
-            print "%s: {%r}" % (i,self[i])
+            print("%s: {%r}" % (i,self[i]))
 
     def getData(self):
-        if self.fields.has_key(NTLMSSP_AV_EOL):
+        if NTLMSSP_AV_EOL in self.fields:
             del self.fields[NTLMSSP_AV_EOL]
         ans = ''
         for i in self.fields.keys():
             ans+= struct.pack('<HH', i, self[i][0])
             ans+= self[i][1]
- 
+
         # end with a NTLMSSP_AV_EOL
         ans += struct.pack('<HH', NTLMSSP_AV_EOL, 0)
 
@@ -260,7 +261,7 @@ class NTLMAuthMixin:
             minor_v = struct.unpack('B',self['os_version'][1])[0]
             build_v = struct.unpack('H',self['os_version'][2:4])
             return (mayor_v,minor_v,build_v)
-        
+
 class NTLMAuthNegotiate(Structure, NTLMAuthMixin):
 
     structure = (
@@ -276,7 +277,7 @@ class NTLMAuthNegotiate(Structure, NTLMAuthMixin):
         ('os_version',':'),
         ('host_name',':'),
         ('domain_name',':'))
-                                                                               
 
+
     def __init__(self):
         Structure.__init__(self)
         self['flags']= (
@@ -293,7 +294,7 @@ class NTLMAuthNegotiate(Structure, NTLMAuthMixin):
         self['host_name']=''
         self['domain_name']=''
         self['os_version']=''
-    
+
     def getData(self):
         if len(self.fields['host_name']) > 0:
             self['flags'] |= NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED
@@ -342,7 +343,7 @@ class NTLMAuthChallenge(Structure):
         ('TargetInfoFields_len','<H-TargetInfoFields'),
         ('TargetInfoFields_max_len','<H-TargetInfoFields'),
         ('TargetInfoFields_offset','<L'),
-        ('VersionLen','_-Version','self.checkVersion(self["flags"])'), 
+        ('VersionLen','_-Version','self.checkVersion(self["flags"])'),
         ('Version',':'),
         ('domain_name',':'),
         ('TargetInfoFields',':'))
@@ -365,11 +366,11 @@ class NTLMAuthChallenge(Structure):
         self['TargetInfoFields'] = 
self['TargetInfoFields'][:self['TargetInfoFields_len']]
         # We gotta process the TargetInfoFields
         #if self['TargetInfoFields_len'] > 0:
-        #    av_pairs = 
AV_PAIRS(self['TargetInfoFields'][:self['TargetInfoFields_len']]) 
+        #    av_pairs = 
AV_PAIRS(self['TargetInfoFields'][:self['TargetInfoFields_len']])
         #    self['TargetInfoFields'] = av_pairs
 
         return self
-        
+
 class NTLMAuthChallengeResponse(Structure, NTLMAuthMixin):
 
     structure = (
@@ -394,7 +395,7 @@ class NTLMAuthChallengeResponse(Structure, NTLMAuthMixin):
         ('session_key_max_len','<H-session_key'),
         ('session_key_offset','<L'),
         ('flags','<L'),
-        ('VersionLen','_-Version','self.checkVersion(self["flags"])'), 
+        ('VersionLen','_-Version','self.checkVersion(self["flags"])'),
         ('Version',':=""'),
         ('MICLen','_-MIC','self.checkMIC(self["flags"])'),
         ('MIC',':=""'),
@@ -424,7 +425,7 @@ class NTLMAuthChallengeResponse(Structure, NTLMAuthMixin):
            # NTLMSSP_TARGET      |
            0)
         # Here we do the stuff
-        if username and ( lmhash != '' or nthash != ''):            
+        if username and ( lmhash != '' or nthash != ''):
             self['lanman'] = get_ntlmv1_response(lmhash, challenge)
             self['ntlm'] = get_ntlmv1_response(nthash, challenge)
         elif (username and password):
@@ -450,7 +451,7 @@ class NTLMAuthChallengeResponse(Structure, NTLMAuthMixin):
            if flags & NTLMSSP_NEGOTIATE_VERSION == 0:
               return 0
         return 16
-                                                                               
 
+
     def getData(self):
         
self['domain_offset']=64+self.checkMIC(self["flags"])+self.checkVersion(self["flags"])
         
self['user_offset']=64+self.checkMIC(self["flags"])+self.checkVersion(self["flags"])+len(self['domain_name'])
@@ -463,7 +464,7 @@ class NTLMAuthChallengeResponse(Structure, NTLMAuthMixin):
     def fromString(self,data):
         Structure.fromString(self,data)
         # [MS-NLMP] page 27
-        # Payload data can be present in any order within the Payload field, 
+        # Payload data can be present in any order within the Payload field,
         # with variable-length padding before or after the data
 
         domain_offset = self['domain_offset']
@@ -478,15 +479,15 @@ class NTLMAuthChallengeResponse(Structure, NTLMAuthMixin):
         user_end    = self['user_len'] + user_offset
         self['user_name'] = data[ user_offset: user_end ]
 
-        ntlm_offset = self['ntlm_offset'] 
-        ntlm_end    = self['ntlm_len'] + ntlm_offset 
+        ntlm_offset = self['ntlm_offset']
+        ntlm_end    = self['ntlm_len'] + ntlm_offset
         self['ntlm'] = data[ ntlm_offset : ntlm_end ]
 
-        lanman_offset = self['lanman_offset'] 
+        lanman_offset = self['lanman_offset']
         lanman_end    = self['lanman_len'] + lanman_offset
         self['lanman'] = data[ lanman_offset : lanman_end]
 
-        #if len(data) >= 36: 
+        #if len(data) >= 36:
         #    self['os_version'] = data[32:36]
         #else:
         #    self['os_version'] = ''
@@ -607,11 +608,11 @@ def getNTLMSSPType3(type1, type2, user, password, domain, 
lmhash = '', nthash =
     # Let's start with the original flags sent in the type1 message
     responseFlags = type1['flags']
 
-    # Token received and parsed. Depending on the authentication 
+    # Token received and parsed. Depending on the authentication
     # method we will create a valid ChallengeResponse
     ntlmChallengeResponse = NTLMAuthChallengeResponse(user, password, 
ntlmChallenge['challenge'])
 
-    clientChallenge = "".join([random.choice(string.digits+string.letters) for 
i in xrange(8)])
+    clientChallenge = "".join([random.choice(string.digits+string.letters) for 
i in range(8)])
 
     serverName = ntlmChallenge['TargetInfoFields']
 
@@ -647,7 +648,7 @@ def getNTLMSSPType3(type1, type2, user, password, domain, 
lmhash = '', nthash =
     if ntlmChallenge['flags'] & NTLMSSP_NEGOTIATE_KEY_EXCH:
        # not exactly what I call random tho :\
        # exportedSessionKey = this is the key we should use to sign
-       exportedSessionKey = 
"".join([random.choice(string.digits+string.letters) for i in xrange(16)])
+       exportedSessionKey = 
"".join([random.choice(string.digits+string.letters) for i in range(16)])
        #exportedSessionKey = "A"*16
        #print "keyExchangeKey %r" % keyExchangeKey
        # Let's generate the right session key based on the challenge flags
@@ -677,7 +678,7 @@ def getNTLMSSPType3(type1, type2, user, password, domain, 
lmhash = '', nthash =
     ntlmChallengeResponse['domain_name'] = domain.encode('utf-16le')
     ntlmChallengeResponse['lanman'] = lmResponse
     ntlmChallengeResponse['ntlm'] = ntResponse
-    if encryptedRandomSessionKey is not None: 
+    if encryptedRandomSessionKey is not None:
         ntlmChallengeResponse['session_key'] = encryptedRandomSessionKey
 
     return ntlmChallengeResponse, exportedSessionKey
@@ -688,13 +689,13 @@ def getNTLMSSPType3(type1, type2, user, password, domain, 
lmhash = '', nthash =
 def generateSessionKeyV1(password, lmhash, nthash):
     if POW:
         hash = POW.Digest(POW.MD4_DIGEST)
-    else:        
+    else:
         hash = MD4.new()
     hash.update(NTOWFv1(password, lmhash, nthash))
     return hash.digest()
-    
+
 def computeResponseNTLMv1(flags, serverChallenge, clientChallenge, serverName, 
domain, user, password, lmhash='', nthash='', use_ntlmv2 = USE_NTLMv2):
-    if (user == '' and password == ''): 
+    if (user == '' and password == ''):
         # Special case for anonymous authentication
         lmResponse = ''
         ntResponse = ''
@@ -713,7 +714,7 @@ def computeResponseNTLMv1(flags, serverChallenge, 
clientChallenge, serverName, d
         else:
            ntResponse = get_ntlmv1_response(nthash,serverChallenge)
            lmResponse = get_ntlmv1_response(lmhash, serverChallenge)
-   
+
     sessionBaseKey = generateSessionKeyV1(password, lmhash, nthash)
     return ntResponse, lmResponse, sessionBaseKey
 
@@ -727,7 +728,7 @@ def compute_lmhash(password):
 def NTOWFv1(password, lmhash = '', nthash=''):
     if nthash != '':
        return nthash
-    return compute_nthash(password)   
+    return compute_nthash(password)
 
 def LMOWFv1(password, lmhash = '', nthash=''):
     if lmhash != '':
@@ -738,13 +739,15 @@ def compute_nthash(password):
     # This is done according to Samba's encryption specification 
(docs/html/ENCRYPTION.html)
     try:
         password = unicode(password).encode('utf_16le')
+    except NameError:  # unicode() was removed in Python 3
+        password = str(password).encode('utf_16le')
     except UnicodeDecodeError:
         import sys
         password = 
password.decode(sys.getfilesystemencoding()).encode('utf_16le')
 
     if POW:
         hash = POW.Digest(POW.MD4_DIGEST)
-    else:        
+    else:
         hash = MD4.new()
     hash.update(password)
     return hash.digest()
@@ -780,7 +783,7 @@ def MAC(flags, handle, signingKey, seqNum, message):
        messageSignature['SeqNum'] = handle('\x00\x00\x00\x00')
        messageSignature['SeqNum'] = 
struct.unpack('<i',messageSignature['SeqNum'])[0] ^ seqNum
        messageSignature['RandomPad'] = 0
-       
+
    return messageSignature
 
 def SEAL(flags, signingKey, sealingKey, messageToSign, messageToEncrypt, 
seqNum, handle):
@@ -863,7 +866,7 @@ def KXKEY(flags, sessionBaseKey, lmChallengeResponse, 
serverChallenge, password,
        raise "Can't create a valid KXKEY!"
 
    return keyExchangeKey
-      
+
 def hmac_md5(key, data):
     if POW:
         h = POW.Hmac(POW.MD5_DIGEST, key)
@@ -878,7 +881,7 @@ def hmac_md5(key, data):
 
 def NTOWFv2( user, password, domain, hash = ''):
     if hash != '':
-       theHash = hash 
+       theHash = hash
     else:
        theHash = compute_nthash(password)
     return hmac_md5(theHash, user.upper().encode('utf-16le') + 
domain.encode('utf-16le'))
@@ -907,7 +910,7 @@ def computeResponseNTLMv2(flags, serverChallenge, 
clientChallenge,  serverName,
        #aTime = '\x00'*8
        av_pairs[NTLMSSP_AV_TIME] = aTime
     serverName = av_pairs.getData()
-          
+
     ######################
     #aTime = '\x00'*8
     ######################
@@ -937,20 +940,20 @@ class NTLM_HTTP(object):
         if msg_64 != '':
             msg = base64.b64decode(msg_64[5:]) # Remove the 'NTLM '
             msg_type = ord(msg[8])
-    
+
         for _cls in NTLM_HTTP.__subclasses__():
             if msg_type == _cls.MSG_TYPE:
                 instance = _cls()
                 instance.fromString(msg)
                 return instance
 
-    
+
 class NTLM_HTTP_AuthRequired(NTLM_HTTP):
     commonHdr = ()
     # Message 0 means the first HTTP request e.g. 'GET /bla.png'
     MSG_TYPE = 0
 
-    def fromString(self,data): 
+    def fromString(self,data):
         pass
 
 
@@ -968,4 +971,3 @@ class NTLM_HTTP_AuthChallengeResponse(NTLM_HTTP, 
NTLMAuthChallengeResponse):
 
     def __init__(self):
         NTLMAuthChallengeResponse.__init__(self)
-
diff --git a/tests/python_dependencies/impacket/smb.py 
b/tests/python_dependencies/impacket/smb.py
index 95efb2c63..c4ea6fc68 100644
--- a/tests/python_dependencies/impacket/smb.py
+++ b/tests/python_dependencies/impacket/smb.py
@@ -629,9 +629,9 @@ class SharedFile:
     @staticmethod
     def __convert_smbtime(t):
         x = t >> 32
-        y = t & 0xffffffffL
+        y = t & 0xffffffff
         geo_cal_offset = 11644473600.0  # = 369.0 * 365.25 * 24 * 60 * 60 - 
(3.0 * 24 * 60 * 60 + 6.0 * 60 * 60)
-        return (x * 4.0 * (1 << 30) + (y & 0xfff00000L)) * 1.0e-7 - 
geo_cal_offset
+        return (x * 4.0 * (1 << 30) + (y & 0xfff00000)) * 1.0e-7 - 
geo_cal_offset
 
 
 # Contain information about a SMB machine
@@ -676,12 +676,12 @@ class NewSMBPacket(Structure):
     def __init__(self, **kargs):
         Structure.__init__(self, **kargs)
 
-        if self.fields.has_key('Flags2') is False:
+        if ('Flags2' in self.fields) is False:
              self['Flags2'] = 0
-        if self.fields.has_key('Flags1') is False:
+        if ('Flags1' in self.fields) is False:
              self['Flags1'] = 0
 
-        if not kargs.has_key('data'):
+        if 'data' not in kargs:
             self['Data'] = []
 
     def addCommand(self, command):
@@ -709,9 +709,9 @@ class NewSMBPacket(Structure):
                 return 1
             elif self.isMoreProcessingRequired():
                 return 1
-            raise SessionError, ("SMB Library Error", self['ErrorClass'] + 
(self['_reserved'] << 8), self['ErrorCode'], self['Flags2'] & 
SMB.FLAGS2_NT_STATUS)
+            raise SessionError("SMB Library Error", self['ErrorClass'] + 
(self['_reserved'] << 8), self['ErrorCode'], self['Flags2'] & 
SMB.FLAGS2_NT_STATUS)
         else:
-            raise UnsupportedFeature, ("Unexpected answer from server: Got %d, 
Expected %d" % (self['Command'], cmd))
+            raise UnsupportedFeature("Unexpected answer from server: Got %d, 
Expected %d" % (self['Command'], cmd))
 
 
 class SMBCommand(Structure):
@@ -2550,7 +2550,7 @@ class SMB:
                     if s.get_error_class() == 0x00 and s.get_error_code() == 
0x00:
                         return 1
                     else:
-                        raise SessionError, ( "SMB Library Error", 
s.get_error_class()+ (s.get_reserved() << 8), s.get_error_code() , 
s.get_flags2() & SMB.FLAGS2_NT_STATUS )
+                        raise SessionError( "SMB Library Error", 
s.get_error_class()+ (s.get_reserved() << 8), s.get_error_code() , 
s.get_flags2() & SMB.FLAGS2_NT_STATUS)
                 else:
                     break
         return 0
@@ -2583,7 +2583,7 @@ class SMB:
                         self.__server_name = self._dialects_data['ServerName']
 
                     if self._dialects_parameters['DialectIndex'] == 0xffff:
-                        raise UnsupportedFeature,"Remote server does not know 
NT LM 0.12"
+                        raise UnsupportedFeature("Remote server does not know 
NT LM 0.12")
                     return 1
             else:
                 return 0
@@ -2734,7 +2734,7 @@ class SMB:
         self._SigningSessionKey = key
 
     def get_encryption_key(self):
-        if self._dialects_data.fields.has_key('Challenge'):
+        if 'Challenge' in self._dialects_data.fields:
             return self._dialects_data['Challenge']
         else:
             return None
@@ -3241,7 +3241,7 @@ class SMB:
                        pass
 
             # Parse Version to know the target Operating system name. Not 
provided elsewhere anymore
-            if ntlmChallenge.fields.has_key('Version'):
+            if 'Version' in ntlmChallenge.fields:
                 version = ntlmChallenge['Version']
 
                 if len(version) >= 4:
diff --git a/tests/python_dependencies/impacket/smb3.py 
b/tests/python_dependencies/impacket/smb3.py
index 5548e4b0c..d81c7e117 100644
--- a/tests/python_dependencies/impacket/smb3.py
+++ b/tests/python_dependencies/impacket/smb3.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
 # Copyright (c) 2003-2016 CORE Security Technologies
 #
 # This software is provided under under a slightly modified version
@@ -231,13 +232,13 @@ class SMB3:
             self.negotiateSession(preferredDialect)
 
     def printStatus(self):
-        print "CONNECTION"
+        print("CONNECTION")
         for i in self._Connection.items():
-            print "%-40s : %s" % i
-        print
-        print "SESSION"
+            print("%-40s : %s" % i)
+        print()
+        print("SESSION")
         for i in self._Session.items():
-            print "%-40s : %s" % i
+            print("%-40s : %s" % i)
 
     def getServerName(self):
         return self._Session['ServerName']
@@ -308,7 +309,7 @@ class SMB3:
         packet['SessionID'] = self._Session['SessionID']
 
         # Default the credit charge to 1 unless set by the caller
-        if packet.fields.has_key('CreditCharge') is False:
+        if ('CreditCharge' in packet.fields) is False:
             packet['CreditCharge'] = 1
 
         # Standard credit request after negotiating protocol
@@ -318,7 +319,7 @@ class SMB3:
         messageId = packet['MessageID']
 
         if self._Session['SigningActivated'] is True and 
self._Connection['SequenceWindow'] > 2:
-            if packet['TreeID'] > 0 and 
self._Session['TreeConnectTable'].has_key(packet['TreeID']) is True:
+            if packet['TreeID'] > 0 and (packet['TreeID'] in 
self._Session['TreeConnectTable']) is True:
                 if 
self._Session['TreeConnectTable'][packet['TreeID']]['EncryptData'] is False:
                     packet['Flags'] = SMB2_FLAGS_SIGNED
                     self.signSMB(packet)
@@ -350,7 +351,7 @@ class SMB3:
 
     def recvSMB(self, packetID = None):
         # First, verify we don't have the packet already
-        if self._Connection['OutstandingResponses'].has_key(packetID):
+        if packetID in self._Connection['OutstandingResponses']:
             return self._Connection['OutstandingResponses'].pop(packetID) 
 
         data = self._NetBIOSSession.recv_packet(self._timeout) 
@@ -727,7 +728,7 @@ class SMB3:
                        pass 
 
                 # Parse Version to know the target Operating system name. Not 
provided elsewhere anymore
-                if ntlmChallenge.fields.has_key('Version'):
+                if 'Version' in ntlmChallenge.fields:
                     version = ntlmChallenge['Version']
 
                     if len(version) >= 4:
@@ -785,7 +786,7 @@ class SMB3:
 
         #print self._Session['TreeConnectTable']
         share = share.split('\\')[-1]
-        if self._Session['TreeConnectTable'].has_key(share):
+        if share in self._Session['TreeConnectTable']:
             # Already connected, no need to reconnect
             treeEntry =  self._Session['TreeConnectTable'][share]
             treeEntry['NumberOfUses'] += 1
@@ -837,10 +838,10 @@ class SMB3:
            return packet['TreeID'] 
 
     def disconnectTree(self, treeId):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
-        if self._Session['TreeConnectTable'].has_key(treeId):
+        if treeId in self._Session['TreeConnectTable']:
             # More than 1 use? descrease it and return, if not, send the packet
             if self._Session['TreeConnectTable'][treeId]['NumberOfUses'] > 1:
                 treeEntry =  self._Session['TreeConnectTable'][treeId]
@@ -862,7 +863,7 @@ class SMB3:
             return True
 
     def create(self, treeId, fileName, desiredAccess, shareMode, 
creationOptions, creationDisposition, fileAttributes, impersonationLevel = 
SMB2_IL_IMPERSONATION, securityFlags = 0, oplockLevel = SMB2_OPLOCK_LEVEL_NONE, 
createContexts = None):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         fileName = string.replace(fileName, '/', '\\')
@@ -885,7 +886,7 @@ class SMB3:
            # Is this file NOT on the root directory?
            if len(fileName.split('\\')) > 2:
                parentDir = ntpath.dirname(pathName)
-           if self.GlobalFileTable.has_key(parentDir):
+           if parentDir in self.GlobalFileTable:
                LOG.critical("Don't know what to do now! :-o")
                raise
            else:
@@ -957,9 +958,9 @@ class SMB3:
             return str(createResponse['FileID'])
 
     def close(self, treeId, fileId):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -988,9 +989,9 @@ class SMB3:
         # This function should NOT be used for reading files directly, but 
another higher
         # level function should be used that will break the read into smaller 
pieces
 
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1030,9 +1031,9 @@ class SMB3:
         # This function should NOT be used for writing directly to files, but 
another higher
         # level function should be used that will break the writes into 
smaller pieces
 
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1071,9 +1072,9 @@ class SMB3:
             return bytesWritten
 
     def queryDirectory(self, treeId, fileId, searchString = '*', resumeIndex = 
0, informationClass = FILENAMES_INFORMATION, maxBufferSize = None, enumRestart 
= False, singleEntry = False):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1124,12 +1125,12 @@ class SMB3:
         self.sendSMB(packet)
 
     def ioctl(self, treeId, fileId = None, ctlCode = -1, flags = 0, inputBlob 
= '',  maxInputResponse = None, maxOutputResponse = None, waitAnswer = 1):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
         if fileId is None:
             fileId = '\xff'*16
         else:
-            if self._Session['OpenTable'].has_key(fileId) is False:
+            if (fileId in self._Session['OpenTable']) is False:
                 raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1165,9 +1166,9 @@ class SMB3:
             return smbIoctlResponse['Buffer']
 
     def flush(self,treeId, fileId):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1186,9 +1187,9 @@ class SMB3:
             return True
 
     def lock(self, treeId, fileId, locks, lockSequence = 0):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1248,9 +1249,9 @@ class SMB3:
             return True
 
     def queryInfo(self, treeId, fileId, inputBlob = '', infoType = 
SMB2_0_INFO_FILE, fileInfoClass = SMB2_FILE_STANDARD_INFO, 
additionalInformation = 0, flags = 0 ):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1280,9 +1281,9 @@ class SMB3:
             return queryResponse['Buffer']
 
     def setInfo(self, treeId, fileId, inputBlob = '', infoType = 
SMB2_0_INFO_FILE, fileInfoClass = SMB2_FILE_STANDARD_INFO, 
additionalInformation = 0 ):
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
-        if self._Session['OpenTable'].has_key(fileId) is False:
+        if (fileId in self._Session['OpenTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
 
         packet = self.SMB_PACKET()
@@ -1385,7 +1386,7 @@ class SMB3:
                         
files.append(smb.SharedFile(fileInfo['CreationTime'],fileInfo['LastAccessTime'],fileInfo['LastChangeTime'],fileInfo['EndOfFile'],fileInfo['AllocationSize'],fileInfo['ExtFileAttributes'],fileInfo['FileName'].decode('utf-16le'),
 fileInfo['FileName'].decode('utf-16le')))
                         nextOffset = fileInfo['NextEntryOffset']
                         res = res[nextOffset:]
-                except SessionError, e:
+                except SessionError as e:
                     if (e.get_error_code()) != STATUS_NO_MORE_FILES:
                         raise
                     break 
@@ -1512,7 +1513,7 @@ class SMB3:
 
     def waitNamedPipe(self, treeId, pipename, timeout = 5):
         pipename = ntpath.basename(pipename)
-        if self._Session['TreeConnectTable'].has_key(treeId) is False:
+        if (treeId in self._Session['TreeConnectTable']) is False:
             raise SessionError(STATUS_INVALID_PARAMETER)
         if len(pipename) > 0xffff:
             raise SessionError(STATUS_INVALID_PARAMETER)
diff --git a/tests/python_dependencies/impacket/smbserver.py 
b/tests/python_dependencies/impacket/smbserver.py
index aa795e52e..3473c9f0c 100644
--- a/tests/python_dependencies/impacket/smbserver.py
+++ b/tests/python_dependencies/impacket/smbserver.py
@@ -54,6 +54,12 @@ from impacket.nt_errors import STATUS_NO_MORE_FILES, 
STATUS_NETWORK_NAME_DELETED
 STATUS_SMB_BAD_UID = 0x005B0002
 STATUS_SMB_BAD_TID = 0x00050002
 
+try:
+    unicode        # Python 2
+except NameError:
+    unicode = str  # Python 3
+
+
 # Utility functions
 # and general functions.
 # There are some common functions that can be accessed from more than one SMB
@@ -80,7 +86,7 @@ def outputToJohnFormat(challenge, username, domain, 
lmresponse, ntresponse):
             else:
                 # NTLMv1
                 ret_value = {'hash_string':'%s::%s:%s:%s:%s' % (username, 
domain, hexlify(lmresponse), hexlify(ntresponse), hexlify(challenge)), 
'hash_version':'ntlm'}
-        except Exception, e:
+        except Exception as e:
             LOG.error("outputToJohnFormat: %s" % e)
             pass
 
@@ -183,7 +189,7 @@ def openFile(path,fileName, accessMode, fileAttributes, 
openMode):
         if sys.platform == 'win32':
             mode |= os.O_BINARY
         fid = os.open(pathName, mode)
-    except Exception, e:
+    except Exception as e:
         LOG.error("openFile: %s,%s" % (pathName, mode) ,e)
         fid = 0
         errorCode = STATUS_ACCESS_DENIED
@@ -442,7 +448,7 @@ def queryPathInformation(path, filename, level):
     else:
         # NOT FOUND
         return None, STATUS_OBJECT_NAME_NOT_FOUND
-  except Exception, e:
+  except Exception as e:
       LOG.error('queryPathInfo: %s' % e)
       raise
 
@@ -486,7 +492,7 @@ class TRANSCommands:
                     # (beto) If offset == 0 it crashes explorer.exe on windows 
7
                     entry['RemarkOffsetLow'] = 20 * len(shares) + len(tailData)
                     respData += entry.getData()
-                    if shares[i].has_key('comment'):
+                    if 'comment' in shares[i]:
                         tailData += shares[i]['comment'] + '\x00'
                     else:
                         tailData += '\x00'
@@ -511,7 +517,7 @@ class TRANSCommands:
             shareInfo['NetworkName'] = request['ShareName'].upper() + '\x00'
             shareInfo['Type']        = int(share['share type'])
             respData = shareInfo.getData()
-            if share.has_key('comment'):
+            if 'comment' in share:
                 shareInfo['RemarkOffsetLow'] = len(respData)
                 respData += share['comment'] + '\x00'
             respParameters['TotalBytesAvailable'] = len(respData)
@@ -538,7 +544,7 @@ class TRANSCommands:
         # Extract the FID
         fid = struct.unpack('<H', transParameters['Setup'][2:])[0]
 
-        if connData['OpenedFiles'].has_key(fid):
+        if fid in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][fid]['FileHandle']
             if fileHandle != PIPE_FILE_DESCRIPTOR:
                 os.write(fileHandle,data)
@@ -566,7 +572,7 @@ class TRANS2Commands:
         respData = ''
         errorCode = STATUS_SUCCESS
         setPathInfoParameters = smb.SMBSetPathInformation_Parameters(flags = 
recvPacket['Flags2'], data = parameters)
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
             path     = connData['ConnectedShares'][recvPacket['Tid']]['path']
             fileName = decodeSMBString(recvPacket['Flags2'], 
setPathInfoParameters['FileName'])
             fileName = os.path.normpath(fileName.replace('\\','/'))
@@ -619,8 +625,8 @@ class TRANS2Commands:
         errorCode = STATUS_SUCCESS
         setFileInfoParameters = 
smb.SMBSetFileInformation_Parameters(parameters)
 
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
-            if connData['OpenedFiles'].has_key(setFileInfoParameters['FID']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
+            if setFileInfoParameters['FID'] in connData['OpenedFiles']:
                 fileName = 
connData['OpenedFiles'][setFileInfoParameters['FID']]['FileName']
                 informationLevel = setFileInfoParameters['InformationLevel']
                 if informationLevel == smb.SMB_SET_FILE_DISPOSITION_INFO:
@@ -675,8 +681,8 @@ class TRANS2Commands:
 
         queryFileInfoParameters = 
smb.SMBQueryFileInformation_Parameters(parameters)
 
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
-            if connData['OpenedFiles'].has_key(queryFileInfoParameters['FID']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
+            if queryFileInfoParameters['FID'] in connData['OpenedFiles']:
                 fileName = 
connData['OpenedFiles'][queryFileInfoParameters['FID']]['FileName']
 
                 infoRecord, errorCode = queryFileInformation('', fileName, 
queryFileInfoParameters['InformationLevel'])
@@ -704,11 +710,11 @@ class TRANS2Commands:
 
         queryPathInfoParameters = smb.SMBQueryPathInformation_Parameters(flags 
= recvPacket['Flags2'], data = parameters)
 
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
             try:
                infoRecord, errorCode = queryPathInformation(path, 
decodeSMBString(recvPacket['Flags2'], queryPathInfoParameters['FileName']), 
queryPathInfoParameters['InformationLevel'])
-            except Exception, e:
+            except Exception as e:
                smbServer.log("queryPathInformation: %s" % e,logging.ERROR)
 
             if infoRecord is not None:
@@ -726,7 +732,7 @@ class TRANS2Commands:
         connData = smbServer.getConnectionData(connId)
         errorCode = 0
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
             data = 
queryFsInformation(connData['ConnectedShares'][recvPacket['Tid']]['path'], '', 
struct.unpack('<H',parameters)[0])
 
         smbServer.setConnectionData(connId, connData)
@@ -744,8 +750,8 @@ class TRANS2Commands:
         findNext2Parameters = smb.SMBFindNext2_Parameters(flags = 
recvPacket['Flags2'], data = parameters)
 
         sid = findNext2Parameters['SID']
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
-            if connData['SIDs'].has_key(sid):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
+            if sid in connData['SIDs']:
                 searchResult = connData['SIDs'][sid]
                 respParameters = smb.SMBFindNext2Response_Parameters()
                 endOfSearch = 1
@@ -790,7 +796,7 @@ class TRANS2Commands:
         respData = ''
         findFirst2Parameters = smb.SMBFindFirst2_Parameters( 
recvPacket['Flags2'], data = parameters)
 
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
 
             searchResult, searchCount, errorCode = findFirst2(path,
@@ -881,7 +887,7 @@ class SMBCommands:
             else:
                 command = struct.unpack('<H', transParameters['Setup'][:2])[0]
 
-            if transCommands.has_key(command):
+            if command in transCommands:
                # Call the TRANS subcommand
                setup = ''
                parameters = ''
@@ -893,7 +899,7 @@ class SMBCommands:
                                 transData['Trans_Parameters'],
                                 transData['Trans_Data'],
                                 transParameters['MaxDataCount'])
-               except Exception, e:
+               except Exception as e:
                    #print 'Transaction: %s' % e,e
                    smbServer.log('Transaction: (%r,%s)' % (command, e), 
logging.ERROR)
                    errorCode = STATUS_ACCESS_DENIED
@@ -1018,7 +1024,7 @@ class SMBCommands:
 
             # Call the handler for this TRANSACTION
             command = NTTransParameters['Function']
-            if transCommands.has_key(command):
+            if command in transCommands:
                # Call the NT TRANS subcommand
                setup = ''
                parameters = ''
@@ -1030,7 +1036,7 @@ class SMBCommands:
                                 NTTransData['NT_Trans_Parameters'],
                                 NTTransData['NT_Trans_Data'],
                                 NTTransParameters['MaxDataCount'])
-               except Exception, e:
+               except Exception as e:
                    smbServer.log('NTTransaction: (0x%x,%s)' % (command, e), 
logging.ERROR)
                    errorCode = STATUS_ACCESS_DENIED
                    #raise
@@ -1157,7 +1163,7 @@ class SMBCommands:
 
             # Call the handler for this TRANSACTION
             command = struct.unpack('<H', trans2Parameters['Setup'])[0]
-            if transCommands.has_key(command):
+            if command in transCommands:
                # Call the TRANS2 subcommand
                try:
                    setup, parameters, data, errorCode = 
transCommands[command](connId,
@@ -1166,7 +1172,7 @@ class SMBCommands:
                                 trans2Data['Trans_Parameters'],
                                 trans2Data['Trans_Data'],
                                 trans2Parameters['MaxDataCount'])
-               except Exception, e:
+               except Exception as e:
                    smbServer.log('Transaction2: (0x%x,%s)' % (command, e), 
logging.ERROR)
                    #import traceback
                    #traceback.print_exc()
@@ -1282,7 +1288,7 @@ class SMBCommands:
 
         comClose =  smb.SMBClose_Parameters(SMBCommand['Parameters'])
 
-        if connData['OpenedFiles'].has_key(comClose['FID']):
+        if comClose['FID'] in connData['OpenedFiles']:
              errorCode = STATUS_SUCCESS
              fileHandle = 
connData['OpenedFiles'][comClose['FID']]['FileHandle']
              try:
@@ -1290,7 +1296,7 @@ class SMBCommands:
                      connData['OpenedFiles'][comClose['FID']]['Socket'].close()
                  elif fileHandle != VOID_FILE_DESCRIPTOR:
                      os.close(fileHandle)
-             except Exception, e:
+             except Exception as e:
                  smbServer.log("comClose %s" % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
              else:
@@ -1298,7 +1304,7 @@ class SMBCommands:
                  if connData['OpenedFiles'][comClose['FID']]['DeleteOnClose'] 
is True:
                      try:
                          
os.remove(connData['OpenedFiles'][comClose['FID']]['FileName'])
-                     except Exception, e:
+                     except Exception as e:
                          smbServer.log("comClose %s" % e, logging.ERROR)
                          errorCode = STATUS_ACCESS_DENIED
                  del(connData['OpenedFiles'][comClose['FID']])
@@ -1326,7 +1332,7 @@ class SMBCommands:
         comWriteParameters =  smb.SMBWrite_Parameters(SMBCommand['Parameters'])
         comWriteData = smb.SMBWrite_Data(SMBCommand['Data'])
 
-        if connData['OpenedFiles'].has_key(comWriteParameters['Fid']):
+        if comWriteParameters['Fid'] in connData['OpenedFiles']:
              fileHandle = 
connData['OpenedFiles'][comWriteParameters['Fid']]['FileHandle']
              errorCode = STATUS_SUCCESS
              try:
@@ -1340,7 +1346,7 @@ class SMBCommands:
                      sock = 
connData['OpenedFiles'][comWriteParameters['Fid']]['Socket']
                      sock.send(comWriteData['Data'])
                  respParameters['Count']    = comWriteParameters['Count']
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('smbComWrite: %s' % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1367,12 +1373,12 @@ class SMBCommands:
 
         comFlush =  smb.SMBFlush_Parameters(SMBCommand['Parameters'])
 
-        if connData['OpenedFiles'].has_key(comFlush['FID']):
+        if comFlush['FID'] in connData['OpenedFiles']:
              errorCode = STATUS_SUCCESS
              fileHandle = 
connData['OpenedFiles'][comFlush['FID']]['FileHandle']
              try:
                  os.fsync(fileHandle)
-             except Exception, e:
+             except Exception as e:
                  smbServer.log("comFlush %s" % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1400,7 +1406,7 @@ class SMBCommands:
         comCreateDirectoryData=  smb.SMBCreateDirectory_Data(flags = 
recvPacket['Flags2'], data = SMBCommand['Data'])
 
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
              errorCode = STATUS_SUCCESS
              path = connData['ConnectedShares'][recvPacket['Tid']]['path']
              fileName = 
os.path.normpath(decodeSMBString(recvPacket['Flags2'],comCreateDirectoryData['DirectoryName']).replace('\\','/'))
@@ -1417,7 +1423,7 @@ class SMBCommands:
              else:
                  try:
                      os.mkdir(pathName)
-                 except Exception, e:
+                 except Exception as e:
                      smbServer.log("smbComCreateDirectory: %s" % e, 
logging.ERROR)
                      errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1444,7 +1450,7 @@ class SMBCommands:
 
         comRenameData      =  smb.SMBRename_Data(flags = recvPacket['Flags2'], 
data = SMBCommand['Data'])
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
              errorCode = STATUS_SUCCESS
              path = connData['ConnectedShares'][recvPacket['Tid']]['path']
              oldFileName = 
os.path.normpath(decodeSMBString(recvPacket['Flags2'],comRenameData['OldFileName']).replace('\\','/'))
@@ -1466,7 +1472,7 @@ class SMBCommands:
              else:
                  try:
                      os.rename(oldPathName,newPathName)
-                 except OSError, e:
+                 except OSError as e:
                      smbServer.log("smbComRename: %s" % e, logging.ERROR)
                      errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1494,7 +1500,7 @@ class SMBCommands:
         comDeleteData         =  smb.SMBDelete_Data(flags = 
recvPacket['Flags2'], data = SMBCommand['Data'])
 
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
              errorCode = STATUS_SUCCESS
              path = connData['ConnectedShares'][recvPacket['Tid']]['path']
              fileName = 
os.path.normpath(decodeSMBString(recvPacket['Flags2'],comDeleteData['FileName']).replace('\\','/'))
@@ -1510,7 +1516,7 @@ class SMBCommands:
              else:
                  try:
                      os.remove(pathName)
-                 except OSError, e:
+                 except OSError as e:
                      smbServer.log("smbComDelete: %s" % e, logging.ERROR)
                      errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1538,7 +1544,7 @@ class SMBCommands:
         comDeleteDirectoryData=  smb.SMBDeleteDirectory_Data(flags = 
recvPacket['Flags2'], data = SMBCommand['Data'])
 
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
              errorCode = STATUS_SUCCESS
              path = connData['ConnectedShares'][recvPacket['Tid']]['path']
              fileName = 
os.path.normpath(decodeSMBString(recvPacket['Flags2'],comDeleteDirectoryData['DirectoryName']).replace('\\','/'))
@@ -1554,7 +1560,7 @@ class SMBCommands:
              else:
                  try:
                      os.rmdir(pathName)
-                 except OSError, e:
+                 except OSError as e:
                      smbServer.log("smbComDeleteDirectory: %s" % 
e,logging.ERROR)
                      if e.errno == errno.ENOTEMPTY:
                          errorCode = STATUS_DIRECTORY_NOT_EMPTY
@@ -1593,13 +1599,13 @@ class SMBCommands:
         writeAndXData.fromString(SMBCommand['Data'])
 
 
-        if connData['OpenedFiles'].has_key(writeAndX['Fid']):
+        if writeAndX['Fid'] in connData['OpenedFiles']:
              fileHandle = 
connData['OpenedFiles'][writeAndX['Fid']]['FileHandle']
              errorCode = STATUS_SUCCESS
              try:
                  if fileHandle != PIPE_FILE_DESCRIPTOR:
                      offset = writeAndX['Offset']
-                     if writeAndX.fields.has_key('HighOffset'):
+                     if 'HighOffset' in writeAndX.fields:
                          offset += (writeAndX['HighOffset'] << 32)
                      # If we're trying to write past the file end we just skip 
the write call (Vista does this)
                      if os.lseek(fileHandle, 0, 2) >= offset:
@@ -1611,7 +1617,7 @@ class SMBCommands:
 
                  respParameters['Count']    = writeAndX['DataLength']
                  respParameters['Available']= 0xff
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('smbComWriteAndx: %s' % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1637,7 +1643,7 @@ class SMBCommands:
 
         comReadParameters =  smb.SMBRead_Parameters(SMBCommand['Parameters'])
 
-        if connData['OpenedFiles'].has_key(comReadParameters['Fid']):
+        if comReadParameters['Fid'] in connData['OpenedFiles']:
              fileHandle = 
connData['OpenedFiles'][comReadParameters['Fid']]['FileHandle']
              errorCode = STATUS_SUCCESS
              try:
@@ -1651,7 +1657,7 @@ class SMBCommands:
                  respParameters['Count']    = len(content)
                  respData['DataLength']     = len(content)
                  respData['Data']           = content
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('smbComRead: %s ' % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1680,13 +1686,13 @@ class SMBCommands:
         else:
             readAndX =  smb.SMBReadAndX_Parameters(SMBCommand['Parameters'])
 
-        if connData['OpenedFiles'].has_key(readAndX['Fid']):
+        if readAndX['Fid'] in connData['OpenedFiles']:
              fileHandle = 
connData['OpenedFiles'][readAndX['Fid']]['FileHandle']
              errorCode = 0
              try:
                  if fileHandle != PIPE_FILE_DESCRIPTOR:
                      offset = readAndX['Offset']
-                     if readAndX.fields.has_key('HighOffset'):
+                     if 'HighOffset' in readAndX.fields:
                          offset += (readAndX['HighOffset'] << 32)
                      os.lseek(fileHandle,offset,0)
                      content = os.read(fileHandle,readAndX['MaxCount'])
@@ -1698,7 +1704,7 @@ class SMBCommands:
                  respParameters['DataOffset']   = 59
                  respParameters['DataCount_Hi'] = 0
                  respData = content
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('smbComReadAndX: %s ' % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -1725,7 +1731,7 @@ class SMBCommands:
         queryInformation= smb.SMBQueryInformation_Data(flags = 
recvPacket['Flags2'], data = SMBCommand['Data'])
 
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
             fileSize, lastWriteTime, fileAttributes = queryFsInformation(
                 connData['ConnectedShares'][recvPacket['Tid']]['path'],
                 
decodeSMBString(recvPacket['Flags2'],queryInformation['FileName']))
@@ -1755,7 +1761,7 @@ class SMBCommands:
         respData       = ''
 
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
             totalUnits, freeUnits = queryDiskInformation(
                         connData['ConnectedShares'][recvPacket['Tid']]['path'])
 
@@ -1807,7 +1813,7 @@ class SMBCommands:
         respParameters = ''
         respData = ''
 
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
             smbServer.log("Disconnecting Share(%d:%s)" % 
(recvPacket['Tid'],connData['ConnectedShares'][recvPacket['Tid']]['shareName']))
             del(connData['ConnectedShares'][recvPacket['Tid']])
             errorCode = STATUS_SUCCESS
@@ -1854,7 +1860,7 @@ class SMBCommands:
 
         queryInformation2 = 
smb.SMBQueryInformation2_Parameters(SMBCommand['Parameters'])
         errorCode = 0xFF
-        if connData['OpenedFiles'].has_key(queryInformation2['Fid']):
+        if queryInformation2['Fid'] in connData['OpenedFiles']:
              errorCode = STATUS_SUCCESS
              pathName = 
connData['OpenedFiles'][queryInformation2['Fid']]['FileName']
              try:
@@ -1873,7 +1879,7 @@ class SMBCommands:
                  if os.path.isfile(pathName):
                      attribs = smb.SMB_FILE_ATTRIBUTE_NORMAL
                  respParameters['FileAttributes'] = attribs
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('smbComQueryInformation2 %s' % e,logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
 
@@ -1904,14 +1910,14 @@ class SMBCommands:
         #    respParameters['VolumeGUID'] = '\x00'
 
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
              # If we have a rootFid, the path is relative to that fid
              errorCode = STATUS_SUCCESS
              if ntCreateAndXParameters['RootFid'] > 0:
                  path = 
connData['OpenedFiles'][ntCreateAndXParameters['RootFid']]['FileName']
                  LOG.debug("RootFid present %s!" % path)
              else:
-                 if 
connData['ConnectedShares'][recvPacket['Tid']].has_key('path'):
+                 if 'path' in connData['ConnectedShares'][recvPacket['Tid']]:
                      path = 
connData['ConnectedShares'][recvPacket['Tid']]['path']
                  else:
                      path = 'NONE'
@@ -1947,7 +1953,7 @@ class SMBCommands:
                  else:
                      mode |= os.O_CREAT
              elif createDisposition & smb.FILE_OPEN == smb.FILE_OPEN:
-                 if os.path.exists(pathName) is not True and 
smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)) is not True:
+                 if os.path.exists(pathName) is not True and 
(unicode(pathName) in smbServer.getRegisteredNamedPipes()) is not True:
                      errorCode = STATUS_NO_SUCH_FILE
 
              if errorCode == STATUS_SUCCESS:
@@ -1969,7 +1975,7 @@ class SMBCommands:
                              # Let's create the directory
                              os.mkdir(pathName)
                              mode = os.O_RDONLY
-                         except Exception, e:
+                         except Exception as e:
                              smbServer.log("NTCreateAndX: %s,%s,%s" % 
(pathName,mode,e),logging.ERROR)
                              errorCode = STATUS_ACCESS_DENIED
                  if createOptions & smb.FILE_NON_DIRECTORY_FILE == 
smb.FILE_NON_DIRECTORY_FILE:
@@ -1989,13 +1995,13 @@ class SMBCommands:
                          else:
                             if sys.platform == 'win32':
                                mode |= os.O_BINARY
-                            if 
smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)):
+                            if unicode(pathName) in 
smbServer.getRegisteredNamedPipes():
                                 fid = PIPE_FILE_DESCRIPTOR
                                 sock = socket.socket()
                                 
sock.connect(smbServer.getRegisteredNamedPipes()[unicode(pathName)])
                             else:
                                 fid = os.open(pathName, mode)
-                     except Exception, e:
+                     except Exception as e:
                          smbServer.log("NTCreateAndX: %s,%s,%s" % 
(pathName,mode,e),logging.ERROR)
                          #print e
                          fid = 0
@@ -2074,7 +2080,7 @@ class SMBCommands:
         openAndXData       = smb.SMBOpenAndX_Data( flags = 
recvPacket['Flags2'], data = SMBCommand['Data'])
 
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
+        if recvPacket['Tid'] in connData['ConnectedShares']:
              path = connData['ConnectedShares'][recvPacket['Tid']]['path']
              openedFile, mode, pathName, errorCode = openFile(path,
                      
decodeSMBString(recvPacket['Flags2'],openAndXData['FileName']),
@@ -2223,7 +2229,7 @@ class SMBCommands:
                    mechType = blob['MechTypes'][0]
                    if mechType != TypesMech['NTLMSSP - Microsoft NTLM Security 
Support Provider']:
                        # Nope, do we know it?
-                       if MechTypes.has_key(mechType):
+                       if mechType in MechTypes:
                            mechStr = MechTypes[mechType]
                        else:
                            mechStr = hexlify(mechType)
@@ -2431,7 +2437,7 @@ class SMBCommands:
                     _dialects_parameters = smb.SMBNTLMDialect_Parameters()
                     _dialects_data= smb.SMBNTLMDialect_Data()
                     _dialects_data['Payload'] = ''
-                    if connData.has_key('EncryptionKey'):
+                    if 'EncryptionKey' in connData:
                         _dialects_data['Challenge'] = connData['EncryptionKey']
                         _dialects_parameters['ChallengeLength'] = 
len(str(_dialects_data))
                     else:
@@ -2463,7 +2469,7 @@ class SMBCommands:
            connData['_dialects_data']       = _dialects_data
            connData['_dialects_parameters'] = _dialects_parameters
 
-        except Exception, e:
+        except Exception as e:
            # No NTLM throw an error
            smbServer.log('smbComNegotiate: %s' % e, logging.ERROR)
            respSMBCommand['Data'] = struct.pack('<H',0xffff)
@@ -2570,7 +2576,7 @@ class SMB2Commands:
                mechType = blob['MechTypes'][0]
                if mechType != TypesMech['NTLMSSP - Microsoft NTLM Security 
Support Provider']:
                    # Nope, do we know it?
-                   if MechTypes.has_key(mechType):
+                   if mechType in MechTypes:
                        mechStr = MechTypes[mechType]
                    else:
                        mechStr = hexlify(mechType)
@@ -2781,10 +2787,10 @@ class SMB2Commands:
 
         respSMBCommand['Buffer'] = '\x00'
         # Get the Tid associated
-        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
+        if recvPacket['TreeID'] in connData['ConnectedShares']:
              # If we have a rootFid, the path is relative to that fid
              errorCode = STATUS_SUCCESS
-             if 
connData['ConnectedShares'][recvPacket['TreeID']].has_key('path'):
+             if 'path' in connData['ConnectedShares'][recvPacket['TreeID']]:
                  path = 
connData['ConnectedShares'][recvPacket['TreeID']]['path']
              else:
                  path = 'NONE'
@@ -2820,7 +2826,7 @@ class SMB2Commands:
                  else:
                      mode |= os.O_CREAT
              elif createDisposition & smb2.FILE_OPEN == smb2.FILE_OPEN:
-                 if os.path.exists(pathName) is not True and 
smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)) is not True:
+                 if os.path.exists(pathName) is not True and 
(unicode(pathName) in smbServer.getRegisteredNamedPipes()) is not True:
                      errorCode = STATUS_NO_SUCH_FILE
 
              if errorCode == STATUS_SUCCESS:
@@ -2842,7 +2848,7 @@ class SMB2Commands:
                              # Let's create the directory
                              os.mkdir(pathName)
                              mode = os.O_RDONLY
-                         except Exception, e:
+                         except Exception as e:
                              smbServer.log("SMB2_CREATE: %s,%s,%s" % 
(pathName,mode,e),logging.ERROR)
                              errorCode = STATUS_ACCESS_DENIED
                  if createOptions & smb2.FILE_NON_DIRECTORY_FILE == 
smb2.FILE_NON_DIRECTORY_FILE:
@@ -2862,13 +2868,13 @@ class SMB2Commands:
                          else:
                             if sys.platform == 'win32':
                                mode |= os.O_BINARY
-                            if 
smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)):
+                            if unicode(pathName) in 
smbServer.getRegisteredNamedPipes():
                                 fid = PIPE_FILE_DESCRIPTOR
                                 sock = socket.socket()
                                 
sock.connect(smbServer.getRegisteredNamedPipes()[unicode(pathName)])
                             else:
                                 fid = os.open(pathName, mode)
-                     except Exception, e:
+                     except Exception as e:
                          smbServer.log("SMB2_CREATE: %s,%s,%s" % 
(pathName,mode,e),logging.ERROR)
                          #print e
                          fid = 0
@@ -2939,14 +2945,14 @@ class SMB2Commands:
 
         if str(closeRequest['FileID']) == '\xff'*16:
             # Let's take the data from the lastRequest
-            if  connData['LastRequest'].has_key('SMB2_CREATE'):
+            if  'SMB2_CREATE' in connData['LastRequest']:
                 fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
             else:
                 fileID = str(closeRequest['FileID'])
         else:
             fileID = str(closeRequest['FileID'])
 
-        if connData['OpenedFiles'].has_key(fileID):
+        if fileID in connData['OpenedFiles']:
              errorCode = STATUS_SUCCESS
              fileHandle = connData['OpenedFiles'][fileID]['FileHandle']
              pathName = connData['OpenedFiles'][fileID]['FileName']
@@ -2957,7 +2963,7 @@ class SMB2Commands:
                  elif fileHandle != VOID_FILE_DESCRIPTOR:
                      os.close(fileHandle)
                      infoRecord, errorCode = 
queryFileInformation(os.path.dirname(pathName), os.path.basename(pathName), 
smb2.SMB2_FILE_NETWORK_OPEN_INFO)
-             except Exception, e:
+             except Exception as e:
                  smbServer.log("SMB2_CLOSE %s" % e, logging.ERROR)
                  errorCode = STATUS_INVALID_HANDLE
              else:
@@ -2968,7 +2974,7 @@ class SMB2Commands:
                              
shutil.rmtree(connData['OpenedFiles'][fileID]['FileName'])
                          else:
                              
os.remove(connData['OpenedFiles'][fileID]['FileName'])
-                     except Exception, e:
+                     except Exception as e:
                          smbServer.log("SMB2_CLOSE %s" % e, logging.ERROR)
                          errorCode = STATUS_ACCESS_DENIED
 
@@ -3004,15 +3010,15 @@ class SMB2Commands:
 
         if str(queryInfo['FileID']) == '\xff'*16:
             # Let's take the data from the lastRequest
-            if  connData['LastRequest'].has_key('SMB2_CREATE'):
+            if  'SMB2_CREATE' in connData['LastRequest']:
                 fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
             else:
                 fileID = str(queryInfo['FileID'])
         else:
             fileID = str(queryInfo['FileID'])
 
-        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
-            if connData['OpenedFiles'].has_key(fileID):
+        if recvPacket['TreeID'] in connData['ConnectedShares']:
+            if fileID in connData['OpenedFiles']:
                 fileName = connData['OpenedFiles'][fileID]['FileName']
 
                 if queryInfo['InfoType'] == smb2.SMB2_0_INFO_FILE:
@@ -3055,16 +3061,16 @@ class SMB2Commands:
 
         if str(setInfo['FileID']) == '\xff'*16:
             # Let's take the data from the lastRequest
-            if  connData['LastRequest'].has_key('SMB2_CREATE'):
+            if  'SMB2_CREATE' in connData['LastRequest']:
                 fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
             else:
                 fileID = str(setInfo['FileID'])
         else:
             fileID = str(setInfo['FileID'])
 
-        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
+        if recvPacket['TreeID'] in connData['ConnectedShares']:
             path     = 
connData['ConnectedShares'][recvPacket['TreeID']]['path']
-            if connData['OpenedFiles'].has_key(fileID):
+            if fileID in connData['OpenedFiles']:
                 pathName = connData['OpenedFiles'][fileID]['FileName']
 
                 if setInfo['InfoType'] == smb2.SMB2_0_INFO_FILE:
@@ -3104,7 +3110,7 @@ class SMB2Commands:
                         try:
                              os.rename(pathName,newPathName)
                              connData['OpenedFiles'][fileID]['FileName'] = 
newPathName
-                        except Exception, e:
+                        except Exception as e:
                              smbServer.log("smb2SetInfo: %s" % e, 
logging.ERROR)
                              errorCode = STATUS_ACCESS_DENIED
                     else:
@@ -3145,14 +3151,14 @@ class SMB2Commands:
 
         if str(writeRequest['FileID']) == '\xff'*16:
             # Let's take the data from the lastRequest
-            if  connData['LastRequest'].has_key('SMB2_CREATE'):
+            if  'SMB2_CREATE' in connData['LastRequest']:
                 fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
             else:
                 fileID = str(writeRequest['FileID'])
         else:
             fileID = str(writeRequest['FileID'])
 
-        if connData['OpenedFiles'].has_key(fileID):
+        if fileID in connData['OpenedFiles']:
              fileHandle = connData['OpenedFiles'][fileID]['FileHandle']
              errorCode = STATUS_SUCCESS
              try:
@@ -3168,7 +3174,7 @@ class SMB2Commands:
 
                  respSMBCommand['Count']    = writeRequest['Length']
                  respSMBCommand['Remaining']= 0xff
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('SMB2_WRITE: %s' % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -3188,14 +3194,14 @@ class SMB2Commands:
 
         if str(readRequest['FileID']) == '\xff'*16:
             # Let's take the data from the lastRequest
-            if  connData['LastRequest'].has_key('SMB2_CREATE'):
+            if  'SMB2_CREATE' in connData['LastRequest']:
                 fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
             else:
                 fileID = str(readRequest['FileID'])
         else:
             fileID = str(readRequest['FileID'])
 
-        if connData['OpenedFiles'].has_key(fileID):
+        if fileID in connData['OpenedFiles']:
              fileHandle = connData['OpenedFiles'][fileID]['FileHandle']
              errorCode = 0
              try:
@@ -3211,7 +3217,7 @@ class SMB2Commands:
                  respSMBCommand['DataLength']   = len(content)
                  respSMBCommand['DataRemaining']= 0
                  respSMBCommand['Buffer']       = content
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('SMB2_READ: %s ' % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -3227,12 +3233,12 @@ class SMB2Commands:
         respSMBCommand = smb2.SMB2Flush_Response()
         flushRequest   = smb2.SMB2Flush(recvPacket['Data'])
 
-        if connData['OpenedFiles'].has_key(str(flushRequest['FileID'])):
+        if str(flushRequest['FileID']) in connData['OpenedFiles']:
              fileHandle = 
connData['OpenedFiles'][str(flushRequest['FileID'])]['FileHandle']
              errorCode = STATUS_SUCCESS
              try:
                  os.fsync(fileHandle)
-             except Exception, e:
+             except Exception as e:
                  smbServer.log("SMB2_FLUSH %s" % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -3251,21 +3257,21 @@ class SMB2Commands:
         respSMBCommand['Buffer'] = '\x00'
 
         # The server MUST locate the tree connection, as specified in section 
3.3.5.2.11.
-        if connData['ConnectedShares'].has_key(recvPacket['TreeID']) is False:
+        if (recvPacket['TreeID'] in connData['ConnectedShares']) is False:
             return [smb2.SMB2Error()], None, STATUS_NETWORK_NAME_DELETED
 
         # Next, the server MUST locate the open for the directory to be queried
         # If no open is found, the server MUST fail the request with 
STATUS_FILE_CLOSED
         if str(queryDirectoryRequest['FileID']) == '\xff'*16:
             # Let's take the data from the lastRequest
-            if  connData['LastRequest'].has_key('SMB2_CREATE'):
+            if  'SMB2_CREATE' in connData['LastRequest']:
                 fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
             else:
                 fileID = str(queryDirectoryRequest['FileID'])
         else:
             fileID = str(queryDirectoryRequest['FileID'])
 
-        if connData['OpenedFiles'].has_key(fileID) is False:
+        if (fileID in connData['OpenedFiles']) is False:
             return [smb2.SMB2Error()], None, STATUS_FILE_CLOSED
 
         # If the open is not an open to a directory, the request MUST be failed
@@ -3383,7 +3389,7 @@ class SMB2Commands:
 
         respSMBCommand = smb2.SMB2TreeDisconnect_Response()
 
-        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
+        if recvPacket['TreeID'] in connData['ConnectedShares']:
             smbServer.log("Disconnecting Share(%d:%s)" % 
(recvPacket['TreeID'],connData['ConnectedShares'][recvPacket['TreeID']]['shareName']))
             del(connData['ConnectedShares'][recvPacket['TreeID']])
             errorCode = STATUS_SUCCESS
@@ -3420,7 +3426,7 @@ class SMB2Commands:
         ioctlRequest   = smb2.SMB2Ioctl(recvPacket['Data'])
 
         ioctls = smbServer.getIoctls()
-        if ioctls.has_key(ioctlRequest['CtlCode']):
+        if ioctlRequest['CtlCode'] in ioctls:
             outputData, errorCode = ioctls[ioctlRequest['CtlCode']](connId, 
smbServer, ioctlRequest)
             if errorCode == STATUS_SUCCESS:
                 respSMBCommand['CtlCode']      = ioctlRequest['CtlCode']
@@ -3475,7 +3481,7 @@ class Ioctls:
 
         ioctlResponse = ''
 
-        if connData['OpenedFiles'].has_key(str(ioctlRequest['FileID'])):
+        if str(ioctlRequest['FileID']) in connData['OpenedFiles']:
              fileHandle = 
connData['OpenedFiles'][str(ioctlRequest['FileID'])]['FileHandle']
              errorCode = STATUS_SUCCESS
              try:
@@ -3485,7 +3491,7 @@ class Ioctls:
                      sock = 
connData['OpenedFiles'][str(ioctlRequest['FileID'])]['Socket']
                      sock.sendall(ioctlRequest['Buffer'])
                      ioctlResponse = 
sock.recv(ioctlRequest['MaxOutputResponse'])
-             except Exception, e:
+             except Exception as e:
                  smbServer.log('fsctlPipeTransceive: %s ' % e, logging.ERROR)
                  errorCode = STATUS_ACCESS_DENIED
         else:
@@ -3551,7 +3557,7 @@ class SMBSERVERHandler(SocketServer.BaseRequestHandler):
                    # a single packet
                    for i in resp:
                        session.send_packet(str(i))
-            except Exception, e:
+            except Exception as e:
                 self.__SMB.log("Handle: %s" % e)
                 #import traceback
                 #traceback.print_exc()
@@ -3734,7 +3740,7 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
     def getConnectionData(self, connId, checkStatus = True):
         conn = self.__activeConnections[connId]
         if checkStatus is True:
-            if conn.has_key('Authenticated') is not True:
+            if ('Authenticated' in conn) is not True:
                 # Can't keep going further
                 raise Exception("User not Authenticated!")
         return conn
@@ -3747,13 +3753,13 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
         return True
 
     def unregisterNamedPipe(self, pipeName):
-        if self.__registeredNamedPipes.has_key(pipeName):
+        if pipeName in self.__registeredNamedPipes:
             del(self.__registeredNamedPipes[unicode(pipeName)])
             return True
         return False
 
     def unregisterTransaction(self, transCommand):
-        if self.__smbTransCommands.has_key(transCommand):
+        if transCommand in self.__smbTransCommands:
            del(self.__smbTransCommands[transCommand])
 
     def hookTransaction(self, transCommand, callback):
@@ -3788,7 +3794,7 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
         # respData: the data reponse of the transaction
         # errorCode: the NT error code
 
-        if self.__smbTransCommands.has_key(transCommand):
+        if transCommand in self.__smbTransCommands:
            originalCommand = self.__smbTransCommands[transCommand]
         else:
            originalCommand = None
@@ -3797,13 +3803,13 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
         return originalCommand
 
     def unregisterTransaction2(self, transCommand):
-        if self.__smbTrans2Commands.has_key(transCommand):
+        if transCommand in self.__smbTrans2Commands:
            del(self.__smbTrans2Commands[transCommand])
 
     def hookTransaction2(self, transCommand, callback):
         # Here we should add to __smbTrans2Commands
         # Same description as Transaction
-        if self.__smbTrans2Commands.has_key(transCommand):
+        if transCommand in self.__smbTrans2Commands:
            originalCommand = self.__smbTrans2Commands[transCommand]
         else:
            originalCommand = None
@@ -3812,13 +3818,13 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
         return originalCommand
 
     def unregisterNTTransaction(self, transCommand):
-        if self.__smbNTTransCommands.has_key(transCommand):
+        if transCommand in self.__smbNTTransCommands:
            del(self.__smbNTTransCommands[transCommand])
 
     def hookNTTransaction(self, transCommand, callback):
         # Here we should add to __smbNTTransCommands
         # Same description as Transaction
-        if self.__smbNTTransCommands.has_key(transCommand):
+        if transCommand in self.__smbNTTransCommands:
            originalCommand = self.__smbNTTransCommands[transCommand]
         else:
            originalCommand = None
@@ -3827,7 +3833,7 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
         return originalCommand
 
     def unregisterSmbCommand(self, smbCommand):
-        if self.__smbCommands.has_key(smbCommand):
+        if smbCommand in self.__smbCommands:
            del(self.__smbCommands[smbCommand])
 
     def hookSmbCommand(self, smbCommand, callback):
@@ -3866,7 +3872,7 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
         # transCommands: a list of transaction subcommands already registered
         #
 
-        if self.__smbCommands.has_key(smbCommand):
+        if smbCommand in self.__smbCommands:
            originalCommand = self.__smbCommands[smbCommand]
         else:
            originalCommand = None
@@ -3875,11 +3881,11 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
         return originalCommand
 
     def unregisterSmb2Command(self, smb2Command):
-        if self.__smb2Commands.has_key(smb2Command):
+        if smb2Command in self.__smb2Commands:
            del(self.__smb2Commands[smb2Command])
 
     def hookSmb2Command(self, smb2Command, callback):
-        if self.__smb2Commands.has_key(smb2Command):
+        if smb2Command in self.__smb2Commands:
            originalCommand = self.__smb2Commands[smb2Command]
         else:
            originalCommand = None
@@ -3969,13 +3975,13 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
                                   packet,
                                   self.__smbTransCommands)
                 else:
-                    if self.__smbCommands.has_key(packet['Command']):
+                    if packet['Command'] in self.__smbCommands:
                        if self.__SMB2Support is True:
                            if packet['Command'] == smb.SMB.SMB_COM_NEGOTIATE:
                                try:
                                    respCommands, respPackets, errorCode = 
self.__smb2Commands[smb2.SMB2_NEGOTIATE](connId, self, packet, True)
                                    isSMB2 = True
-                               except Exception, e:
+                               except Exception as e:
                                    self.log('SMB2_NEGOTIATE: %s' % e, 
logging.ERROR)
                                    # If something went wrong, let's fallback 
to SMB1
                                    respCommands, respPackets, errorCode = 
self.__smbCommands[packet['Command']](
@@ -4006,7 +4012,7 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
             else:
                 done = False
                 while not done:
-                    if self.__smb2Commands.has_key(packet['Command']):
+                    if packet['Command'] in self.__smb2Commands:
                        if self.__SMB2Support is True:
                            respCommands, respPackets, errorCode = 
self.__smb2Commands[packet['Command']](
                                    connId,
@@ -4025,7 +4031,7 @@ smb.SMB.TRANS_TRANSACT_NMPIPE          
:self.__smbTransHandler.transactNamedPipe
                     else:
                         done = True
 
-        except Exception, e:
+        except Exception as e:
             #import traceback
             #traceback.print_exc()
             # Something wen't wrong, defaulting to Bad user ID
diff --git a/tests/python_dependencies/impacket/spnego.py 
b/tests/python_dependencies/impacket/spnego.py
index 43e65fb5c..98069f579 100644
--- a/tests/python_dependencies/impacket/spnego.py
+++ b/tests/python_dependencies/impacket/spnego.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
 # Copyright (c) 2003-2016 CORE Security Technologies
 #
 # This software is provided under under a slightly modified version
@@ -13,7 +14,7 @@
 from struct import pack, unpack, calcsize
 
 ############### GSS Stuff ################
-GSS_API_SPNEGO_UUID              = '\x2b\x06\x01\x05\x05\x02' 
+GSS_API_SPNEGO_UUID              = '\x2b\x06\x01\x05\x05\x02'
 ASN1_SEQUENCE                    = 0x30
 ASN1_AID                         = 0x60
 ASN1_OID                         = 0x06
@@ -33,59 +34,59 @@ MechTypes = {
 TypesMech = dict((v,k) for k, v in MechTypes.iteritems())
 
 def asn1encode(data = ''):
-        #res = asn1.SEQUENCE(str).encode()
-        #import binascii
-        #print '\nalex asn1encode str: %s\n' % binascii.hexlify(str)
-        if 0 <= len(data) <= 0x7F:
-            res = pack('B', len(data)) + data
-        elif 0x80 <= len(data) <= 0xFF:
-            res = pack('BB', 0x81, len(data)) + data
-        elif 0x100 <= len(data) <= 0xFFFF:
-            res = pack('!BH', 0x82, len(data)) + data
-        elif 0x10000 <= len(data) <= 0xffffff:
-            res = pack('!BBH', 0x83, len(data) >> 16, len(data) & 0xFFFF) + 
data
-        elif 0x1000000 <= len(data) <= 0xffffffff:
-            res = pack('!BL', 0x84, len(data)) + data
-        else:
-            raise Exception('Error in asn1encode')
-        return str(res)
+    #res = asn1.SEQUENCE(str).encode()
+    #import binascii
+    #print '\nalex asn1encode str: %s\n' % binascii.hexlify(str)
+    if 0 <= len(data) <= 0x7F:
+        res = pack('B', len(data)) + data
+    elif 0x80 <= len(data) <= 0xFF:
+        res = pack('BB', 0x81, len(data)) + data
+    elif 0x100 <= len(data) <= 0xFFFF:
+        res = pack('!BH', 0x82, len(data)) + data
+    elif 0x10000 <= len(data) <= 0xffffff:
+        res = pack('!BBH', 0x83, len(data) >> 16, len(data) & 0xFFFF) + data
+    elif 0x1000000 <= len(data) <= 0xffffffff:
+        res = pack('!BL', 0x84, len(data)) + data
+    else:
+        raise Exception('Error in asn1encode')
+    return str(res)
 
 def asn1decode(data = ''):
-        len1 = unpack('B', data[:1])[0]
-        data = data[1:]
-        if len1 == 0x81:
-            pad = calcsize('B')
-            len2 = unpack('B',data[:pad])[0]
-            data = data[pad:]
-            ans = data[:len2]
-        elif len1 == 0x82:
-            pad = calcsize('H')
-            len2 = unpack('!H', data[:pad])[0]
-            data = data[pad:]
-            ans = data[:len2]
-        elif len1 == 0x83:
-            pad = calcsize('B') + calcsize('!H')
-            len2, len3 = unpack('!BH', data[:pad])
-            data = data[pad:]
-            ans = data[:len2 << 16 + len3]
-        elif len1 == 0x84:
-            pad = calcsize('!L')
-            len2 = unpack('!L', data[:pad])[0]
-            data = data[pad:]
-            ans = data[:len2]
-        # 1 byte length, string <= 0x7F
-       else:
-            pad = 0
-            ans = data[:len1]
-        return ans, len(ans)+pad+1
+    len1 = unpack('B', data[:1])[0]
+    data = data[1:]
+    if len1 == 0x81:
+        pad = calcsize('B')
+        len2 = unpack('B',data[:pad])[0]
+        data = data[pad:]
+        ans = data[:len2]
+    elif len1 == 0x82:
+        pad = calcsize('H')
+        len2 = unpack('!H', data[:pad])[0]
+        data = data[pad:]
+        ans = data[:len2]
+    elif len1 == 0x83:
+        pad = calcsize('B') + calcsize('!H')
+        len2, len3 = unpack('!BH', data[:pad])
+        data = data[pad:]
+        ans = data[:len2 << 16 + len3]
+    elif len1 == 0x84:
+        pad = calcsize('!L')
+        len2 = unpack('!L', data[:pad])[0]
+        data = data[pad:]
+        ans = data[:len2]
+    # 1 byte length, string <= 0x7F
+    else:
+        pad = 0
+        ans = data[:len1]
+    return ans, len(ans)+pad+1
 
 class GSSAPI:
-# Generic GSSAPI Header Format 
+# Generic GSSAPI Header Format
     def __init__(self, data = None):
         self.fields = {}
         self['UUID'] = GSS_API_SPNEGO_UUID
         if data:
-             self.fromString(data)
+            self.fromString(data)
         pass
 
     def __setitem__(self,key,value):
@@ -115,27 +116,27 @@ class GSSAPI:
         if next_byte != ASN1_AID:
             raise Exception('Unknown AID=%x' % next_byte)
         data = data[1:]
-        decode_data, total_bytes = asn1decode(data) 
+        decode_data, total_bytes = asn1decode(data)
         # Now we should have a OID tag
-               next_byte = unpack('B',decode_data[:1])[0]
+        next_byte = unpack('B',decode_data[:1])[0]
         if next_byte !=  ASN1_OID:
             raise Exception('OID tag not found %x' % next_byte)
         decode_data = decode_data[1:]
         # Now the OID contents, should be SPNEGO UUID
-        uuid, total_bytes = asn1decode(decode_data)                
+        uuid, total_bytes = asn1decode(decode_data)
         self['OID'] = uuid
         # the rest should be the data
         self['Payload'] = decode_data[total_bytes:]
         #pass
-        
+
     def dump(self):
         for i in self.fields.keys():
-            print "%s: {%r}" % (i,self[i])
+            print("%s: {%r}" % (i,self[i]))
 
     def getData(self):
         ans = pack('B',ASN1_AID)
         ans += asn1encode(
-               pack('B',ASN1_OID) + 
+               pack('B',ASN1_OID) +
                asn1encode(self['UUID']) +
                self['Payload'] )
         return ans
@@ -163,7 +164,7 @@ class SPNEGO_NegTokenResp:
     def __init__(self, data = None):
         self.fields = {}
         if data:
-             self.fromString(data)
+            self.fromString(data)
         pass
 
     def __setitem__(self,key,value):
@@ -198,7 +199,7 @@ class SPNEGO_NegTokenResp:
         if next_byte != ASN1_MECH_TYPE:
             # MechType not found, could be an AUTH answer
             if next_byte != ASN1_RESPONSE_TOKEN:
-               raise Exception('MechType/ResponseToken tag not found %x' % 
next_byte)
+                raise Exception('MechType/ResponseToken tag not found %x' % 
next_byte)
         else:
             decode_data2 = decode_data[1:]
             decode_data2, total_bytes = asn1decode(decode_data2)
@@ -245,30 +246,30 @@ class SPNEGO_NegTokenResp:
 
     def dump(self):
         for i in self.fields.keys():
-            print "%s: {%r}" % (i,self[i])
-        
+            print("%s: {%r}" % (i,self[i]))
+
     def getData(self):
         ans = pack('B',SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_RESP)
-        if self.fields.has_key('NegResult') and 
self.fields.has_key('SupportedMech'):
+        if 'NegResult' in self.fields and 'SupportedMech' in self.fields:
             # Server resp
             ans += asn1encode(
                pack('B', ASN1_SEQUENCE) +
                asn1encode(
                pack('B',SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_TARG) +
                asn1encode(
-               pack('B',ASN1_ENUMERATED) + 
+               pack('B',ASN1_ENUMERATED) +
                asn1encode( self['NegResult'] )) +
                pack('B',ASN1_SUPPORTED_MECH) +
-               asn1encode( 
+               asn1encode(
                pack('B',ASN1_OID) +
                asn1encode(self['SupportedMech'])) +
                pack('B',ASN1_RESPONSE_TOKEN ) +
                asn1encode(
                pack('B', ASN1_OCTET_STRING) + 
asn1encode(self['ResponseToken']))))
-        elif self.fields.has_key('NegResult'):
+        elif 'NegResult' in self.fields:
             # Server resp
             ans += asn1encode(
-               pack('B', ASN1_SEQUENCE) + 
+               pack('B', ASN1_SEQUENCE) +
                asn1encode(
                pack('B', SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_TARG) +
                asn1encode(
@@ -285,24 +286,24 @@ class SPNEGO_NegTokenResp:
         return ans
 
 class SPNEGO_NegTokenInit(GSSAPI):
-    # http://tools.ietf.org/html/rfc4178#page-8 
+    # http://tools.ietf.org/html/rfc4178#page-8
     # NegTokeInit :: = SEQUENCE {
-    #   mechTypes      [0] MechTypeList,
+    #   mechTypes       [0] MechTypeList,
     #   reqFlags        [1] ContextFlags OPTIONAL,
-    #   mechToken       [2] OCTET STRING OPTIONAL,     
+    #   mechToken       [2] OCTET STRING OPTIONAL,
     #   mechListMIC     [3] OCTET STRING OPTIONAL,
     # }
     SPNEGO_NEG_TOKEN_INIT = 0xa0
     def fromString(self, data = 0):
         GSSAPI.fromString(self, data)
         payload = self['Payload']
-        next_byte = unpack('B', payload[:1])[0] 
+        next_byte = unpack('B', payload[:1])[0]
         if next_byte != SPNEGO_NegTokenInit.SPNEGO_NEG_TOKEN_INIT:
             raise Exception('NegTokenInit not found %x' % next_byte)
         payload = payload[1:]
         decode_data, total_bytes = asn1decode(payload)
         # Now we should have a SEQUENCE Tag
-       next_byte = unpack('B', decode_data[:1])[0]
+        next_byte = unpack('B', decode_data[:1])[0]
         if next_byte != ASN1_SEQUENCE:
             raise Exception('SEQUENCE tag not found %x' % next_byte)
         decode_data = decode_data[1:]
@@ -321,14 +322,14 @@ class SPNEGO_NegTokenInit(GSSAPI):
         # And finally we should have the MechTypes
         self['MechTypes'] = []
         while decode_data:
-           next_byte = unpack('B', decode_data[:1])[0]
-           if next_byte != ASN1_OID:    
-             # Not a valid OID, there must be something else we won't unpack
-             break
-           decode_data = decode_data[1:]
-           item, total_bytes = asn1decode(decode_data)
-           self['MechTypes'].append(item)
-           decode_data = decode_data[total_bytes:]
+            next_byte = unpack('B', decode_data[:1])[0]
+            if next_byte != ASN1_OID:
+            # Not a valid OID, there must be something else we won't unpack
+                break
+            decode_data = decode_data[1:]
+            item, total_bytes = asn1decode(decode_data)
+            self['MechTypes'].append(item)
+            decode_data = decode_data[total_bytes:]
 
         # Do we have MechTokens as well?
         decode_data = remaining_data[total_bytes3:]
@@ -352,7 +353,7 @@ class SPNEGO_NegTokenInit(GSSAPI):
 
         mechToken = ''
         # Do we have tokens to send?
-        if self.fields.has_key('MechToken'):
+        if 'MechToken' in self.fields:
             mechToken = pack('B', ASN1_MECH_TOKEN) + asn1encode(
                 pack('B', ASN1_OCTET_STRING) + asn1encode(
                     self['MechToken']))
@@ -363,10 +364,9 @@ class SPNEGO_NegTokenInit(GSSAPI):
                asn1encode(
                pack('B', ASN1_MECH_TYPE) +
                asn1encode(
-               pack('B', ASN1_SEQUENCE) + 
+               pack('B', ASN1_SEQUENCE) +
                asn1encode(mechTypes)) + mechToken ))
 
 
         self['Payload'] = ans
         return GSSAPI.getData(self)
-     
diff --git a/tests/python_dependencies/impacket/structure.py 
b/tests/python_dependencies/impacket/structure.py
index 7a04117ff..68066a61f 100644
--- a/tests/python_dependencies/impacket/structure.py
+++ b/tests/python_dependencies/impacket/structure.py
@@ -1,3 +1,4 @@
+from __future__ import print_function
 # Copyright (c) 2003-2016 CORE Security Technologies
 #
 # This software is provided under under a slightly modified version
@@ -97,18 +98,18 @@ class Structure:
 
     def packField(self, fieldName, format = None):
         if self.debug:
-            print "packField( %s | %s )" % (fieldName, format)
+            print("packField( %s | %s )" % (fieldName, format))
 
         if format is None:
             format = self.formatForField(fieldName)
 
-        if self.fields.has_key(fieldName):
+        if fieldName in self.fields:
             ans = self.pack(format, self.fields[fieldName], field = fieldName)
         else:
             ans = self.pack(format, None, field = fieldName)
 
         if self.debug:
-            print "\tanswer %r" % ans
+            print("\tanswer %r" % ans)
 
         return ans
 
@@ -119,8 +120,8 @@ class Structure:
         for field in self.commonHdr+self.structure:
             try:
                 data += self.packField(field[0], field[1])
-            except Exception, e:
-                if self.fields.has_key(field[0]):
+            except Exception as e:
+                if field[0] in self.fields:
                     e.args += ("When packing field '%s | %s | %r' in %s" % 
(field[0], field[1], self[field[0]], self.__class__),)
                 else:
                     e.args += ("When packing field '%s | %s' in %s" % 
(field[0], field[1], self.__class__),)
@@ -136,16 +137,16 @@ class Structure:
         self.rawData = data
         for field in self.commonHdr+self.structure:
             if self.debug:
-                print "fromString( %s | %s | %r )" % (field[0], field[1], data)
+                print("fromString( %s | %s | %r )" % (field[0], field[1], 
data))
             size = self.calcUnpackSize(field[1], data, field[0])
             if self.debug:
-                print "  size = %d" % size
+                print("  size = %d" % size)
             dataClassOrCode = str
             if len(field) > 2:
                 dataClassOrCode = field[2]
             try:
                 self[field[0]] = self.unpack(field[1], data[:size], 
dataClassOrCode = dataClassOrCode, field = field[0])
-            except Exception,e:
+            except Exception as e:
                 e.args += ("When unpacking field '%s | %s | %r[:%d]'" % 
(field[0], field[1], data, size),)
                 raise
 
@@ -175,7 +176,7 @@ class Structure:
 
     def pack(self, format, data, field = None):
         if self.debug:
-            print "  pack( %s | %r | %s)" %  (format, data, field)
+            print("  pack( %s | %r | %s)" %  (format, data, field))
 
         if field:
             addressField = self.findAddressFieldFor(field)
@@ -206,7 +207,7 @@ class Structure:
             try:
                 return self.pack(two[0], data)
             except:
-                if (self.fields.has_key(two[1])) and (self[two[1]] is not 
None):
+                if (two[1] in self.fields) and (self[two[1]] is not None):
                     return self.pack(two[0], id(self[two[1]]) & 
((1<<(calcsize(two[0])*8))-1) )
                 else:
                     return self.pack(two[0], 0)
@@ -228,7 +229,7 @@ class Structure:
             if two[0]:
                 if two[0].isdigit():
                     if int(two[0]) != len(data):
-                        raise Exception, "Array field has a constant size, and 
it doesn't match the actual value"
+                        raise Exception("Array field has a constant size, and 
it doesn't match the actual value")
                 else:
                     return self.pack(two[0], len(data))+answer
             return answer
@@ -256,7 +257,7 @@ class Structure:
             return '%s\0\0\0\0%s%s' % (l,l,data)
                     
         if data is None:
-            raise Exception, "Trying to pack None"
+            raise Exception("Trying to pack None")
         
         # literal specifier
         if format[:1] == ':':
@@ -267,7 +268,7 @@ class Structure:
 
     def unpack(self, format, data, dataClassOrCode = str, field = None):
         if self.debug:
-            print "  unpack( %s | %r )" %  (format, data)
+            print("  unpack( %s | %r )" %  (format, data))
 
         if field:
             addressField = self.findAddressFieldFor(field)
@@ -288,7 +289,7 @@ class Structure:
         if format[:1] == "'" or format[:1] == '"':
             answer = format[1:]
             if answer != data:
-                raise Exception, "Unpacked data doesn't match constant value 
'%r' should be '%r'" % (data, answer)
+                raise Exception("Unpacked data doesn't match constant value 
'%r' should be '%r'" % (data, answer))
             return answer
 
         # address specifier
@@ -334,13 +335,13 @@ class Structure:
         # asciiz specifier
         if format == 'z':
             if data[-1] != '\x00':
-                raise Exception, ("%s 'z' field is not NUL terminated: %r" % 
(field, data))
+                raise Exception("%s 'z' field is not NUL terminated: %r" % 
(field, data))
             return data[:-1] # remove trailing NUL
 
         # unicode specifier
         if format == 'u':
             if data[-2:] != '\x00\x00':
-                raise Exception, ("%s 'u' field is not NUL-NUL terminated: %r" 
% (field, data))
+                raise Exception("%s 'u' field is not NUL-NUL terminated: %r" % 
(field, data))
             return data[:-2] # remove trailing NUL
 
         # DCE-RPC/NDR string specifier
@@ -392,7 +393,7 @@ class Structure:
             answer = 0
             if two[0].isdigit():
                     if int(two[0]) != len(data):
-                        raise Exception, "Array field has a constant size, and 
it doesn't match the actual value"
+                        raise Exception("Array field has a constant size, and 
it doesn't match the actual value")
             elif two[0]:
                 answer += self.calcPackSize(two[0], len(data))
 
@@ -428,7 +429,7 @@ class Structure:
 
     def calcUnpackSize(self, format, data, field = None):
         if self.debug:
-            print "  calcUnpackSize( %s | %s | %r)" %  (field, format, data)
+            print("  calcUnpackSize( %s | %s | %r)" %  (field, format, data))
 
         # void specifier
         if format[:1] == '_':
@@ -487,7 +488,7 @@ class Structure:
 
         # "printf" string specifier
         if format[:1] == '%':
-            raise Exception, "Can't guess the size of a printf like specifier 
for unpacking"
+            raise Exception("Can't guess the size of a printf like specifier 
for unpacking")
 
         # asciiz specifier
         if format[:1] == 'z':
@@ -520,7 +521,7 @@ class Structure:
         for field in self.commonHdr+self.structure:
             if field[0] == fieldName:
                 return field[1]
-        raise Exception, ("Field %s not found" % fieldName)
+        raise Exception("Field %s not found" % fieldName)
 
     def findAddressFieldFor(self, fieldName):
         descriptor = '&%s' % fieldName
@@ -558,7 +559,7 @@ class Structure:
     def dump(self, msg = None, indent = 0):
         if msg is None: msg = self.__class__.__name__
         ind = ' '*indent
-        print "\n%s" % msg
+        print("\n%s" % msg)
         fixedFields = []
         for field in self.commonHdr+self.structure:
             i = field[0] 
@@ -566,18 +567,18 @@ class Structure:
                 fixedFields.append(i)
                 if isinstance(self[i], Structure):
                     self[i].dump('%s%s:{' % (ind,i), indent = indent + 4)
-                    print "%s}" % ind
+                    print("%s}" % ind)
                 else:
-                    print "%s%s: {%r}" % (ind,i,self[i])
+                    print("%s%s: {%r}" % (ind,i,self[i]))
         # Do we have remaining fields not defined in the structures? let's 
         # print them
         remainingFields = list(set(self.fields) - set(fixedFields))
         for i in remainingFields:
             if isinstance(self[i], Structure):
                 self[i].dump('%s%s:{' % (ind,i), indent = indent + 4)
-                print "%s}" % ind
+                print("%s}" % ind)
             else:
-                print "%s%s: {%r}" % (ind,i,self[i])
+                print("%s%s: {%r}" % (ind,i,self[i]))
 
 
 class _StructureTest:
@@ -589,23 +590,23 @@ class _StructureTest:
             return self.theClass(alignment = self.alignment)
 
     def run(self):
-        print
-        print "-"*70
+        print()
+        print("-"*70)
         testName = self.__class__.__name__
-        print "starting test: %s....." % testName
+        print("starting test: %s....." % testName)
         a = self.create()
         self.populate(a)
         a.dump("packing.....")
         a_str = str(a)
-        print "packed: %r" % a_str
-        print "unpacking....."
+        print("packed: %r" % a_str)
+        print("unpacking.....")
         b = self.create(a_str)
         b.dump("unpacked.....")
-        print "repacking....."
+        print("repacking.....")
         b_str = str(b)
         if b_str != a_str:
-            print "ERROR: original packed and repacked don't match"
-            print "packed: %r" % b_str
+            print("ERROR: original packed and repacked don't match")
+            print("packed: %r" % b_str)
 
 class _Test_simple(_StructureTest):
     class theClass(Structure):
@@ -732,7 +733,7 @@ if __name__ == '__main__':
     try:
         _Test_fixedLength().run()
     except:
-        print "cannot repack because length is bogus"
+        print("cannot repack because length is bogus")
 
     _Test_simple_aligned4().run()
     _Test_nested().run()
diff --git a/tests/python_dependencies/impacket/uuid.py 
b/tests/python_dependencies/impacket/uuid.py
index fb4d7b3a0..750eba459 100644
--- a/tests/python_dependencies/impacket/uuid.py
+++ b/tests/python_dependencies/impacket/uuid.py
@@ -17,9 +17,14 @@ import re
 from random import randrange
 from struct import pack, unpack
 
+try:
+    long        # Python 2
+except NameError:
+    long = int  # Python 3
+
 def generate():
     # UHm... crappy Python has an maximum integer of 2**31-1.
-    top = (1L<<31)-1
+    top = (1<<31)-1
     return pack("IIII", randrange(top), randrange(top), randrange(top), 
randrange(top))
 
 def bin_to_string(uuid):
@@ -49,16 +54,16 @@ def bin_to_uuidtup(bin):
     return uuidstr, "%d.%d" % (maj, min)
 
 #input: string
-#output: tuple (uuid,version) 
+#output: tuple (uuid,version)
 #if version is not found in the input string "1.0"  is returned
-#example: 
-#           "00000000-0000-0000-0000-000000000000 3.0" returns 
('00000000-0000-0000-0000-000000000000','3.0') 
-#           "10000000-2000-3000-4000-500000000000 version 3.0" returns 
('00000000-0000-0000-0000-000000000000','3.0') 
-#           "10000000-2000-3000-4000-500000000000 v 3.0" returns 
('00000000-0000-0000-0000-000000000000','3.0') 
-#           "10000000-2000-3000-4000-500000000000" returns 
('00000000-0000-0000-0000-000000000000','1.0') 
+#example:
+#           "00000000-0000-0000-0000-000000000000 3.0" returns 
('00000000-0000-0000-0000-000000000000','3.0')
+#           "10000000-2000-3000-4000-500000000000 version 3.0" returns 
('00000000-0000-0000-0000-000000000000','3.0')
+#           "10000000-2000-3000-4000-500000000000 v 3.0" returns 
('00000000-0000-0000-0000-000000000000','3.0')
+#           "10000000-2000-3000-4000-500000000000" returns 
('00000000-0000-0000-0000-000000000000','1.0')
 def string_to_uuidtup(s):
     g =  
re.search("([A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}).*?([0-9]{1,5}\.[0-9]{1,5})",s+"
 1.0")
-    if g: 
+    if g:
         (u,v) = g.groups()
         return (u,v)
     return

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]