我的本地设备通过TCP发送JSON数据:
ex. {"cmd": "listactions", "id": 13, "value": 100}
数据从端口192.168.0.233
上的8000
发送
(我用wireshark检查了这个)
我想(使用我的主服务器)拦截具有nodejs&的那些特定命令。通过pusher发送它们。
我对nodejs& amp;似乎无法让这个工作。我尝试了以下方法:
net = require('net');
var server = net.createServer(function(sock) {
sock.setEncoding('utf8');
sock.on('data', function (data) {
// post data to a server so it can be saved and stuff
console.log(data);
// close connection
sock.end();
});
sock.on('error', function (error) {
console.log('******* ERROR ' + error + ' *******');
// close connection
sock.end();
});
});
server.on('error', function (e) {
console.log(e);
});
server.listen(8000, '192.168.0.233', function(){
//success, listening
console.log('Server listening');
});
但它抱怨EADDRNOTAVAIL
,从研究中我了解到这意味着端口正在使用......我不明白,因为我能够使用Wireshark。
这样做的正确方法是什么?
答案 0 :(得分:0)
Wireshark不会监听所有端口。它使用内核驱动程序(使用libpcap或winpcap)来“嗅探”线路上的数据。也就是说,它不介于任何东西之间。这不是一个中间人。它只是在发送数据时收到一份数据。
如果您希望它接收数据,您的应用程序需要侦听该端口。您应该使用netstat来确定正在侦听端口8000的进程并将其终止。然后,您可以在端口8000上收听。
理论上你可以使用libpcap来获取你的数据但这很疯狂。有大量的开销,无论如何都必须在该端口上监听(毕竟这是一个TCP连接),过滤掉你想要的东西是非常复杂的。基本上,您将重新实现网络堆栈。不。