Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在CNAME重定向之前拦截流量_Node.js_Ubuntu_Dns_Cname - Fatal编程技术网

Node.js 在CNAME重定向之前拦截流量

Node.js 在CNAME重定向之前拦截流量,node.js,ubuntu,dns,cname,Node.js,Ubuntu,Dns,Cname,我有以下情况: 用户连接到域:test.com 我想这个域名重定向到例如google.com 为此,我将一条CNAME记录指向google.com:www google.com(TTL:automatic) 有没有可能在test.com发送到google.com之前拦截它的流量?(自定义协议,不是http或https) 我发现了一个名为:native dns的库,我认为它可能托管dns服务器 我将其配置如下: "use strict"; var dns = require('native-dn

我有以下情况:

用户连接到域:test.com

我想这个域名重定向到例如google.com

为此,我将一条CNAME记录指向google.com:www google.com(TTL:automatic)

有没有可能在test.com发送到google.com之前拦截它的流量?(自定义协议,不是http或https)

我发现了一个名为:native dns的库,我认为它可能托管dns服务器

我将其配置如下:

"use strict";

var dns = require('native-dns'),
  tcpserver = dns.createTCPServer(),
  server = dns.createServer();

var onMessage = function (request, response) {
  console.log('request from:', request.address);
  var i;
  response.additional.push(dns.CNAME({
    name: 'www.mydomain.com',
    data: 'otherdomain.com'
  }));
  response.additional.push(dns.NS({
    name: 'ns1.mydomain.com',
    data: '127.0.0.1'
  }));

  response.send();
};

var onError = function (err, buff, req, res) {
  console.log(err.stack);
};

var onListening = function () {
  console.log('server listening on', this.address());
  //this.close();
};

var onSocketError = function (err, socket) {
  console.log(err);
};

var onClose = function () {
  console.log('server closed', this.address());
};

server.on('request', onMessage);
server.on('error', onError);
server.on('listening', onListening);
server.on('socketError', onSocketError);
server.on('close', onClose);

server.serve(53, '127.0.0.1');
我想知道的是,我如何才能使这个dns服务器真正发挥作用。我想ping www.mydomain.com并获得otherdomain.com作为答案


目前,我正在使用一个运行节点脚本的ubuntu服务器。ping将从windows 10计算机上执行。在此设置中,您无法拦截test.com上的流量,因为它从未指向您的服务器

当客户端想要连接到test.com时,首先它会通过查找test.com的DNS a记录,尝试将test.com解析为IP地址。您没有此类记录,但有一个CNAME重定向到www.google.com的a记录(或CNAME)。根据DNS请求是否是递归的(在绝大多数情况下,它是递归的),客户机要么接收www.google.com的IP地址,要么接收随后的CNAME引用

请注意,在连接到您的服务之前,整个名称解析过程是如何发生的:CNAME只是让客户端绕过您运行的任何服务


根据代码示例,您只需将到达test.com服务器的所有流量代理给Google,这是截获流量的一个非常好的方法。您所要做的就是不要使用CNAME,因为它表示在网络连接的不同阶段进行转发。

我想找到一种不必代理服务的方法,代理将花费太多的服务器电源,因为它是用于游戏的。@MaximGeerinck:如果您想拦截完整的流量,你需要以这样或那样的方式接收完整的流量。如果可以操作客户端网络,则可以在端点或两者之间的某个位置进行操作。但是,如果您只需要知道某个客户端是否尝试连接到该服务,那么可能有一种方法可以做到这一点——让我知道是哪种情况。感谢您的回复,在最好的情况下,我需要知道流量的第一部分(例如用于登录的用户名)。但是,只有知道客户端是否试图连接也是一个好的选择。后者可以通过让每个客户端连接到自己的专用DNS名称(例如,
user.example.org的唯一令牌)并监视DNS名称解析来实现。限制适用(请参阅我最近对这个问题的回答:)。我意识到这可能不太可能或不够准确,但这是我能想到的最好的办法。当然,如果你可以访问客户端计算机/网络,你有更多的选择。经过长时间的搜索,我可能已经找到了一个合适的方案,但无法确定它的理由是否正确。有关更新,请参阅我的原始问题