我試圖通過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
創建與公共服務器的連接後,您還需要聽的是被用來建立連接完全相同的地方(!!)端口上。
我伸出你的testcode到概念的完整的TCP打洞證明:
// 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. 在iPhone上打孔的TCP洞
- 4. TCP打孔(旁路監聽插座)
- 5. TCP NAT穿透/ - 用.NET打孔
- 6. UDP/TCP打孔vs UPnP vs STUN vs?
- 7. 爲什麼以這種方式打孔的TCP孔不起作用?
- 8. Node.js在TCP Server中毆打C#嗎?
- 9. TCP打孔(NAT穿透)圖書館什麼的?
- 10. p2p應用程序的TCP打孔是否正確:
- 11. 在1端口上的UDP孔打孔?
- 12. node.js中的TCP/HTTP代理
- 13. TCP打孔工程使用Java套接字而不是Python Python
- 14. TCP打孔,不能在android上重複使用地址
- 15. Node.js的TCP代理
- 16. TCP孔puching - 如何進行這一步
- 17. UDP打孔實施
- 18. ICMP打孔缺陷?
- 19. 在python中打孔的鴨子
- 20. 打印出未打孔的數組
- 21. TCP套接字和Node.js的
- 22. 簡單的TCP聊天node.js
- 23. Node.js的TCP服務器EACCESS
- 24. Node.js的簡單TCP測試
- 25. Node.js中的高性能tcp服務器?
- 26. UDP NAT打孔示例
- 27. UDP打孔可能嗎?
- 28. 在Magento EE FPC中打孔Mage_Catalog_Block_Product_Price
- 29. 如何在Qt中進行UDP打孔?
- 30. 編譯時浮動打包/打孔
找到一個解決這個問題的解決方法。發佈答案。 –