2012-11-08 4 views
1

인터넷을 통해 TCP 패킷을 다른 컴퓨터로 보내는 방법을 배우려고합니다. 따라서 컴퓨터 1은 인터넷을 통해 컴퓨터 2 (TCP 사용)로 데이터를 보냅니다. 두 컴퓨터 모두 포트 포워딩이 올바르게 설정되었다고 가정하면 두 컴퓨터간에 TCP 연결을 설정하는 것이 어떻습니까? 내 LAN에서 작동하지만 인터넷을 통해 시도 할 때 작동하지 않는 것 같습니다.인터넷을 통해 TCP 패킷 보내기 (Ruby 사용)

내 시도 (기본적으로) :

컴퓨터 1 :

server = TCPServer.new 32500 
client = server.accept 

컴퓨터 2 :

TCPSocket.new PUBLIC_IP_OF_COMPUTER_1, 32500 

문제 TCPSocket 결코 tcpserver는 연결 없다는 것입니다.

나는 TCPServer.new의 구문은 어떻게됩니까

new(remote_host, remote_port, local_host=nil, local_port=nil) 

인 루비 문서에 읽으면 나는 단지 local_host = 전무와 LOCAL_PORT = 전무를 떠나 (그들에게 사설 IP와 포트 컴퓨터에서 32500 번호를 할당하는 대신 1)?

누군가가 올바른 방향으로 나를 가리킬 수 있다면, 좋을 것입니다! 나는 나의 접근 방식이 적어도 다소 정확하다고 희망한다.

+1

http://workingwithtcpsockets.com/ 루블과 네트워킹에 관한 것입니다. – astropanic

답변

1

루프백 인터페이스에서만 수신 대기중인 서버를 생성했습니다.

이 밖으로 시도 :

curl ifconfig.me 

당신은 당신의 외부 IP 주소를 얻을 것이다, 예를 들어, 123.123.123.123

외부에서 볼 방법을 이제
server = TCPServer.new 2000 

당신은 서버가 포트에서 수신이 예를 들어 2000

lsof -i :2000 

:

012 3,516,

루비 37,186 wopi 6U의의 IPv4 0xcf0818acc2bdc38d 0t0 TCP * : callbook

지금 localhost로 동일한 시스템에서 연결 (LISTEN)

telnet localhost 2000 

telnet 123.123.123.123 2000 # substitute your real external IP address 

이 의지를 작동 작동하지 않음

그쪽으로 외부에서 연결할 수없는 이유는 무엇입니까?

ngrep, netcat 및 tcpdump가 작동하는 방법, 네트워크 디버깅을위한 유용한 도구를 확인하십시오.

+0

안녕하세요,이 자료에 대한 더 많은 문서를 어디에서 찾을 수 있는지 알고 계십니까? 예를 들어, Ruby에는 Curl이라는 클래스가없는 것처럼 보이며 텔넷이 아닌 TCPSocket을 사용할 수 있습니까? –

+0

curl은 바이너리입니다. 루비 콘솔이 아닌 bash/zsh 쉘에 입력하십시오. 내 게시물의 telnet, netcat 및 lsof와 동일합니다. 연석 (curb)이라고 불리는 컬링 (curl)을위한 루비 바인딩이 있습니다. 그러나 이것은 아직 다른 이야기입니다. – astropanic

+0

netcat을 네트워크 (telnet)를 통해 coumunication으로 재생하는 데 꽤 잘 사용할 수 있지만 이것은 루비 라이브러리가 아닌 바이너리입니다. 위 명령에서 게시 한 책을 확인하십시오. 루비로 네트워킹 할 때가 있습니다. – astropanic