介绍

介绍

介绍

我有一个 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,但也许一些第三方代码没有。

问题

  1. 这是一种可以接受的方法吗:尝试用“模拟”防火墙iptables
  2. 该问题可能出现的原因是 SOCKS 特有的,还是我的配置错误iptables
  3. 也许有更好的方法来实现相同的目标:测试软件仅通过 SOCKS 代理工作,而无需“直接”连接?

答案1

多谢@迈克尔·汉普顿以供评论。

简短回答一下我自己的问题:

  1. 这种方法非常有效
  2. 问题在于rubyHTTP_PROXY接受 HTTP[S] 代理(它不能处理 SOCKS 代理curl
  3. 可能是iptable最简单的一个

与编程相关的更多详细信息:

相关内容