Trình quản lý gói Perl qua proxy NTLM


3

Tôi đã cài đặt ActivePerl và PPM bao gồm tại nơi làm việc, nhưng tôi không thể kết nối nó với kho lưu trữ mô-đun thông qua proxy. Tôi đã thiết lập một biến môi trường

HTTP_PROXY = http://user:pass@proxy.full.name:port

nhưng PPM vẫn hiển thị yêu cầu Xác thực Proxy lỗi 407 . Tôi nghĩ đó là proxy NTLM, nhưng tôi không chắc.

Sau khi thực hiện việc này , tôi nhận được Lỗi 500: Tên máy chủ xấu cho ppm4.activestate.com . Hóa ra PPM yêu cầu máy chủ DNS của tôi giải quyết tên đó, nhưng máy chủ DNS cục bộ của tôi không thể giải quyết các tên miền bên ngoài đó. Chỉ proxy mới làm điều đó và chỉ cho lưu lượng HTTP ...

Đây là ảnh chụp màn hình của những gì Wireshark (đang chạy trên BackTrack VM trên cùng hộp Windows XP) đang hiển thị:

Hộp Windows của tôi là 10,75.82.221 Máy chủ DNS là 10.7.3.110

Wireshark đánh hơi

Đây là những gì TraceRoute hiển thị từ Windows:

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

Nghĩa là:

Không thể giải quyết ppm4.activestate.com

như mong đợi.

Như tôi đã nói trên các bình luận, trình duyệt dường như không khởi chạy bất kỳ truy vấn DNS nào. Đây là ảnh chụp màn hình của Wireshark (từ BT) cho thấy quyền truy cập vào www.google.es từ Firefox (từ WXP):

Hộp Windows của tôi là 10,75.82.221 Proxy là 10.7.8.46

Wireshark đánh hơi

Như bạn có thể thấy, không có truy vấn DNS nào khi truy cập thông qua trình duyệt ...

Đối với tôi, có vẻ như đó là một tính năng bảo mật và tôi sẽ phải xin phép cho phép tôi sử dụng công cụ PPM của ActiveState ... điều này không hợp lý, ngay cả khi hầu hết (99%) các tập lệnh tôi tạo ở đây là để tăng tốc công việc.


Bạn có thể kết nối thông qua một trình duyệt? Việc xử lý lỗi 407 trong Câu hỏi thường gặp này có vẻ hữu ích không?
harrymc

Tôi có thể kết nối qua trình duyệt, nhưng chỉ với cổng 80. Tôi đã không thử điều đó, sẽ làm điều đó ngay bây giờ.
m0skit0

Tôi đã thử điều đó và bây giờ tôi nhận được Lỗi 500 ppm4.activestate.com tên máy chủ xấu . Tôi đã sửa đổi Config.pm tương ứng cho ActivePerl.
m0skit0

Tôi nghĩ rằng có một tham số sai ở đâu đó. Tôi sợ bạn sẽ phải gỡ lỗi các gói yêu cầu / trả lời bằng cách sử dụng fiddler2 hoặc wireshark để tìm lỗi.
harrymc

1
Tốt Vì vậy, tôi đã chuyển đổi cuộc thảo luận của chúng tôi thành một câu trả lời dưới đây. Xin vui lòng sửa đổi / thêm vào nó thông qua chỉnh sửa.
harrymc

Câu trả lời:


2

Giải quyết lỗi 407 được mô tả trong perl.org Câu hỏi và trả lời :

H: Ngay cả khi http_proxy được đặt đúng máy chủ với thông tin xác thực phù hợp (sử dụng tên người dùng quy ước: password@server.tld: port) Tôi vẫn không thể cài đặt các gói qua cpan. "LWP không thành công với thông báo mã [407] [Yêu cầu xác thực proxy (Máy chủ ISA yêu cầu ủy quyền để thực hiện yêu cầu. Truy cập vào dịch vụ Web Proxy bị từ chối.)]"

Trả lời: CPAN không hỗ trợ xác thực NTLM và rất khó để Authen :: NTLM hoạt động với CPAN. Tôi đã kết thúc bằng cách sử dụng ntlmaps làm proxy cục bộ để xác thực NTLM.

Điều đầu tiên bạn cần làm là lấy phiên bản NTLMAPS mới nhất từ ​​repo svn của họ, giải nén nó ở đâu đó. Tiếp theo bạn sẽ cần lấy phiên bản mới nhất của python và cài đặt nó. Mở máy chủ NTLMAPS '.

