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

河源市seo网站设计抖音带运营团队有用吗

河源市seo网站设计,抖音带运营团队有用吗,seo零基础教学,校园文化建设前言 这个也是 来自于一个朋友的需求 最终的目的是实现一个 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/569709.html

相关文章:

  • 2025年11月4日 AI快讯
  • SAP定价过程
  • ArrayList常见面试题二
  • 网站建设中期报告织梦网站怎么做索引地图
  • 关键字匹配高效算法
  • PySide6 Win10记事本从零到一——第八章 查看菜单界面与功能实现
  • Linux之arm SMMUv3 驱动重要宏和函数解析(11)
  • 网站功能介绍是什么自贡网站设计
  • 做企业网站设wordpress多媒体权限
  • CTF WEB入门 命令执行篇 50-70
  • 利用网上菜谱做网站公众号开发公司排行榜
  • 免费搭建视频网站硬件开发板
  • Mysql中页分裂、合并的问题
  • Qt 的 QSqlDatabase 不能跨线程复用
  • Qt-QtCharts
  • 某番切小说畅听红果等提示“低版本不安全”的解决方案
  • 昆明网站seo技术厂家网站设计远程培训
  • Linux基本架构
  • 任务调度框架:PowerJob、XXL-Job、OpenJob
  • 做模型挣钱的网站wordpress中英文切换
  • TensorFlow Keras
  • 萧山做网站的企业wordpress集成关注公众和登陆
  • 详解EtherNet/IP转CAN边缘计算网关:基恩士PLC与CAN IO卡通讯配置步骤
  • 网站权重的提升河北网站制作多少钱
  • .net实现redis下单超卖(jmeter高并发测试)(自己记录用)
  • 全自动壁纸采集源码
  • 公司用员工信息做网站域名备案网站建站描述撰写
  • Python类中方法种类介绍
  • AI研究:大语言模型(LLMs)需要怎样的硬件算力
  • 贵阳网站建设方案报价查企业资质上什么网站