2012-11-14 46 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代碼需要,也是如此。