Chạy ranerver.bat. Nó sẽ hỏi mật khẩu của bạn, nhập nó và nhấn enter. Tiếp theo, bạn phải cấu hình cpan để sử dụng NTLMAPS làm proxy. Truy cập dâu tây \ perl \ lib \ CPAN và mở Config.pm. Đặt http_proxy thành http: // localhost: 5865 . Chạy CPAN và sử dụng nó như bình thường. Bây giờ bạn chỉ cần khởi động NTLMAPS trước khi chạy CPAN để làm cho nó chạy đúng.

Chỉ cần lưu ý nhanh, bạn có thể cần buộc xác thực LM + NT thay vì LM; Để thực hiện việc này, hãy mở máy chủ NTLMAPS.cfg đặt NT_PART thành 1 và NTLM_FLAGS thành 07820000.

Loại bỏ HTTP_PROXY và sửa đổi CPAN / Config.pm như đã nêu có thể giải quyết vấn đề.

Tóm tắt các ý kiến ​​dưới đây:

Nghiên cứu về các bãi chứa wireshark cho thấy ActivePerl đưa ra các yêu cầu DNS được máy chủ DNS trả về là không xác định. Các giải pháp có thể chỉ là:

  1. Định cấu hình lại máy chủ DNS (không thể áp dụng cho người đăng)
  2. Đưa ra một yêu cầu trên Trang web Cộng đồng ActiveState để ngăn chặn các yêu cầu vô ích này (không đảm bảo bất kỳ sự cứu trợ nhanh chóng nào)
  3. Tải xuống và cài đặt thủ công các mô-đun (chỉ còn lại giải pháp thực tế).

Cảm ơn, tôi đã tìm kiếm nhiều trên Google nhưng không thấy điều đó. Tôi đã làm hầu hết điều đó, ngoại trừ việc buộc LM + NT auth. Sẽ thử.
m0skit0

Không đi, vẫn Lỗi 500: tên máy chủ xấu . Như tôi đã nói về các ý kiến ​​trên: "[đó là proxy] lọc và phân giải tên [cho tên miền bên ngoài]" , vì vậy tôi trực tiếp không thể phân giải tên miền bên ngoài thành IP ngoại trừ thông qua proxy và HTTP.
m0skit0

Lạ thật, cái này đáng lẽ phải hoạt động một khi được cấu hình. Xem chủ đề này cho một trường hợp tương tự (giải quyết). Đối với một giải pháp thay thế xem điều này . Nếu không có gì hoạt động, chính xác những gì wireshark hiển thị?
harrymc

Tôi đã đính kèm một ảnh chụp màn hình với lời giải thích tối thiểu trong câu hỏi. Cảm ơn vì đã dành thời gian cho tôi!
m0skit0

Bạn có thể so sánh dấu vết wireshark này với các truy vấn DNS như khi được phát ra từ trình duyệt (mà bạn nói không hoạt động). Đầu ra của tracert ppm4.activestate.comcũng sẽ hữu ích.
harrymc

1

Nếu là NTLM, bạn sẽ cần NTLMmô-đun Perl. Tài liệu PPM của ActiveState nói rằng bạn có thể có được một ppmxgói từ kho lưu trữ , nhưng tôi không thể tìm thấy bất kỳ liên kết nào như vậy. Tuy nhiên, bạn vẫn có thể tải xuống ppdtar.gz các tệp và cài đặt chúng:

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

Cũng lưu ý rằng, nếu máy tính của bạn thuộc miền Windows, bạn không cần cung cấp thông tin xác thực một cách rõ ràng - http://proxy.full.name:portnên đủ cho NTLM / Kerberos, ngoài việc bảo mật hơn.


Gần đây, phần mềm của Microsoft đã chuyển từ NTLM sang Kerberos - mặc dù thông thường các proxy hỗ trợ cả hai, điều đó có thể xảy ra là NTLM sẽ bị vô hiệu hóa trong bạn. Không có nhiều tài liệu về proxy Kerberos với PPM, nhưng HTTP-Negotiatecó thể đáng để thử, nếu bạn không thể làm cho NTLM hoạt động.


Cài đặt thành công nhưng vẫn không đi. Ví dụ: tôi chọn Win32-EmailSend từ PPM để cài đặt:Win32-EmailSend marked for install Installing package ... Downloading Win32-EmailSend-0.04 ... failed 407 Proxy Authentication Required Installing package failed ERROR: 407 Proxy Authentication Required
m0skit0

