Điểm:0

Tại sao Test-NetConnection cho biết kết nối có thể được thực hiện, nhưng tôi không thể truy cập trang web?

lá cờ jp

Tôi cần xác định xem một trang web cụ thể có thể truy cập được trên một cổng cụ thể hay không, với điều kiện là có tồn tại các hạn chế về tường lửa trên mạng.

Nếu tôi không thể truy cập trang web trên một cổng cụ thể, thì điều đó có nghĩa là tôi cần sửa đổi tường lửa trước khi tiếp tục. Mặt khác, nếu tôi có thể truy cập trang web, thì tôi sẽ có thể tiến hành những gì tôi định làm.

Tôi muốn biết liệu tôi có thể tìm nạp một kho lưu trữ từ Github sử dụng URL https của repo. Một URL https ví dụ: https://github.com/git-for-windows/git.git. Điều này có thể được sử dụng với dòng vô tính và các công cụ khác.

Để xem liệu tôi có thể đạt được Github và bằng cách mở rộng, sao chép repo, tôi đã chạy lệnh sau: Test-NetConnection -ComputerName github.com -Port 443 |findstr "TcpTestSucceeded"

Trên hệ thống, lệnh này trả về thông tin sau, cho biết rằng tôi đã có thể truy cập github.com qua cổng 443 (https).

TcpTestSucceeded : Đúng

Tuy nhiên, sau đó tôi đã mở trình duyệt web và truy cập https://github.comvà trình duyệt web cho biết không thể thực hiện kết nối. https qua cổng 443 và tên miền là github.com giống như những gì tôi đưa vào bài kiểm tra.

Câu hỏi của tôi là:

  • Tại sao có sự khác biệt này giữa hai bài kiểm tra?
  • Làm thế nào tôi có thể kiểm tra chính xác hơn cmd hoặc PowerShell liệu tôi có quyền truy cập vào một miền cụ thể qua một cổng cụ thể không?

Rõ ràng, các Test-NetConnection lệnh không tạo ra kết quả chính xác, vì trình duyệt web không thể truy cập github.com.

dave_thompson_085 avatar
lá cờ jp
Nếu 'hạn chế tường lửa' là do bạn đang ở trong mạng của một doanh nghiệp hoặc tổ chức 'kiểm tra' lưu lượng truy cập vì lý do bảo mật và/hoặc pháp lý, thì có thể có một proxy rõ ràng mà trình duyệt sử dụng còn powershell thì không, hoặc một proxy minh bạch mà cả hai đều sử dụng nhưng chỉ khởi động ở trên lớp TCP. Có thể có nhiều thông tin để thử iwr (còn gọi là gọi-webrequest) và xem những gì nó nhận được.
Điểm:2
lá cờ cv

Rõ ràng, lệnh Test-NetConnection không tạo ra kết quả chính xác kết quả, vì trình duyệt web không thể truy cập github.com.

Đó không phải là một tuyên bố chính xác.

Test-NetConnection trên thực tế đã tạo kết nối TCP tới cổng 443 của máy chủ đích, xác minh rằng cổng TCP 443 trên máy chủ từ xa đang ở trạng thái nghe. Test-NetConnection không kiểm tra ứng dụng/dịch vụ nào đang chạy/nghe trên cổng 443.

Về cơ bản, Test-NetConnection không thể cho bạn biết cái gì đang chạy/nghe ở Lớp 7, nó chỉ có thể cho bạn biết rằng cổng 443 đang ở trạng thái nghe.

Điểm:1
lá cờ bd

Hai câu "kết nối có thể được thực hiện" và "Tôi có thể tiếp tục với những gì tôi định làm" khác xa với nhau và một bài kiểm tra kết nối TCP đơn giản như Test-NetConnection hoàn toàn không kiểm tra điều tương tự như thực tế bản sao git.

Khả năng mở kết nối TCP tới một cổng không có nghĩa là quyền truy cập vào dịch vụ đang lắng nghe trên cổng đó. Có nhiều giai đoạn sau khi kết nối ban đầu có thể không thành công, chẳng hạn như đàm phán TLS, xác thực, ủy quyền hoặc trao đổi giao thức cấp ứng dụng.

Ngoài ra, các hạn chế tường lửa không phải là lý do duy nhất có thể khiến kết nối TCP không thành công và lỗi kết nối TCP không phải là tác động duy nhất có thể có của hạn chế tường lửa. Vì vậy, tuyên bố của bạn:

Nếu tôi không thể truy cập trang web trên một cổng cụ thể, thì điều đó có nghĩa là tôi cần sửa đổi tường lửa trước khi tiếp tục.

Mặt khác, nếu tôi có thể truy cập trang web, thì tôi sẽ có thể tiến hành những gì tôi định làm.

cả hai đều sai. Điều này có nghĩa là, thay vì tự hỏi tại sao bạn Test-NetConnection kiểm tra không phát hiện ra vấn đề mà sau này khiến quyền truy cập GitHub của bạn không thành công, thì bạn nên phân tích vấn đề đó thực sự là gì rồi đánh giá xem việc phát hiện trước vấn đề cụ thể đó có mang lại lợi ích gì không. Nếu câu trả lời là có, thì bạn có thể nghĩ ra một bài kiểm tra để làm điều đó.

Trong thực tế, thường thì cách hành động hiệu quả nhất là chỉ thử hoạt động dự định mà không có bất kỳ thử nghiệm nào trước đó và xử lý mọi lỗi khi chúng xảy ra. Việc kiểm tra trước các vấn đề hầu như chỉ có ý nghĩa nếu chúng có thể được khắc phục tự động hoặc nếu việc thử và vận hành thực tế không thành công sẽ gây ra rủi ro hoặc chi phí đáng kể.

Cụ thể, các hoạt động của GitHub không thành công khá nhẹ nhàng và có dấu hiệu rõ ràng hợp lý về nguyên nhân gây ra lỗi, vì vậy tôi không thấy lợi ích trực tiếp nào trong việc kiểm tra kết nối trước thay vì chỉ thử trực tiếp thao tác dự kiến.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.