node.js에서 두 개의 NAT를 통해 TCP 구멍을 펀치하려고합니다. 문제는 연결에 사용할 로컬 포트를 선택하는 방법을 알아낼 수 없다는 것입니다.Node.js의 TCP 구멍 펀칭
4
A
답변
1
소켓에 로컬 포트가 할당되었습니다. 동일한 포트를 다시 사용하려면 서버와 통신하는 데 사용 된 소켓과 동일한 소켓을 사용하여 클라이언트에 연결할 수 있습니다. 이것은 TCP 홀 펀칭을하고 있기 때문에 효과가 있습니다. 그러나 직접 포트를 선택할 수는 없습니다.
// server.js
require('net').createServer(function(c) {
c.write(c.remotePort.toString(10));
}).listen(4434);
//client.js
var c = require('net').createConnection({host : '127.0.0.1', port : 4434});
c.on('data', function(data) {
console.log(data.toString(), c.localPort);
c.end();
});
c.on('end', function() {
c.connect({host : '127.0.0.1', port : 4434});
});
-1
대중 서버와의 연결을 생성 한 후, 당신은 또한 그 연결을 설정하는 데 사용 된 동일한 로컬 (!) 포트에서 수신 대기해야합니다 여기
는 몇 가지 테스트 코드입니다.나는 개념의 완전한 TCP 홀 펀칭 증거에 testcode 확장 : 서버에서 발생하는 신호와 더 완전한 버전에 대한
// server.js
var server = require('net').createServer(function (socket) {
console.log('> Connect to this public endpoint with clientB:', socket.remoteAddress + ':' + socket.remotePort);
}).listen(4434, function (err) {
if(err) return console.log(err);
console.log('> (server) listening on:', server.address().address + ':' + server.address().port)
});
// clientA.js
var c = require('net').createConnection({host : 'PUBLIC_IP_OF_SERVER', port : 4434}, function() {
console.log('> connected to public server via local endpoint:', c.localAddress + ':' + c.localPort);
// do not end the connection, keep it open to the public server
// and start a tcp server listening on the ip/port used to connected to server.js
var server = require('net').createServer(function (socket) {
console.log('> (clientA) someone connected, it\s:', socket.remoteAddress, socket.remotePort);
socket.write("Hello there NAT traversal man, this is a message from a client behind a NAT!");
}).listen(c.localPort, c.localAddress, function (err) {
if(err) return console.log(err);
console.log('> (clientA) listening on:', c.localAddress + ':' + c.localPort);
});
});
// clientB.js
// read the server's output to find the public endpoint of A:
var c = require('net').createConnection({host : 'PUBLIC_IP_OF_CLIENT_A', port : PUBLIC_PORT_OF_CLIENT_A},function() {
console.log('> (clientB) connected to clientA!');
c.on('data', function (data) {
console.log(data.toString());
});
});
, 내가 여기에 내 코드를 참조하십시오 https://github.com/SamDecrock/node-tcp-hole-punching
관련 문제
- 1. 자바 TCP 구멍 펀칭
- 2. TCP 구멍 펀칭 관련 문제
- 3. TCP 구멍 펀칭 기술을 사용할시기와 사용시기는 언제입니까?
- 4. UDP 구멍 펀칭
- 5. NAT 구멍 펀칭 ENet
- 6. 구멍 펀칭 젠토에
- 7. UDP 구멍 펀칭 알고리즘
- 8. UDP 구멍 펀칭 (C++/winsock)
- 9. 1 포트에 UDP 구멍 펀칭?
- 10. UDP/TCP 구멍 펀칭 vs UPnP vs STUN vs?
- 11. TCP 구멍 펀칭, android에서 주소를 다시 사용할 수 없습니다.
- 12. 자바 : TCP/UDP 구멍 펀칭 서블릿 사용 하시겠습니까?
- 13. UDP 구멍 펀칭 : 단일 머신에서의 테스트 가능성
- 14. UDP NAT 구멍 구멍 뚫기 예제
- 15. libutp (μTP) 및 NAT 통과 (UDP 구멍 펀칭)
- 16. TCP NAT-Traversal/- .NET을 사용한 펀칭
- 17. C++ 홀 펀칭 UDP (RTP)
- 18. node.js의 사용자 정의 TCP 프로토콜
- 19. http를 통해 펀치 구멍
- 20. TCP 구멍 펀칭은 Java 소켓을 사용하지만 Python에서는 작동하지 않습니다.
- 21. p2p 신청을위한 TCP 구멍 구멍을 뚫는 것은 올바른 흐름인가요?
- 22. NSRect의 구멍
- 23. 연결 구멍 펀치를 사용하여 TCP 소켓을 통해 안드로이드 통신 중 오류가 발생했습니다.
- 24. 템플릿을 사용한 펀칭 캐스트 입력
- 25. node.js의 TCP socket.write 함수 "net"패키지가 소켓에 쓰지 않습니다.
- 26. node.js의 명령 기반 TCP 소켓 API에서 연결 관리
- 27. Three.js에서 렌더링 - 투 - 텍스처로 알파 채워진 구멍을 펀칭
- 28. TDD에 관한 지식이있는 구멍
- 29. 트위터 @anywhere 보안 구멍?
- 30. NSView 또는 NSWindow의 구멍
가 발견 이 특정 문제에 대해 작동하는 해결 방법. 답변 게시. –