Node.js实现web解析DNS(四)

来源:互联网 发布:东方知乎 编辑:程序博客网 时间:2024/06/06 08:27
所有创建的文件都要在一个文件夹下。
代码如下:
index.html:
Node.js实现web解析DNS(四)



mainIndex.js:
var fs=require('fs');
var url=require('url');

exports.goIndex=function(res) {
    var readPath='./'+url.parse('index.html').pathname;
    var indexpage=fs.readFileSync(readPath);
    res.end(indexpage);
}

parse_dns_ex.js:
var http=require('http');
var url=require('url');
var router=require('./router.js');

//res是response,req是request,res是处理HTTP的响应事件,req处理HTTP的请求事件。
//req中包含了用户请求的http头以及请求的一些参数,根据req中的方法和属性,可以获取客户端传递的参数。
//res为相应客户端请求对象,该对象包含了一些http响应属性额方法,通过该对象响应数据到客户端。
http.createServer(function(req,res){
    //这里分为两个页面,一个是最初查找的页面,第二个是显示结果的页面。所以这里的pathname有两个,分别为/和/parse.
    var pathname=url.parse(req.url).pathname;
    console.log('pathname:'+pathname);
    req.setEncoding("utf8");
    res.writeHead(200,{'Content-Type':'text/html'});
    //根据pathname来决定显示什么页面。
    router.router(res,req,pathname);
}).listen(3000,"127.0.0.1");

parse_dns.js:
var querystring=require('querystring');
var dns=require('dns');


//Node.js中 req对象有一个addListener方法来获取http的post的参数,这个接口是一个异步的方法,携带的两个事件分别是data和end。
//data是指当有数据传递到服务器时触发的事件,而end则表示客户端所有数据传递完毕后触发的事件。
//因此在服务器判断所有数据接受完毕后,执行回调函数来获取post的参数,得到post参数后才执行相应逻辑getDns。
exports.parseDns=function(res,req){
    var postData="";
    req.addListener("data",function(postDataChunk){
        postData+=postDataChunk;
    });
    req.addListener("end",function () {
        //在这里首先会调用getDns这个函数,在执行到getDns这个函数最后一行时,会调用传进去的回调函数。
        //即下面长长的一段function。将刚刚得到的domain和相对应的addresses通过html来显示出来。
        var retData=getDns(postData,function (domain,addresses) {
            res.writeHead(200,{'Content-Type':'text/html'});
            res.end("       
Domain:"+domain+
                    "
IP:"+addresses.join(',')+"
");
        });
        return;
    });
}

function getDns(postData,callback) {
    //得到需要查找的内容。
    var domain=querystring.parse(postData).search_dns;   //因为在html文件中,那个输入框的名字是search_dns.
    dns.resolve(domain,function (err,addresses) {
        //addresses为得到的各个域名。
        if (!addresses) {
            addresses=['不存在域名'];
        }
        callback(domain,addresses);       
    });
}

router.js:
var mainindex=require('./mainIndex.js');
var parse_dns=require('./parse_dns.js');
exports.router=function(res,req,pathname){
    switch(pathname) {
        //如果是解析的页面。
        case "/parse":
            parse_dns.parseDns(res,req);
            break;
        default:
            //如果是查找的页面。
            mainindex.goIndex(res);
            break;
    }
}

然后在命令行中运行node parse_dns_ex.js
然后打开浏览器,输入:http://127.0.0.1:3000
出现如下界面:



输入www.qq.com,点击查询,出现如下结果:
Domain:www.qq.comIP:101.226.103.106,101.226.129.158
0 0
原创粉丝点击