
Ich habe ActivePerl und das Include PPM bei der Arbeit installiert, aber ich kann keine Verbindung zum Modul-Repository über den Proxy herstellen. Ich habe eine Umgebungsvariable eingerichtet
HTTP_PROXY = http://user:[email protected]:port
aber PPM zeigt immer noch einen 407-Fehler anProxy-Authentifizierung erforderlich. Ich glaube, es ist ein NTLM-Proxy, aber ich bin nicht sicher.
DanachDas, bekomme ich eineFehler 500: Ungültiger Hostnamefürppm4.activestate.com. Es stellte sich heraus, dass PPM meinen DNS-Server auffordert, diesen Namen aufzulösen, aber mein lokaler DNS-Server kann solche externen Domänennamen nicht auflösen. Nur der Proxy macht so etwas und nur für HTTP-Verkehr ...
Hier ist der Screenshot dessen, was Wireshark (läuft auf einer BackTrack-VM auf derselben Windows XP-Box) zeigt:
Meine Windows-Box ist10.75.82.221 Der DNS-Server ist10.7.3.110
Dies zeigt TraceRoute unter Windows an:
G:\>tracert ppm4.activestate.com
No se puede resolver el nombre de destino ppm4.activestate.com.
Was bedeutet:
ppm4.activestate.com kann nicht aufgelöst werden
wie erwartet.
Wie ich in den Kommentaren sagte, scheint der Browser keine DNS-Abfrage zu starten. Hier ist ein Wireshark-Screenshot (von BT), der einen Zugriff auf www.google.es von Firefox (von WXP) aus zeigt:
Meine Windows-Box ist10.75.82.221 Der Proxy ist10.7.8.46
Wie Sie sehen, erfolgt beim Zugriff über den Browser keinerlei DNS-Abfrage ...
Für mich scheint es sich lediglich um eine Sicherheitsfunktion zu handeln und ich muss um Erlaubnis bitten, bevor ich das PPM-Tool von ActiveState verwenden darf … was nicht plausibel ist, auch wenn die meisten (99 %) der hier von mir erstellten Skripte dazu dienen, die Arbeit zu beschleunigen.
Antwort1
Die Lösung des Fehlers 407 ist in perl.org beschrieben.Fragen und Antworten:
Q:Auch wenn http_proxy auf den richtigen Server mit den richtigen Anmeldeinformationen eingestellt ist (unter Verwendung des herkömmlichen Benutzernamens:[email geschützt]:port) Ich kann immer noch keine Pakete über cpan installieren. „LWP ist mit dem Code [407] fehlgeschlagen. Meldung [Proxy-Authentifizierung erforderlich (Der ISA-Server benötigt eine Autorisierung, um die Anforderung zu erfüllen. Der Zugriff auf den Webproxydienst wird verweigert.)]“
A:CPAN unterstützt keine NTLM-Authentifizierung und es ist schwierig, Authen::NTLM mit CPAN zum Laufen zu bringen. Ich habe schließlich ntlmaps als lokalen Proxy für die NTLM-Authentifizierung verwendet.
Als Erstes müssen Sie die neueste Version von NTLMAPS aus dem SVN-Repository herunterladen und irgendwo extrahieren. Als Nächstes müssen Sie die neueste Version von Python herunterladen und installieren. Öffnen Sie die Datei server.cfg von NTLMAPS, setzen Sie PARENT_PROXY auf die Adresse oder IP Ihres Proxys, PARENT_PROXY_PORT auf den Port, auf dem der Proxy läuft (normalerweise 80 oder 8080), NT_DOMAIN auf Ihre Domäne und USER auf Ihren Benutzernamen.
Führen Sie runserver.bat aus. Sie werden nach Ihrem Passwort gefragt. Geben Sie es ein und drücken Sie die Eingabetaste. Als nächstes müssen Sie cpan so konfigurieren, dass NTLMAPS als Proxy verwendet wird. Gehen Sie zu strawberry\perl\lib\CPAN und öffnen Sie Config.pm. Setzen Sie http_proxy auf http://localhost:5865. Führen Sie CPAN aus und verwenden Sie es wie gewohnt. Jetzt müssen Sie nur noch NTLMAPS starten, bevor Sie CPAN ausführen, damit es ordnungsgemäß ausgeführt wird.
Nur eine kurze Anmerkung: Möglicherweise müssen Sie die LM + NT-Authentifizierung statt LM erzwingen. Öffnen Sie dazu die Datei NTLMAPS server.cfg und setzen Sie NT_PART auf 1 und NTLM_FLAGS auf 07820000.
Das Entfernen von HTTP_PROXY und die Änderung von CPAN/Config.pm wie angegeben könnte das Problem lösen.
Zusammenfassung der Kommentare unten:
Die Untersuchung von Wireshark-Dumps zeigt, dass ActivePerl DNS-Anfragen stellt, die vom DNS-Server als unbekannt zurückgegeben werden. Als Lösungsansatz sind nur folgende denkbar:
- Neukonfiguration des DNS-Servers (für den Poster unmöglich)
- Starten einer Anfrage auf derActiveState-Community-Sitediese vergeblichen Anfragen zu stoppen (keine Garantie auf schnelle Hilfe)
- Manuell herunterladen undInstallierendie Module (einzig verbleibende praktische Lösung).
Antwort2
Wenn es NTLM ist, benötigen Sie das NTLM
Perl-Modul. In der ActiveState PPM-Dokumentation steht, dass Sie ein ppmx
Paket von derRepository, aber ich konnte keinen solchen Link finden. Sie können jedoch immer noch dieppd
Undtar.gz
Dateien und installieren Sie sie:
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
Beachten Sie auch, dass Sie die Anmeldeinformationen nicht explizit angeben müssen, wenn Ihr Computer zu einer Windows-Domäne gehört. Dies http://proxy.full.name:port
sollte für NTLM/Kerberos ausreichen und zudem sicherer sein.
Vor kurzem wurde in der Microsoft-Software von NTLM auf Kerberos umgestellt – obwohl Proxys normalerweise beides unterstützen,dürfenEs kann vorkommen, dass NTLM in Ihrem System deaktiviert wird. Es gibt nicht viel Dokumentation zu Kerberos-Proxys mit PPM, aber HTTP-Negotiate
es könnte einen Versuch wert sein, wenn Sie NTLM nicht zum Laufen bekommen.
Antwort3
Das ist ein Schuss ins Blaue ... niemand hat erwähnt, dass er es versuchen würde, aber es klingt, als ob allen die Ideen ausgegangen sind ... wenn das stimmt:
"Turns out PPM asks my DNS server to resolve that name, but my local DNS server cannot resolve such external domain names."
Dann bearbeiten:
C:\Windows\System32\Drivers\etc\hosts
fügen Sie die Zeile hinzu:
204.244.102.19 ppm4.activestate.com
Sehen Sie, ob es einen Unterschied macht.
So beheben Sie Probleme mit ntlmaps:
Es gibt zwei Optionen in server.cfg DEBUG und BIN_DEBUG. Wenn Sie Probleme mit dem Server haben, setzen Sie diese Optionen auf DEBUG:1 und BIN_DEBUG:1, kurz bevor Sie eine Problemseite (oder Ressource) anfordern. Sie müssen den Proxyserver neu starten, um server.cfg erneut zu lesen. Dadurch erhalten Sie 3 Protokolldateien pro HTTP-Anforderung (pro Verbindung, um genau zu sein), z. B. 127.0.0.1-1048, 127.0.0.1-1048.bin.client und 127.0.0.1-1048.bin.rserver. In der ersten gibt es Informationen darüber, was APS getan hat, die beiden anderen enthalten den Rohdatenverkehr vom Client und vom Proxy.
Antwort4
Anstatt set http_proxy =http://Benutzer:[email geschützt]:Hafen, versuchen Sie einfach, einen Proxy ohne Benutzernamen und Passwort einzurichten.
Mach einfach:
setze http_proxy =http://proxy.vollständiger.name:port
Grund: Ich habe irgendwo gelesen, dass für die neueste Version von Perl 5.22 keine Proxy-Authentifizierung erforderlich ist. Bei mir hat es wunderbar funktioniert.
Ich hoffe, es löst Ihr Problem.