타사 서버 없이 친구의 원격 컴퓨터에 바이트를 보내는 방법은 무엇입니까?

타사 서버 없이 친구의 원격 컴퓨터에 바이트를 보내는 방법은 무엇입니까?

내 IP가 198.51.100.27이고 내 친구의 IP가 203.0.113.11이라고 가정합니다. 우리 모두는 표준 소비자 ISP 라우터를 통해 인터넷에 연결합니다.

타사 서버를 사용하지 않고 어떻게 서로 몇 바이트를 보낼 수 있습니까?(그리고 라우터 포트 전달 구성이 필요하지 않습니다)

netcator 에 대해 들어봤지만 ncat이를 사용하여 친구에게 "hello world"를 보내는 방법과 친구가 터미널에서 이 메시지를 볼 수 있는 방법을 잘 모르겠습니다.

그가 이렇게 해야 할까요:

ncat -C 198.51.100.27 80     # this IP is mine

그리고 나:

ncat -l 203.0.113.11 80 < echo "hello world"      # this IP is my friend's IP

?

나는 심지어 확신하지 못한다 netcat/ ncat그것이 올바른 도구인지. chownat/ 도 보았지만 pwnat"hello world"를 보내고 받는 간단한 예에서는 어떻게 사용하는지 모르겠습니다.


노트:

  • SSH나 SFTP를 통해 친구의 컴퓨터에 연결하고 싶지 않습니다. 나는 그에게 "hello world"를 보내거나 서로 문자를 보내고 싶습니다.

  • 중앙 집중식 서버 없이 P2P로 직접 바이트를 보내는 방법을 이해하는 것 외에는 명확한 목표가 없습니다. 따라서 그 사람이 콘솔에서 볼 수 있도록 1~2바이트를 보내면 문제가 되지 않습니다!

답변1

기본적으로 nc -l -p $port하나의 호스트에서 실행하고 nc $ipaddr $port적절한 값 $ipaddr과 특정 값을 설정하면 $port충분합니다. 그러나 이를 위해서는 시스템 간의 방화벽이 연결을 차단하지 않아야 합니다.

당신은 "둘 다 표준 소비자 ISP 라우터 뒤에 있다"고 언급했습니다. 이는 일반적으로 일종의 NAT를 의미합니다. 이는 라우터 뒤의 컴퓨터에 공용 IP 주소가 없으므로 호스트에 직접 연결할 수 없지만 포트를 구성해야 함을 의미합니다. 라우터 앞으로.

또한 ISP가 연결을 허용하는지 여부에 대한 질문이 있습니다. 다양한 요인에 따라 일반 사용자 연결에서는 TCP 연결을 수신하지 못할 수도 있습니다.


및 리디렉션의 경우 다른 명령의 출력을 로 파이프 하거나 문자열을 직접 로 보내야 echo합니다 . (이것은 표준 기능이 아닙니다 .)echo "message" | nc ...ncnc ... <<< "message"ncsh

답변2

"클라이언트"는 "서버" 공용 IP(whatismyip 사이트 검색)를 사용해야 하며 "서버" 역할을 하는 라우터가 "포트 전달"하는 포트 번호에 동의해야 합니다. 서버는 자신을 보호하고 해당 특정 클라이언트의 연결만 수락하려는 경우가 아니면 클라이언트의 공용 IP를 알 필요가 없습니다.

답변3

당신이 찾고 있는 것은TCP 홀 펀칭.

NAT 라우터(또는 포트 전달)를 제어할 수 없고 타사 프록시를 사용하여 통신을 동기화하고 NAT가 "캐리어 등급 NAT"가 아닌 단순 NAT인 경우 이 작업을 수행할 수 있습니다. 포트에는 변경 사항이 표시되지 않으며 IP만 변경합니다(그렇지 않으면 모든 것이 더 어려워집니다). 브로커는 실제 전화 통화 등 무엇이든 될 수 있지만 자동화에는 전문적인 것이 필요합니다. 프록시의 역할은 작업을 동기화하고 양 당사자에게 공용 IP를 알려주는 것입니다. ㅏ현기증서버는 자동화된 솔루션의 일부일 수 있습니다.

기본 원칙은 TCP가 원래는RFC 793에 정의됨SYN, SYN/ACK 및 ACK에 대한 일반적인 3중 수동 검사를 허용합니다.또는동시 SYN+SYN, 동시 SYN+ACK 및 ACK도 가능합니다(참조:이전 링크, 그림 8). 이렇게 하면 두 NAT 라우터 모두 TCP 연결의 "반환 스트림"을 엽니다.

참고: 통신은 NTP와 동기화되어야 합니다. 그렇지 않으면 속도가 느린 피어의 NAT 라우터가 RST를 전송하고 다른 NAT 라우터의 "구멍"을 닫을 수도 있습니다. 라우터가 RST를 다시 보내는 대신 패킷을 삭제하는 경우에는 문제가 되지 않습니다. 많은 홈 NAT 라우터는 이러한 패킷을 삭제하므로 문제가 발생하지 않습니다.

예: 198.51.100.27의 소유자 A가 온라인 웹사이트("내 IP는 무엇입니까"...)를 사용하여 특정 시간에 자신의 IP를 확인하고 netcat 기존 버전을 사용하는 데 동의한 후 203.0.113.11의 소유자 B에게 전화합니다.

A는 다음을 입력합니다:

nc -p 7777 203.0.113.11 8888

일반 B동시에유형:

nc -p 8888 198.51.100.27 7777

그러면 각 사용자는 설정된 TCP 연결을 보게 됩니다.동일한연결하다.

이제 A는 "hello world"를 자유롭게 입력할 수 있고 B는 이를 읽을 것입니다.

나는 실제로 stackoverflow에 대해 더 자세한 내용을 포함하여 유사한 답변을 수행했지만 솔루션으로 확인하지는 않았습니다.https://stackoverflow.com/questions/39545461/tcp-based-hole-punching/39581596#39581596

netcat을 사용하는 대신,소캇자동화를 위해 다른 것과 더 쉽게 통합될 수 있으므로 선호되어야 합니다.

관련 정보