一般来说,自己编写DNS是没有必要的,目前开源的dns服务软件很多,功能也很强大。但是,有时候又是很有必要的,有着诸多好处。比如说,用于企业内网,简化DNS配置,可以根据企业需求添加新的功能,非常灵活。本文试着用java实现一个最简单的DNS服务。 ...
一般来说,自己编写DNS是没有必要的,目前开源的dns服务软件很多,功能也很强大。但是,有时候又是很有必要的,有着诸多好处。比如说,用于企业内网,简化DNS配置,可以根据企业需求添加新的功能,非常灵活。本文试着用java实现一个最简单的DNS服务。
DNS是基于udp协议的,默认端口为53。
在自己电脑上实现dns服务(作为dns服务器),首先需要程序监听udp 53端口。在java中,和udp相关的类为DatagramSocket以及DatagramPacket。具体信息可以查看API,或者参考http://www.cnblogs.com/hq-antoine/archive/2012/02/11/2346908.html。
之后,需要另一台电脑作为客户端,设置dns地址为服务器的ip地址。
public class UDPServer { private static DatagramSocket socket; public UDPServer() { //设置socket,监听端口53 try { this.socket = new DatagramSocket(53); } catch (SocketException e) { e.printStackTrace(); } } public void start() { System.out.println("Starting。。。。。。\n"); while (true) { try { byte[] buffer = new byte[1024]; DatagramPacket request = new DatagramPacket(buffer, buffer.length); socket.receive(request); //输出客户端的dns请求数据 InetAddress sourceIpAddr = request.getAddress(); int sourcePort = request.getPort(); System.out.println("\nsourceIpAddr = " + sourceIpAddr.toString() + "\nsourcePort = " + sourcePort); System.out.println("data = " + new String(request.getData(), 0 , request.getLength())); } catch (SocketException e) { System.out.println("SocketException:"); e.printStackTrace(); } catch (IOException e) { System.out.println("IOException:"); e.printStackTrace(); } } }}
原标题:试着用java实现DNS(一)——DatagramSocket, DatagramPacket, Message
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。