你的位置:首页 > 软件开发 > Java > 试着用java实现DNS(一)——DatagramSocket, DatagramPacket, Message

试着用java实现DNS(一)——DatagramSocket, DatagramPacket, Message

发布时间:2016-03-20 16:00:26
一般来说,自己编写DNS是没有必要的,目前开源的dns服务软件很多,功能也很强大。但是,有时候又是很有必要的,有着诸多好处。比如说,用于企业内网,简化DNS配置,可以根据企业需求添加新的功能,非常灵活。本文试着用java实现一个最简单的DNS服务。 ...

试着用java实现DNS(一)——DatagramSocket, DatagramPacket, Message

    一般来说,自己编写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 (#换成@)。