我现在要做一个物联网的项目。
具体是要可以给任何物体注册一个ID,叫做OID,OID可以分类,每一类OID都类似与IP一样,1.2.16.xxx 等等,1.2.16是固定的,后面的数字可以根据算法分配;
在注册OID的时候,要将其对应的一些信息也记录下来。
大概的查询思路类似与DNS。于是我们设计了这样一个类DNS解析系统。
部署环境如题:bind + mysql +bind-dlz实现类DNS功能(支持多线程)
想到了NAPTR记录方式,如下(类似与sip电话中routing配置):
$ORIGIN 1.3.1.3.1.4.3.2.2.6.8.e164.arpa.
IN NAPTR 10 10 "u" "SIP+E2U" "!^.*$!sip:abel@twnic.net.tw"
但是数据库表不知道应该怎么设计才会高效,因为通常一个OID会对应多条信息,那我的naptr记录也设计成多条么?还有java代码如何实现发送dns查询消息?
希望有bind部署经验以及开发经验的兄弟来支撑下;
如果有南京本地的高手,我司愿意聘为临时顾问,薪资可商议!
谢谢!
可留言,可加QQ(1034546474)好友,验证信息填写 DNS 即可。
在线等。。。
bind + mysql +bind-dlz实现类DNS功能
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-01 17:33关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
首先,让我们回顾一下绑定服务(bind)的基本概念和MySQL数据库的使用情况。绑定服务是一种用于在互联网上提供安全、可靠且高性能的域名服务的技术。它允许用户通过输入域名(例如.com, .net, .org)来获取服务器上的相应资源。
在绑定服务中,通常会有多个数据库或缓存来存储绑定数据,以便于快速检索。对于您的物联网项目,我们可以考虑将绑定信息存储在一个持久化的数据库中,如MySQL。
至于NAPTR记录,这是在IPv4地址空间中使用的DNS记录类型之一,它定义了一个路由表,告诉客户端应该向哪个IP地址发送DNS请求以获得目标主机的信息。在这种情况下,您想要将每个OID映射到特定的IP地址,并可能还需要一些其他信息,比如端口或者路径。
为了实现这个系统,我们需要做以下几步:
- 设计一个持久化的数据结构来存储绑定信息。
- 实现一个DNS查询服务,接收客户端的域名查询请求并根据已有的绑定信息返回相应的响应。
- 将这些逻辑封装到一个独立的服务中,然后将服务部署在MySQL上。
- 在绑定服务中实现多线程以提高性能。
下面是基本的Java代码示例,展示如何创建一个简单的DNS查询服务:
import java.io.*; import java.net.*; public class DnsService { private static final String BIND_HOST = "localhost"; private static final int BIND_PORT = 10000; private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mydb"; public void start() throws IOException { try (Connection conn = DriverManager.getConnection(DATABASE_URL)) { System.out.println("Connected to database"); while (true) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(System.out); System.out.print("Enter domain name or 'exit' to quit: "); String input = reader.readLine(); if ("exit".equals(input)) break; String query = "SELECT * FROM dns WHERE domain_name = ?"; PreparedStatement ps = conn.prepareStatement(query); ps.setString(1, input); ResultSet rs = ps.executeQuery(); // Handle the result set while (rs.next()) { String ip = rs.getString("ip_address"); writer.println(ip); } } } catch (SQLException e) { throw new RuntimeException(e); } } public static void main(String[] args) throws IOException { new DnsService().start(); } }在这个例子中,我们创建了一个名为DnsService的服务,它接受从标准输入读取的域名查询请求,并将它们写入标准输出。当用户输入“exit”时,服务将退出。
请注意,这只是一个非常基础的例子,实际的应用可能会更复杂,包括处理错误、优化查询结果集、支持更多的查询选项等等。
解决 无用评论 打赏 举报