2012-02-17 1 views
0

Depuis quelque temps, j'essaie de trouver un moyen pour que jython accède au site en utilisant NTLM. J'ai juste une connaissance de base de python et de rien de java, donc je pourrais utiliser une aide (ou un exemple) pour faire en sorte que la requête utilise NTLM dans cette partie de script que j'ai trouvée. J'utilise ceci avec un broyeur d'applications open source.Utilisation de jcifs dans jython pour accéder au site à l'aide de la sécurité NTLM

D'abord, je commence par l'importation jcifs dans le script ainsi que d'autres utilisés par meuleuse:

from net.grinder.script import Test 
from net.grinder.script.Grinder import grinder 
from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest 
from HTTPClient import NVPair 

from jcifs.ntlmssp import Type1Message 
from jcifs.ntlmssp import Type2Message, Type3Message 
from jcifs.util import Base64 

Cette partie du code a été fourni dans l'exemple que j'ai trouvé. C'était la chose la plus proche que je pouvais trouver, qui correspondrait à mes besoins, puisque j'ai juste besoin d'obtenir la réponse complète à la demande.

def NTLMAuthentication1(url, request, info, NTLMfield): 
    token_type1 = info.token_type1() 

    params = (NVPair("Authorization", "NTLM "+token_type1),) 
    result = request.GET(url, None, params) 
    NTLMfield = result.getHeader("WWW-Authenticate") 
    return NTLMAuthentication2(url, request, info, NTLMfield) 

def NTLMAuthentication2(url, request, info, NTLMfield): 
    if NTLMfield.startswith("Negotiate"): 
     token_type2 = NTLMfield[len("Negotiate "):] 
    else: 
     token_type2 = NTLMfield[5:] 

    token_type3 = info.token_type3(token_type2) 
    params = (NVPair("Cookie", "WSS_KeepSessionAuthenticated=80"), 
       NVPair("Authorization", "NTLM " + token_type3),) 
    result = request.GET(url, None, params) 
    return result 

# this function validate request and its result to see if the NTLM authentication is required 
def NTLMAuthentication(lastResult, request, info): 
    # get last http request's url 
    url = lastResult.getEffectiveURI().toString()[len(request.getUrl()):] 

    # The result is ask for authentication 
    if lastResult.statusCode != 401 and lastResult.statusCode != 407: 
     return lastResult 

    NTLMfield = lastResult.getHeader("WWW-Authenticate") 
    if NTLMfield == None: 
     return lastResult 

    # check it is the first shakehands 
    if NTLMfield == "Negotiate, NTLM" or NTLMfield == "NTLM": 
     return NTLMAuthentication1(url, request, info, NTLMfield) 

    # check it is the second shakehands 
    elif len(NTLMfield) > 4 and NTLMfield[:4] == "NTLM": 
     return NTLMAuthentication2(url, request, info, NTLMfield) 

    else: 
     return lastResult 

class NTLMAuthenticationInfo: 
    def __init__(self, domain, host, user, passwd): 
     self.domain = 'domain' 
     self.host = 'host' 
     self.user = 'user' 
     self.passwd = 'password' 

    def token_type1(self): 
     msg = Type1Message(Type1Message.getDefaultFlags(), self.domain, self.host) 
     return Base64.encode(msg.toByteArray()) 

    def token_type3(self, token_type2): 
     msg2 = Type2Message(Base64.decode(token_type2)) 

#if jcifs 1.3.7 using msg3 = Type3Message(msg2, self.passwd, self.domain, self.user, self.host) 
     msg3 = Type3Message(msg2, self.passwd, self.domain, self.user, self.host) 
     return Base64.encode(msg3.toByteArray()) 

Dans la partie principale de la demande ressemble à quelque chose comme ceci:

result = request101.GET('/') 

où request101 a été prédéfinie avec l'URL et en-tête. Donc, au fond, je n'ai pas la moindre idée comment mettre en œuvre la

J'ai essayé

result = request101.GET('/') 
print str(NTLMAuthentication(result, request101, NTLMAuthenticationInfo)) 

ainsi que tout ce

NTLMAuthentication(request101.GET('/'), request101, NTLMAuthenticationInfo) 

mais aucune de ces travaillé. Des conseils sur la façon de l'exécuter?

Répondre

1

essayer cette

ai = NTLMAuthenticationInfo("domain", "your host", "user", "password") 
result = request101.GET('/') 
result = NTLMAuthentication(result, request101, ai) 
Questions connexes