在我的Rails 3.2应用程序中,我使用TradingView中的嵌入式javascript图表。但是,似乎port 443 must be opened for it to show。因此,我正在尝试检查端口是否为用户打开,如果没有,则在图表旁边显示一些内容。
我发现这篇文章"Ruby - See if a port is open"并且一直在研究这个问题:
require 'socket'
require 'timeout'
def port_open?(ip, port, seconds=1)
Timeout::timeout(seconds) do
begin
TCPSocket.new(ip, port).close
true
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
false
end
end
rescue Timeout::Error
false
end
但是,我将其修改为:
def port_open?(ip, port=443, seconds=1)
因为要检查的端口对我来说总是一样的。
我正在调用这样的方法:
@ip = request.remote_ip
test = port_open?(@ip)
当我在防火墙后面时,我发现了这个问题。
我不明白的是,我现在可以看到图表,我不在防火墙后面,但如果我在本地运行下面的代码,我可以看到图表,但我收到false
。
但是,如果我更改port=3000
我收到的是真的。我究竟做错了什么?谢谢!
答案 0 :(得分:0)
1000以下的端口受系统保护,需要以root权限运行。乍一看,我猜这是错的。
答案 1 :(得分:0)
端口443是SSL(https)连接的正常通道 - 如果公司在其防火墙上设置此端口的出站限制,这将是非常令人惊讶的。更可能的是,这是可能受限制的网站的IP地址。
访问命令行并尝试使用telnet。首先尝试你知道的东西,比如google
> telnet google.com 443
> Trying 74.125.226.231...
> Connected to google.com.
> Escape character is '^]'.
Connected to google.com
响应表明您的计算机已成功连接到端口和IP地址。否则,它会挂在Trying x.x.x.x...
行。
另一种可能性是您的Intranet设置为通过代理服务器 - 您在网络中的机器内部建立连接,然后它实际连接。这可能搞砸了 - 不知道你需要做些什么来处理它,但有些特别的东西 - 浏览器有特殊的设置来处理代理服务器,所以你的Rails代码也需要。