2012-11-14 3 views
1

Rails 3.2 앱에서 TradingView의 자바 스크립트 차트를 사용하고 있습니다. 그러나 그것은 port 443 must be opened for it to show 인 것 같습니다. 따라서 포트가 사용자에게 열려 있는지 확인하고 그렇지 않은 경우 차트 옆에 무언가를 표시하려고합니다. 레일에서 포트가 열려 있는지 확인

나는이 게시물에, "Ruby - See if a port is open"을 발견하고이 답변으로 일하고있다 :

def port_open?(ip, port=443, seconds=1) 

포트가 항상 같은 될 것입니다 확인 이후 : 그러나

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 

, 나는 수를 수정 나를 위해.

나는이 같은 메서드를 호출 해요 : I가 방화벽 뒤에있을 때

@ip = request.remote_ip 
test = port_open?(@ip) 

나는이 문제를 발견했다.

내가 이해할 수없는 것은 방화벽 뒤에 있지 않은 차트를 볼 수 있지만 아직 로컬에서 코드를 실행하면 차트가 표시되지만 false이 표시된다는 것입니다.

그러나 내가 port=3000을 변경하면 나는 사실을 알게됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사!

답변

0

1000 미만의 포트는 시스템에 의해 보호되며 루트 권한으로 실행해야합니다. 언뜻 나는 이것이 잘못된 것이라고 생각합니다.

0

포트 443은 SSL (https) 연결을위한 일반적인 채널입니다. 회사가 방화벽에서이 포트에 대한 아웃 바운드 제한을 설정하면 상당히 놀랍습니다. 아마도 제한 될 수있는 사이트의 IP 주소 일 가능성이 큽니다.

텔넷으로 연결을 시도하십시오. 먼저 Connected to google.com 응답이 컴퓨터 포트와 IP 주소에 성공적으로 연결을 만든 것을 보여줍니다 구글

> telnet google.com 443 
> Trying 74.125.226.231... 
> Connected to google.com. 
> Escape character is '^]'. 

같은 당신이 작동하는 무언가를 시도합니다. 그렇지 않으면 Trying x.x.x.x... 행에 중단됩니다.

또 다른 가능성은 인트라넷이 프록시 서버를 통과하도록 설정 되었기 때문입니다. 네트워크의 컴퓨터에 내부적으로 연결하고 실제로 연결합니다. 이것으로 인해 문제를 해결할 수 있을지 모르지만 브라우저가 프록시 서버를 처리하기위한 특별한 설정을 가지고 있기 때문에 Rails 코드도 필요합니다.

관련 문제