2012-11-14 41 views
1

在我的Rails 3.2应用程序中,我使用的嵌入式JavaScript图表来自TradingView。但是,似乎port 443 must be opened for it to show。因此,我试图检查端口是否对用户开放,如果不是,则显示除图表外的内容。检查端口是否在Rails中打开

我发现这个职位,"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

1000以下的端口受系统保护,需要以root权限运行。乍一看,我猜这是错的。

0

端口443是SSL(https)连接的正常通道 - 如果某个公司在其防火墙上设置此端口的出站限制,那将是相当令人惊讶的。更有可能的是,这是可能受到限制的网站的IP地址。

进入命令行并尝试使用telnet。第一次尝试你知道的东西的作品,像谷歌

> 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代码需要,也是如此。