Gerenciador de Pacotes Perl via proxy NTLM

3

Instalei o ActivePerl e o include PPM no trabalho, mas não consigo conectá-lo ao repositório de módulos por meio do proxy. Eu configurei uma variável de ambiente

HTTP_PROXY = http://user:[email protected]:port

mas o PPM ainda mostra um erro 407 Autenticação de proxy necessária . Eu acho que é um proxy NTLM, mas não tenho certeza.

Depois de fazer este , recebo um Error 500: Bad hostname para ppm4.activestate.com . Acontece que o PPM pergunta ao meu servidor DNS para resolver esse nome, mas o meu servidor DNS local não pode resolver esses nomes de domínio externos. Apenas o proxy faz isso e apenas para o tráfego HTTP ...

Aqui está a captura de tela do que o Wireshark (executando em uma VM do BackTrack na mesma caixa do Windows XP) está mostrando:

Minha caixa do Windows é 10.75.82.221 O servidor DNS é 10.7.3.110

IssoéoqueoTraceRoutemostranoWindows:

G:\>tracertppm4.activestate.comNosepuederesolverelnombrededestinoppm4.activestate.com.

Oquesignifica:

Cannotresolveppm4.activestate.com

comoesperado.

Comoeudissenoscomentários,onavegadornãopareceiniciarnenhumaconsultadeDNS.AquiestáumacapturadeteladoWireshark(daBT)quemostraumacessoaowww.google.esdoFirefox(daWXP):

MinhacaixadoWindowsé10.75.82.221Oproxyé10.7.8.46

Como você pode ver, nenhuma consulta ao DNS ao acessar pelo navegador ...

Para mim, parece apenas que é um recurso de segurança e terei que pedir permissão para usar a ferramenta PPM do ActiveState ... o que não é plausível, mesmo que a maioria (99%) dos scripts que eu faço aqui são para acelerar o trabalho.

    
por m0skit0 01.02.2012 / 09:27

5 respostas

2

O erro de resolução 407 é descrito em perl.org Perguntas e respostas :

Q: Even when http_proxy is set to the correct server with the proper credentials (using the convention username:[email protected]:port) I'm still not able to install packages via cpan. "LWP failed with code[407] message[Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied. )]"

A: CPAN doesn't support NTLM authentication, and it's difficult to get Authen::NTLM working with CPAN. I ended up using ntlmaps as a local proxy for NTLM authentication.

The first thing you'll need to do is get the latest version of NTLMAPS from their svn repo, extract it somewhere. Next you'll need to get the latest version of python and install it. Open NTLMAPS' server.cfg, set PARENT_PROXY to your proxy's address or IP, PARENT_PROXY_PORT to the port the proxy runs on (usually 80 or 8080), NT_DOMAIN to your domain, and USER to your username.

Run runserver.bat. It will ask for your password, enter it and press enter. Next you have to configure cpan to use NTLMAPS as a proxy. Go to strawberry\perl\lib\CPAN and open Config.pm. Set http_proxy to http://localhost:5865. Run CPAN and use it as you normally would. Now you should only have to start up NTLMAPS before running CPAN to get it to run properly.

Just a quick note, you may need to force LM + NT authentication rather than LM; To do this, open the NTLMAPS server.cfg set NT_PART to 1 and NTLM_FLAGS to 07820000.

Remover HTTP_PROXY e modificar o CPAN / Config.pm como indicado pode resolver o problema.

Resumo dos comentários abaixo:

O estudo de despejos wireshark mostra que o ActivePerl emite solicitações DNS que são retornadas como desconhecidas pelo servidor DNS. As soluções possíveis são apenas:

  1. Reconfiguração do servidor DNS (impossível para o cartaz)
  2. Iniciando uma solicitação no Site da Comunidade do ActiveState para interromper essas solicitações fúteis (sem garantia de qualquer alívio rápido)
  3. Faça o download manual e instale os módulos (apenas solução prática restante).
por 08.02.2012 / 17:44
1

Se for o NTLM, você precisará do módulo NTLM Perl. A documentação do ActiveState PPM diz que você pode obter um pacote ppmx do repositório , mas não consegui encontrar nenhum desses links. Você ainda pode, no entanto, fazer download dos ppd e tar.gz arquivos e instalá-los:

wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.ppd
wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.tar.gz
ppm install NTLM-1.09.ppd

Observe também que, se o seu computador pertencer a um domínio do Windows, você não precisará fornecer as credenciais explicitamente - http://proxy.full.name:port deve ser suficiente para NTLM / Kerberos, além de ser mais seguro.

Recentemente, o software Microsoft mudou do NTLM para o Kerberos - embora geralmente os proxies suportem ambos, pode acontecer que o NTLM seja desativado no seu. Não há muita documentação sobre os proxies do Kerberos com o PPM, mas vale a pena tentar HTTP-Negotiate , se você não conseguir que o NTLM funcione.

    
por 01.02.2012 / 11:09
1

Este é um tiro no escuro ... ninguém mencionou tentar isso, mas parece que todo mundo está sem idéias ... se isso for verdade:

"Turns out PPM asks my DNS server to resolve that name, but my local DNS server cannot resolve such external domain names."

Em seguida, edite:

C:\Windows\System32\Drivers\etc\hosts

adicione a linha:

204.244.102.19  ppm4.activestate.com

Veja se isso faz diferença.

Para solucionar problemas de ntlmaps:

There are two options in server.cfg DEBUG and BIN_DEBUG, if you have toubles with the server so set these options to DEBUG:1 and BIN_DEBUG:1 just before requesting a problem page (or resource). You have to restart proxy server to reread server.cfg. This will give you 3 log files per http request (per connection to be exact), like 127.0.0.1-1048, 127.0.0.1-1048.bin.client and 127.0.0.1-1048.bin.rserver. In the first one there is an info on what APS did, two others contain raw traffic from client and from proxy.

link

    
por 13.02.2012 / 22:14
1

Aqui está uma alternativa ao uso do NTLMAPS + Python (conforme descrito acima por harrymc). A ideia é muito semelhante, mas mais "simplificada":

  • Instale o Fiddler .
  • Configure o PPM para usar o Fiddler como um proxy. No prompt de comando, digite:

    set http_proxy=http://127.0.0.1:8888
    
  • Certifique-se de abrir qualquer página da Internet de qualquer navegador primeiro (isso criará uma sessão autenticada entre o Fiddler e seu proxy corporativo).

  • Experimente o PPM.

Veja o site da Comunidade ActiveState para obter mais detalhes.

Se ainda não funcionar, talvez seja necessário ativar os scripts do pac no violinista.

Ferramentas - > Opções do violinista - > Conexões

Marque "Usar um script PAC"

    
por 25.04.2013 / 22:41
0

Em vez de configurar o http_proxy = link , tente configurar o proxy sem nome de usuário e senha.

Basta fazer:

definir http_proxy = link

Razão: Eu li em algum lugar que, para a versão mais recente do Perl 5.22, a autenticação por proxy não é necessária. Funcionou para mim como mágica.

Espero que isso resolva seu problema.

    
por 18.08.2016 / 13:38