Điểm:2

Chứng minh rằng phần mềm hoạt động thông qua SOCKS

lá cờ za

giới thiệu

Tôi có phần mềm ruby ​​​​sử dụng mạng trong quá trình thực thi.

Gần đây, tôi nhận được phản hồi từ một người dùng làm việc sau tường lửa và sử dụng SOCKS, phần mềm này không hoạt động với anh ta

Vì vậy, tôi cần mô phỏng tình huống này để kiểm tra phần nào trong phần mềm của tôi không tôn trọng HTTP PROXY biến môi trường

Những gì tôi đã thử

Tôi đã cố gắng mô phỏng tường lửa này với iptables (bên trong docker):


cập nhật apt-get -y
apt-get cài đặt iptables

xuất SOCKS5_PROXY_HOST=xxx.xxx.xxx.xxx[1]
xuất SOCKS5_PROXY_PORT=ppp

iptables -A INPUT -s $SOCKS5_PROXY_HOST -j CHẤP NHẬN
iptables -A ĐẦU RA -d $SOCKS5_PROXY_HOST -j CHẤP NHẬN
iptables -P INPUT DROP
iptables -P OUTPUT DROP

env HTTP_PROXY=$SOCKS5_PROXY_HOST:$SOCKS5_PROXY_PORT ruby ​​my_script.rb

Vấn đề

Vì một số lý do, cách tiếp cận này không hiệu quả và tôi nhận được:

  • KẾT NỐI proxy bị hủy bỏ hoặc
  • Không thể kết nối với cổng xxx.xxx.xxx.xxx pppp: Đã hết thời gian kết nối

Ghi chú:

  • [1] Tôi đã sử dụng địa chỉ IP (không phải tên miền) cho Vớ Ủy quyền
  • [2] Tôi đã sử dụng các proxy SOCKS công khai ngẫu nhiên khác nhau trước khi đăng ký iptable tất cả các quy tắc đều có thể truy cập được
  • [3] Tôn trọng API Ruby Open-URI HTTP PROXY biến môi trường https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html, nhưng có thể một số mã của bên thứ ba thì không.

câu hỏi

  1. Đó có phải là cách tiếp cận có thể chấp nhận được không: cố gắng "mô phỏng" tường lửa bằng iptables?
  2. Vấn đề này có thể xuất hiện là một cái gì đó cụ thể của SOCKS hoặc cấu hình sai trong iptables?
  3. Có lẽ có một cách tiếp cận tốt hơn để đạt được cùng một mục tiêu: kiểm tra phần mềm chỉ hoạt động thông qua proxy SOCKS mà không có kết nối 'trực tiếp'?
Michael Hampton avatar
lá cờ cz
Có vẻ như bạn chưa viết hỗ trợ cho SOCKS trong chương trình của mình.Đây không phải là điều mà chúng tôi có thể giúp được.
CAMOBAP avatar
lá cờ za
@MichaelHampton cảm ơn vì đã trả lời. Trên thực tế, Ruby tôn trọng các biến môi trường `HTTP[S]_PROXY` https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html. Và tập lệnh ruby ​​​​chắc chắn cố gắng kết nối với proxy SOCKS vì trong thông báo lỗi tôi thấy IP của proxy. Tôi có một giả định rằng có thể các quy tắc của `iptables` quá hạn chế
Michael Hampton avatar
lá cờ cz
Proxy HTTP(S) hoàn toàn khác với proxy SOCKS. Giao thức hoàn toàn khác nhau nên chúng không thể thay thế cho nhau. Nó yêu cầu hỗ trợ đặc biệt trong chương trình của bạn để kết nối qua SOCKS, ví dụ: thông qua [lớp SOCKSSocket](https://ruby-doc.org/stdlib-2.6.3/libdoc/socket/rdoc/SOCKSSocket.html).
CAMOBAP avatar
lá cờ za
@MichaelHampton cảm ơn vì câu trả lời, tôi không biết điều đó. nếu bạn sẽ viết một câu trả lời tôi sẽ chấp nhận nó. Cảm ơn
Điểm:1
lá cờ za

Cảm ơn rất nhiều @michael-hampton cho ý kiến.

câu trả lời ngắn cho câu hỏi của riêng tôi:

  1. Cách tiếp cận này hoạt động hoàn hảo
  2. Phát hành trên hồng ngọc cạnh HTTP PROXY chỉ chấp nhận proxy HTTP[S] (nó không xử lý proxy SOCKS như Xoăn làm)
  3. Có thể iptable cái đơn giản nhất

Thêm chi tiết liên quan đến lập trình:

Đă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.