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

所有创建的文件都要在一个文件夹下。
代码如下:
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.com IP: 101.226.103.106,101.226.129.158
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值