Làm cách nào tôi có thể thiết lập HTTP :: Đàm phán cho PPM? Tôi chỉ cài đặt nó như mô-đun NTML?
m0skit0

1

Đây là một cảnh quay trong bóng tối ... không ai đề cập đến việc thử điều này nhưng có vẻ như mọi người đều nghĩ ra ... nếu điều này là đúng:

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

Sau đó chỉnh sửa:

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

thêm dòng:

204.244.102.19  ppm4.activestate.com

Xem nếu nó làm cho một sự khác biệt.


Để khắc phục sự cố ntlmaps:

Có hai tùy chọn trong server.cfg DEBUG và BIN_DEBUG, nếu bạn gặp vấn đề với máy chủ, hãy đặt các tùy chọn này thành DEBUG: 1 và BIN_DEBUG: 1 ngay trước khi yêu cầu trang vấn đề (hoặc tài nguyên). Bạn phải khởi động lại máy chủ proxy để đọc lại server.cfg. Điều này sẽ cung cấp cho bạn 3 tệp nhật ký cho mỗi yêu cầu http (chính xác cho mỗi kết nối), như 127.0.0.1-1048, 127.0.0.1-1048.bin.client và 127.0.0.1-1048.bin.rserver. Trong phần đầu tiên có một thông tin về những gì APS đã làm, hai cái khác chứa lưu lượng truy cập thô từ máy khách và từ proxy.

http://ntlmaps.sourceforge.net/


Cảm ơn, ý kiến ​​hay, đã không nghĩ về nó. Vấn đề là nếu IP của ppm4.activestate.com thay đổi, tôi sẽ phải chỉnh sửa lại tệp đó ... Tôi đang kiểm tra nó.
m0skit0

Lạ: bây giờ PPM nói: Tải xuống danh sách gói Kho lưu trữ gói ActiveState ... không thành công 500 Không thể kết nối với ppm4.activestate.com:80 (kết nối: hết thời gian)
m0skit0

nc -n 204.244.102.19 80 thậm chí không hiển thị trên Wireshark ... Sự kỳ lạ tuyệt đối ...
m0skit0

Là lưu lượng truy cập vẫn đang được chuyển hướng đến proxy? Có một số tùy chọn gỡ lỗi cho ntlmaps có thể hiển thị.
mgjk

1
@ m0skit0, tôi đã thêm thông tin mới về việc bật gỡ lỗi ntlmaps cho câu trả lời của tôi. Trừ khi nhật ký nói điều gì đó thực sự thú vị, tôi không có ý tưởng. Chúc may mắn :-)
mgjk

1

Đây là một thay thế cho việc sử dụng NTLMAPS + Python (như được mô tả ở trên bởi harrymc). Ý tưởng rất giống nhau, nhưng "sắp xếp hợp lý" hơn:

  • Cài đặt Fiddler .
  • Định cấu hình PPM để sử dụng Fiddler làm proxy. Trong dấu nhắc lệnh:

    set http_proxy=http://127.0.0.1:8888
  • Trước tiên hãy đảm bảo mở bất kỳ trang Internet nào từ bất kỳ trình duyệt nào (điều này sẽ tạo ra một phiên xác thực giữa Fiddler và Proxy công ty của bạn).

  • Hãy thử PPM.

Xem Trang web Cộng đồng ActiveState để biết thêm chi tiết.

Nếu nó vẫn không hoạt động, bạn có thể cần phải bật các tập lệnh pac trong fiddler.

Công cụ -> Tùy chọn Fiddler -> Kết nối

Kiểm tra "Sử dụng tập lệnh PAC"


0

Thay vì thực hiện, hãy đặt http_proxy = http: // user: pass@proxy.full.name: port , chỉ cần thử đặt proxy mà không cần tên người dùng và mật khẩu.

Cứ làm đi:

đặt http_proxy = http://proxy.full.name:port

Lý do: Tôi đã đọc ở đâu đó rằng đối với phiên bản mới nhất của Perl 5.22, không cần xác thực proxy. Nó làm việc cho tôi như ma thuật.

Hy vọng nó giải quyết vấn đề của bạn.


1
Cảm ơn nhưng sẽ không làm việc. Một ủy quyền NTLM là không giống nhau hơn so với một proxy HTTP. Nó đòi hỏi xác thực.
m0skit0

1
Ồ vâng !! Tôi đã không nghĩ về điều đó. Vì nó là HTTP proxy cho tôi, nó đã hoạt động. Cảm ơn bạn đã giáo dục tôi.
Vyankatesh Agrawal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.