当前位置: 首页 > wzjs >正文

做网站的主题网站建设全网营销

做网站的主题,网站建设全网营销,襄阳网站推广优化技巧,阿里巴巴国际站官网首页前言 这个也是 来自于一个朋友的需求 最终的目的是实现一个 dns 代理服务器, 当然 这本质也是一个 dns 服务器 并且 dns 代理服务器是依赖于 一个 dns 服务器的, 因此 顺便给一个 dns 服务器的 demo 这里 主要是 基于 udp 的一个 dns 请求, 响应数据的交互 dns 服务器 …

前言

这个也是 来自于一个朋友的需求 

最终的目的是实现一个 dns 代理服务器, 当然 这本质也是一个 dns 服务器 

并且 dns 代理服务器是依赖于 一个 dns 服务器的, 因此 顺便给一个 dns 服务器的 demo 

这里 主要是 基于 udp 的一个 dns 请求, 响应数据的交互 

 

 

dns 服务器 

一个基础的 dns 服务器 demo 如下 

为了方便测试, 可以将 端口改为 53, 然后使用 System.out.println 之类的进行调试 

package com.hx.test15;import org.xbill.DNS.*;import java.io.ByteArrayOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;/*** @author Jerry.X.He <970655147@qq.com>* @version 1.0* @date 2024-07-02 22:33*/
public class Test25SimpleDnsServer {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(8053);System.out.println("DNS Server listening on port 8053...");while (true) {byte[] receiveData = new byte[512];DatagramPacket requestPacket = new DatagramPacket(receiveData, receiveData.length);socket.receive(requestPacket);byte[] data = requestPacket.getData();int offset = requestPacket.getOffset();int length = requestPacket.getLength();Message request = new Message(ByteBuffer.wrap(data, offset, length));Message response = handleRequest(request);ByteArrayOutputStream baos = new ByteArrayOutputStream();DNSOutput out = new DNSOutput();baos.write(out.toByteArray());baos.write(response.toWire());byte[] responseData = baos.toByteArray();DatagramPacket responsePacket = new DatagramPacket(responseData, responseData.length,requestPacket.getAddress(), requestPacket.getPort());socket.send(responsePacket);}}private static Message handleRequest(Message request) throws Exception {Message response = new Message(request.getHeader().getID());response.getHeader().setFlag(Flags.QR);response.getHeader().setOpcode(Opcode.QUERY);Record question = request.getQuestion();if (question.getName().toString().startsWith("www.abc.com") && question.getType() == Type.A) {ARecord answer = new ARecord(question.getName(), DClass.IN, 300, InetAddress.getByName("172.0.0.2"));response.addRecord(answer, Section.ANSWER);} else {// apply default}return response;}}

 

 

最终实现效果如下, dns 服务器中仅仅配置了 "www.abc.com" -> "172.0.0.2" 

因此 www.abc.com 能够拿到查询结果, www.baidu.com 拿不到查询结果 

 

 

dns 代理服务器

主需求是实现一个 dns 的代理服务器  

实现如下, 无非就是 代理发送一次 dns 的请求 到目标 dns 服务器, 拿到响应之后 响应给客户端 

package com.hx.test15;import org.xbill.DNS.Message;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;/*** Test25JavaDnsForwardServer** @author Jerry.X.He <970655147@qq.com>* @version 1.0* @date 2024-07-02 22:10*/
public class Test25JavaDnsForwardServer {public static void main(String[] args) throws IOException {DatagramSocket serverSocket = new DatagramSocket(53);System.out.println("DNS Proxy Server listening on port 53...");while (true) {byte[] receiveData = new byte[512];DatagramPacket requestPacket = new DatagramPacket(receiveData, receiveData.length);serverSocket.receive(requestPacket);Message request = readMessage(requestPacket);Message response = proxyRequest(request);ByteArrayOutputStream baos = new ByteArrayOutputStream();baos.write(response.toWire());byte[] responseData = baos.toByteArray();DatagramPacket responsePacket = new DatagramPacket(responseData, responseData.length,requestPacket.getAddress(), requestPacket.getPort());serverSocket.send(responsePacket);}}private static Message readMessage(DatagramPacket packet) throws IOException {byte[] data = packet.getData();int offset = packet.getOffset();int length = packet.getLength();return new Message(ByteBuffer.wrap(data, offset, length));}private static Message proxyRequest(Message request) throws IOException {DatagramSocket upstreamSocket = new DatagramSocket();InetAddress upstreamAddress = InetAddress.getByName("127.0.0.1");int upstreamPort = 8053;ByteArrayOutputStream baos = new ByteArrayOutputStream();baos.write(request.toWire());byte[] requestData = baos.toByteArray();DatagramPacket upstreamRequest = new DatagramPacket(requestData, requestData.length, upstreamAddress, upstreamPort);upstreamSocket.send(upstreamRequest);byte[] upstreamResponseData = new byte[512];DatagramPacket upstreamResponse = new DatagramPacket(upstreamResponseData, upstreamResponseData.length);upstreamSocket.receive(upstreamResponse);Message response = new Message(ByteBuffer.wrap(upstreamResponseData, upstreamResponse.getOffset(), upstreamResponse.getLength()));upstreamSocket.close();return response;}}

 

最终实现效果如下, dns 服务器中仅仅配置了 "www.abc.com" -> "172.0.0.2" 

因此 www.abc.com 能够拿到查询结果, www.baidu.com 拿不到查询结果 

如果 关闭 目标dns服务, 代理服务器会阻塞住 

 

 

完 

 

 

 

 

 

http://www.dtcms.com/wzjs/100919.html

相关文章:

  • 硬件开发文档模板湖南网络优化
  • 打开网站说建设中是什么问题?seo关键词快速排名介绍
  • 广州网页设计培训学校2022网站seo
  • 自己如何在家做网站枣庄网站seo
  • 我想做个网站怎么弄网页设计和网站制作
  • 购物网站答辩ppt怎么做南京网络优化培训
  • 西安美食seo关键词快速排名
  • 建设旅游电子商务网站的目的谷歌地图下载
  • 开发网站价格安徽百度推广怎么做
  • 深圳快速网站制作服务外链生成网站
  • 软考高级东莞网络推广优化排名
  • 哈尔滨网站建设维护seo招聘信息
  • 绥化网站建设seo关键字怎么优化
  • 视频制作软件手机版seo流量
  • 网站怎么做是满屏关于手机的软文营销
  • 网站建设案例渠道兴安盟新百度县seo快速排名
  • 做的网站很卡是什么原因呢长春网站公司哪家好
  • 浙江网站建设制作流程软文营销是什么意思
  • 中国建设建行网站今天最火的新闻头条
  • 洛阳做网站公司有哪些站长素材音效下载
  • 做交流网站怎么建设自己的网站
  • seo网站制作app优化方案
  • 能自己做头像的网站网站seo是什么意思
  • 找人做网站 网站定制开发百度新闻搜索
  • 网站建设广告费 科目北京网络排名优化
  • 网站建站的标准网推app
  • 有没有专门做美食海报的网站查询网站备案信息
  • 小语种服务网站网站死链检测工具
  • 晋江wap站是什么意思如何开网店
  • 巩义网站优化培训企业网站seo诊断报告