Gerenciador de pacotes Perl via proxy NTLM

Gerenciador de pacotes Perl via proxy NTLM

Instalei o ActivePerl e incluí o PPM no trabalho, mas não consigo conectá-lo ao repositório do módulo 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 407Autenticação de proxy necessária. Acho que é um proxy NTLM, mas não tenho certeza.

Depois de fazeresse, eu recebo umErro 500: nome de host incorretoparappm4.activestate.com. Acontece que o PPM pede ao meu servidor DNS para resolver esse nome, mas meu servidor DNS local não consegue resolver esses nomes de domínio externos. Somente o proxy faz isso e apenas para tráfego HTTP...

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

Minha caixa do Windows é10.75.82.221 O servidor DNS é10.7.3.110

Farejamento de Wireshark

Isto é o que o TraceRoute mostra no Windows:

G:\>tracert ppm4.activestate.com
No se puede resolver el nombre de destino ppm4.activestate.com.

Que significa:

Não é possível resolver ppm4.activestate.com

como esperado.

Como eu disse nos comentários, o navegador parece não lançar nenhuma consulta DNS. Aqui está uma captura de tela do Wireshark (da BT) que mostra o acesso a www.google.es do Firefox (do WXP):

Minha caixa do Windows é10.75.82.221 A procuração é10.7.8.46

Farejamento de Wireshark

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

Para mim, parece 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 faço aqui sejam para acelerar o trabalho.

Responder1

A solução do erro 407 está descrita em perl.orgPerguntas e respostas:

P:Mesmo quando http_proxy está configurado para o servidor correto com as credenciais adequadas (usando o nome de usuário convencional:[e-mail protegido]:port) Ainda não consigo instalar pacotes via cpan. "LWP falhou com a mensagem do código [407] [Autenticação de proxy necessária (O ISA Server requer autorização para atender à solicitação. O acesso ao serviço Web Proxy foi negado.)]"

A:CPAN não oferece suporte à autenticação NTLM e é difícil fazer com que Authen::NTLM funcione com CPAN. Acabei usando ntlmaps como proxy local para autenticação NTLM.

A primeira coisa que você precisa fazer é obter a versão mais recente do NTLMAPS do repositório SVN e extraí-la em algum lugar. Em seguida, você precisará obter a versão mais recente do python e instalá-la. Abra server.cfg do NTLMAPS, defina PARENT_PROXY como o endereço ou IP do seu proxy, PARENT_PROXY_PORT como a porta em que o proxy é executado (geralmente 80 ou 8080), NT_DOMAIN como seu domínio e USER como seu nome de usuário.

Execute runserver.bat. Ele irá pedir sua senha, digite-a e pressione Enter. Em seguida, você deve configurar o cpan para usar o NTLMAPS como proxy. Vá para morango\perl\lib\CPAN e abra Config.pm. Defina http_proxy como http://localhost:5865. Execute o CPAN e use-o normalmente. Agora você só precisa iniciar o NTLMAPS antes de executar o CPAN para que ele funcione corretamente.

Apenas uma observação rápida: pode ser necessário forçar a autenticação LM + NT em vez de LM; Para fazer isso, abra o NTLMAPS server.cfg e defina NT_PART como 1 e NTLM_FLAGS como 07820000.

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

Resumo dos comentários abaixo:

O estudo dos dumps 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 autor da postagem)
  2. Lançar uma solicitação noSite da comunidade ActiveStatepara interromper essas solicitações fúteis (sem garantia de qualquer alívio rápido)
  3. Baixe manualmente einstalaros módulos (só resta a solução prática).

Responder2

Se for NTLM, você precisará do NTLMmódulo Perl. A documentação do ActiveState PPM diz que você pode obter um ppmxpacote norepositório, mas não consegui encontrar nenhum link desse tipo. Você ainda pode, no entanto, baixar oppdetar.gzarquivos e instale-os:

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:portdeve ser suficiente para NTLM/Kerberos, além de ser mais seguro.


Recentemente, o software da Microsoft tem mudado de NTLM para Kerberos – embora normalmente os proxies suportem ambos, elepodeacontece que o NTLM será desativado no seu. Não há muita documentação sobre proxies Kerberos com PPM, mas HTTP-Negotiatepode valer a pena tentar, se você não conseguir fazer o NTLM funcionar.

Responder3

Este é um tiro no escuro... ninguém mencionou tentar isso, mas parece que todo mundo está sem ideias... 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."

Então 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:

Existem duas opções em server.cfg DEBUG e BIN_DEBUG, se você tiver problemas com o servidor, defina essas opções como DEBUG:1 e BIN_DEBUG:1 antes de solicitar uma página (ou recurso) com problema. Você precisa reiniciar o servidor proxy para reler o server.cfg. Isso fornecerá 3 arquivos de log por solicitação http (por conexão, para ser exato), como 127.0.0.1-1048, 127.0.0.1-1048.bin.client e 127.0.0.1-1048.bin.rserver. No primeiro há informações sobre o que o APS fez, outros dois contêm tráfego bruto do cliente e do proxy.

http://ntlmaps.sourceforge.net/

Responder4

Em vez de fazer set http_proxy =http://usuário:[e-mail protegido]:porta, tente configurar o proxy sem nome de usuário e senha.

Apenas faça:

definir http_proxy=http://proxy.full.name:porta

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

Espero que isso resolva seu problema.

informação relacionada