用node.js制作DNS解释网站

1.制作入口模块(index.js)

//加载原生模块
var http = require('http'),
    url = require('url');
//加载文件模块
var router = require('./router.js');
//创建Http服务器
http.createServer(function(req,res){
	var pathname = url.parse(req.url).pathname; //pathname http请求路径
	req.setEncoding("utf8"); //设置http返回字符串编码
	res.writeHead(200,{'Content-Type':'text/html'});
	router.router(res,req,pathname); //调用router对象的方法
}).listen(3000,"127.0.0.1"); //监听本地接口3000

2.路由处理模块(router.js)

//加载文件模块
var ParseDns = require('./parse_dns.js'),
    MainIndex = require('./main_index.js');
//将router方法暴露给外部调用对象
exports.router = function(res,req,pathname){
	switch(pathname){ //根据pathname来路由调用处理逻辑
		case"/parse":
    		ParseDns.parseDns(res,req)//执行DNS解析
    		break;
    		default:
    		MainIndex.goIndex(res,req)//响应HTML客户端
	}
}

3.DNS解析模块(parse_dns.js)

//加载文件模块
var querystring = require("querystring"),
    dns = require('dns');
//
exports.parseDns = function(res,req){
	var postData = ""; //postDate为客户端提交的表单数据
	req.addListener("data",function(postDataChunk){
		postData += postDataChunk;
	});
//HTTP响应http页面信息
	req.addListener("end",function(){
		var retData = getDns(postData,function(domain,addresses){
			res.writeHead(200,{'Content-Type':'text/html'});
			//结束返回html页面
			res.end("<html><head><meta http-equiv='content-type' content='text/html;charset=utf8'></head><div style='text-align:center'>Domain:<span style='color:red'>" + domain + "</span>IP:<span style='color:red'>"+addresses.join(',') + "</span></div></html>");
		});
		return;
	});
	function getDns(postData,callback){
		var domain = querystring.parse(postData).search_dns;
		//异步解析域名
		dns.resolve(domain,function(err,addresses){
			if(!addresses){
				addresses=['不存在域名']
			}
			callback(domain,addresses);
		});
	}
}

4.首页展示模块(main_index.js)

//加载原生模块
var fs = require('fs'),
    url = require('url');
//暴露方法
exports.goIndex = function(res,req){
	var readPath = __dirname + '/' + url.parse('index.html').pathname;
	var indexPage = fs.readFileSync(readPath); //同步读取index.html页面数据
	res.end(indexPage); //响应返回一个index.html页面到客户端

5.html页面(index.html)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>DNS查询</title>
	</head>
	<body>
		<h1 style="text-align: center">DNS查询工具</h1>
		<div style="text-align: center">
		<form action="/parse" method="post">
		     查询DNS:<input type="text" name='search_dns' />
		     <input type='submit' value="查询"/>
		</form>
		</div>
	</body>
</html>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-Leung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值