2009-09-09 4 views
2

클래스 A 네트워크의 노드에서 응용 프로그램을 실행 중이지만 그 네트워크의 유일한 노드에 로그인하면 내 시스템에서 액세스 할 수 있습니다. 또한 클래스 B 주소를가집니다.SSH 터널을 사용하여 Java 응용 프로그램을 실행하는 두 노드 사이의 통신

그러나 클라이언트 부분 (GUI 및 모든 항목 포함)은 내 시스템에서만 실행할 수 있으므로 클래스 A 네트워크와 통신 할 수있는 방법이 필요합니다. 클라이언트 (내 시스템)는 ServerSocket을 사용하여 내부 네트워크의 가장자리에있는 서버에 간단한 TCP 소켓을 설정하려고 시도하지만 연결 시간 초과 예외가 발생합니다. SSH 포트 22 만 열려 있기 때문에 누군가가 내 시스템에서 내부 네트워크로 패킷을 보내기 위해 SSH 터널링을 사용하도록 권장했습니다.

인터넷 검색이 끝나면 다음과 같이 SSH 터널을 설정할 수 있지만 Java에서 소켓을 설정하려면 어떻게해야합니까? 감사!

ssh -L 2222:10.10.10.10:22 174.174.174.174 

편집 : 나는 내부 노드에 내 시스템에서 포트 포워딩을 설정하는 JSch을 사용했지만, 모든 내부에 별도의 터널을 설정하지 않고 내가 양방향 만들 수있는 방법이 마디? 노드는 응답하기 위해 동일한 TCP 연결을 사용하지 않지만 랩톱의 포트 2222에 새 연결을 설정했습니다.

답변

0

프로그래밍 방식으로 전달 포트를 설정하는 방법을 묻는 경우 JSch which supports port forwarding을 사용하십시오.

+0

예, 정확하게해야 할 일입니다. 내가 연결을 시도하는 코드의 발췌 부분을 올려 놓았으나 지금까지는 여전히 Connection Timed Out 예외를 얻고 있습니다. – thodinc

2

SSL 터널은 다른 소켓과 마찬가지로 작동하며 로컬 소켓에 연결하기 만하면됩니다. 귀하의 경우에는

Socket socket = new Socket("localhost", 2222); 
OutputStream out = socket.getOutputStream(); 

터널이 실제로 10.10.10.10:22에 연결됩니다.

+0

나는 "SSL"이 아니라 "SSH"를 의미한다고 생각합니다 .-). –

+0

@MattSolnit, ZZ 코더는 SSL을 의미합니다. SSL 터널입니다. – logoff