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

网站网站建设公司上海优秀flash网站欣赏

网站网站建设公司上海,优秀flash网站欣赏,快速排名推荐,怎么让百度收录网址前言 这个也是 来自于一个朋友的需求 最终的目的是实现一个 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/a/607983.html

相关文章:

  • 网站建设人员叫什么网站设计与制作的过程
  • 中移建设招标网站wordpress标签使用方法
  • 宠物网站建设费用服务行业网站建设
  • 网站建设必须要服务器吗标志设计公司成都
  • 哪个网站做的win10系统好wordpress小人无法显示
  • 南海网站设计wordpress 图片 大小
  • 嘉兴网站专业制作外贸平台有那些
  • 宝安专业做网站嘉兴市城乡规划建设管理网站
  • 淮南营销型网站建设怎么样网站建设会议议程
  • 做众筹网站微信小程序怎么做游戏
  • 网站seo优化服务建设网站列表
  • 做图片网站 服务器网站要怎么做才能让360收录
  • 做网站建设的wordpress 安装出错
  • 深圳网站设计电话h5页面制作免费平台
  • 软件设计网站温州瓯北做网站
  • jsp做网站实例广州哪家做网站
  • 网上卖货哪个平台比较好短视频seo营销系统
  • 做信息网站怎么赚钱建设部网站投标保证金
  • 网站建设中标公告河北省建设资格执业中心网站
  • 给企业做网站公司西部数码网站管理助手ftp
  • 描述photoshop在网站建设中的作用与特点.郑州短视频运营公司
  • 深圳做外贸网站的公司网站内容协议
  • 宁波搭建网站公司什么网站可以做h5
  • 东莞网站建设排行萝岗微网站建设
  • 绍兴市住房和城乡建设局网站手机永久免费建站
  • 想找个人建网站电台网站建设要求
  • 免费做初级会计试题网站有哪些深圳网站建设 卓越创
  • 呼和浩特北京网站建设东莞手机网站建设入门
  • 免费素材库网站wordpress 主题库
  • 云虚拟主机怎么做2个网站开一个工作室需要多少钱