介绍
我有一个 ruby 软件,它在执行过程中利用网络。
最近我收到一位在防火墙后工作并使用 SOCKS 的用户的反馈,该软件对他不起作用
所以我需要模拟这种情况来检查我的软件的哪一部分不尊重HTTP_PROXY
环境变量
我尝试过
我尝试用(docker 内部)模拟这个防火墙iptables
:
apt-get update -y
apt-get install iptables
export SOCKS5_PROXY_HOST=xxx.xxx.xxx.xxx[1]
export SOCKS5_PROXY_PORT=ppp
iptables -A INPUT -s $SOCKS5_PROXY_HOST -j ACCEPT
iptables -A OUTPUT -d $SOCKS5_PROXY_HOST -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
env HTTP_PROXY=$SOCKS5_PROXY_HOST:$SOCKS5_PROXY_PORT ruby my_script.rb
问题
由于某种原因,这种方法不起作用,我得到:
Proxy CONNECT aborted
或者Failed to connect to xxx.xxx.xxx.xxx port pppp: Connection timed out
笔记:
- [1] 我使用 IP 地址(而不是域名)进行
SOCKS
代理 - [2] 在应用
iptable
规则之前,我曾使用过不同的随机公共 SOCKS 代理,它们都是可以访问的 - [3] Ruby Open-URI API 尊重
HTTP_PROXY
环境变量https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html,但也许一些第三方代码没有。
问题
- 这是一种可以接受的方法吗:尝试用“模拟”防火墙
iptables
? - 该问题可能出现的原因是 SOCKS 特有的,还是我的配置错误
iptables
? - 也许有更好的方法来实现相同的目标:测试软件仅通过 SOCKS 代理工作,而无需“直接”连接?
答案1
多谢@迈克尔·汉普顿以供评论。
简短回答一下我自己的问题:
- 这种方法非常有效
- 问题在于
ruby
只HTTP_PROXY
接受 HTTP[S] 代理(它不能处理 SOCKS 代理curl
) - 可能是
iptable
最简单的一个
与编程相关的更多详细信息:
- 我的软件使用
git
gem 无法处理HTTP_PROXY
并且任何代理都需要明确设置。如何实现这一点的良好指南 socksify
可以帮助轻松添加支持