Administrador de paquetes Perl a través del proxy NTLM

Administrador de paquetes Perl a través del proxy NTLM

Instalé ActivePerl y incluí PPM en el trabajo, pero no puedo conectarlo al repositorio de módulos a través del proxy. He configurado una variable de entorno

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

pero PPM todavía muestra un error 407Se requiere autenticación proxy. Creo que es un proxy NTLM, pero no estoy seguro.

Después de hacereste, obtengo unError 500: nombre de host incorrectoparappm4.activestate.com. Resulta que PPM le pide a mi servidor DNS que resuelva ese nombre, pero mi servidor DNS local no puede resolver dichos nombres de dominio externos. Sólo el proxy hace tal cosa y sólo para el tráfico HTTP...

Aquí está la captura de pantalla de lo que muestra Wireshark (que se ejecuta en una máquina virtual BackTrack en el mismo cuadro de Windows XP):

Mi caja de Windows es10.75.82.221 El servidor DNS es10.7.3.110

Olfateo de tiburón alambre

Esto es lo que muestra TraceRoute desde Windows:

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

Lo que significa:

No se puede resolver ppm4.activestate.com

como se esperaba.

Como dije en los comentarios, el navegador no parece iniciar ninguna consulta de DNS. Aquí tenéis una captura de pantalla de Wireshark (de BT) que muestra un acceso a www.google.es desde Firefox (de WXP):

Mi caja de Windows es10.75.82.221 El apoderado es10.7.8.46

Olfateo de tiburón alambre

Como puede ver, no se realiza ninguna consulta de DNS al acceder a través del navegador...

Para mí, simplemente parece que es una característica de seguridad y tendré que pedir permiso para permitirme usar la herramienta PPM de ActiveState... lo cual no es plausible, incluso si la mayoría (99%) de los scripts que hago aquí son para acelerar la obra.

Respuesta1

La solución del error 407 se describe en perl.orgPreguntas y respuestas:

P:Incluso cuando http_proxy está configurado en el servidor correcto con las credenciales adecuadas (usando el nombre de usuario de la convención:[correo electrónico protegido]:port) Todavía no puedo instalar paquetes a través de cpan. "LWP falló con el mensaje de código [407] [Se requiere autenticación de proxy (el servidor ISA requiere autorización para cumplir con la solicitud. Se deniega el acceso al servicio de proxy web)]"

A:CPAN no admite la autenticación NTLM y es difícil lograr que Authen::NTLM funcione con CPAN. Terminé usando ntlmaps como proxy local para la autenticación NTLM.

Lo primero que deberá hacer es obtener la última versión de NTLMAPS de su repositorio svn y extraerla en algún lugar. A continuación, necesitarás obtener la última versión de Python e instalarla. Abra server.cfg de NTLMAPS, configure PARENT_PROXY con la dirección o IP de su proxy, PARENT_PROXY_PORT con el puerto en el que se ejecuta el proxy (generalmente 80 o 8080), NT_DOMAIN con su dominio y USER con su nombre de usuario.

Ejecuterunserver.bat. Te pedirá tu contraseña, ingrésala y presiona enter. A continuación debe configurar cpan para usar NTLMAPS como proxy. Vaya a fresa\perl\lib\CPAN y abra Config.pm. Establezca http_proxy en http://localhost:5865. Ejecute CPAN y utilícelo como lo haría normalmente. Ahora sólo debería tener que iniciar NTLMAPS antes de ejecutar CPAN para que se ejecute correctamente.

Sólo una nota rápida: es posible que deba forzar la autenticación LM + NT en lugar de LM; Para hacer esto, abra NTLMAPS server.cfg y configure NT_PART en 1 y NTLM_FLAGS en 07820000.

Eliminar HTTP_PROXY y modificar CPAN/Config.pm como se indica puede resolver el problema.

Resumen de los comentarios a continuación:

El estudio de los volcados de Wirehark muestra que ActivePerl emite solicitudes DNS que el servidor DNS devuelve como desconocidas. Las soluciones posibles son sólo:

  1. Reconfiguración del servidor DNS (imposible para el cartel)
  2. Lanzar una solicitud en elSitio de la comunidad ActiveStatedetener estas solicitudes inútiles (no hay garantía de un alivio rápido)
  3. Descargar manualmente yinstalarlos módulos (solo queda una solución práctica).

Respuesta2

Si es NTLM, necesitará el NTLMmódulo Perl. La documentación de ActiveState PPM dice que puede obtener un ppmxpaquete delrepositorio, pero no pude encontrar ningún enlace de ese tipo. Sin embargo, todavía puedes descargar elppdytar.gzarchivos e instalarlos:

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

También tenga en cuenta que, si su computadora pertenece a un dominio de Windows, no debería necesitar proporcionar las credenciales explícitamente; http://proxy.full.name:portdebería ser suficiente para NTLM/Kerberos, además de ser más seguro.


Recientemente, el software de Microsoft ha estado cambiando de NTLM a Kerberos; aunque normalmente los servidores proxy admiten ambos,poderSucede que NTLM estará deshabilitado en el tuyo. No hay mucha documentación sobre los servidores proxy Kerberos con PPM, pero HTTP-Negotiatepodría valer la pena intentarlo si no puede hacer que NTLM funcione.

Respuesta3

Esto es un tiro en la oscuridad... nadie ha mencionado haber intentado esto, pero parece que a todos se les han acabado las ideas... si esto es cierto:

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

Luego edite:

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

agrega la línea:

204.244.102.19  ppm4.activestate.com

Vea si hace la diferencia.


Para solucionar problemas de ntlmaps:

Hay dos opciones en server.cfg DEBUG y BIN_DEBUG, si tiene problemas con el servidor, configure estas opciones en DEBUG:1 y BIN_DEBUG:1 justo antes de solicitar una página (o recurso) de problema. Debe reiniciar el servidor proxy para volver a leer server.cfg. Esto le dará 3 archivos de registro por solicitud http (por conexión para ser exactos), como 127.0.0.1-1048, 127.0.0.1-1048.bin.client y 127.0.0.1-1048.bin.rserver. En el primero hay información sobre lo que hizo APS, otros dos contienen tráfico sin procesar del cliente y del proxy.

http://ntlmaps.sourceforge.net/

Respuesta4

En lugar de hacerlo, establezca http_proxy =http://usuario:[correo electrónico protegido]:puerto, simplemente intente configurar el proxy sin nombre de usuario ni contraseña.

Solo haz:

establecer http_proxy =http://proxy.nombre.completo:puerto

Motivo: leí en alguna parte que para la última versión de Perl 5.22, no es necesaria la autenticación de proxy. Funcionó para mí como por arte de magia.

Espero que resuelva tu problema.

información relacionada