实现具有动态主机IP的域名解析

  目的利用一台INTERNET DNS HOST将域名定向到家中(个人)的主机上.
  目前CABLEMODEM已经很快了,而且有动态IP,所以就有了将域名解析到个人机器的上可能.
  只要通过很简单的设置就可以搞定.
  例如你有一个域名叫yourdomain.com,你可以将此域名解析任意的主机.
  1.服务器(IP:A.A.A.A)启动DNS动态解析的一个小进程.
  yourdomain.com的域名文件为/var/named/yourdomain.com
  再建个/var/named/yourdomain.com.static(模板文件可以用来生成yourdomain.com的)
  (JDK1.3,linux,找个网管帮一下吧:)
  =================================================
  #原代码如下:ThreadDNSReloadServer.java
  import java.io.*;
  import java.net.*;
  public class ThreadDNSReloadServer
  {public static void main(String[]args)
  {int i=1;
  try
  {ServerSocket s=new ServerSocket(8189);
  for(;;)
  {Socket incoming=s.accept();
  System.out.println("accept new client:"+i);
  new ThreadDNSReloadHandle(incoming,i).start();
  i++;
  }
  }
  catch(Exception e)
  {System.out.println(e);
  }
  }
  }
  class ThreadDNSReloadHandle extends Thread
  {public ThreadDNSReloadHandle(Socket i,int c)
  {incoming=i;counter=c;}
  public void run()
  {try
  {BufferedReader in=new BufferedReader(new InputStreamReader(incoming.getInputStream()));
  String User="Unkown";
  String DNSFILEPATH="/var/named/";
  String DNSFILE="yourdomain.com";
  String HOSTIP="127.0.0.1";
  boolean USER_VALIDATED=true;
  boolean done=false;
  while(!done)
  {String str=in.readLine();
  //validate user;
  if(str==null)done=true;
  else
  {
  str=str.trim();
  if(str.substring(0,2).equals("LA"))
  {if(str.length()>2)User=str.substring(2);
  }
  if(str.substring(0,2).equals("LB"))
  {if(str.length()>2)DNSFILE=str.substring(2);
  }
  if(str.substring(0,2).equals("LC"))
  {if(str.length()>2)HOSTIP=str.substring(2);
  }
  if(str.trim().equals("BYE"))done=true;
  }
  }
  incoming.close();
  //加入用户验证.
  //将服务器中的yourdomain.com.cn.static文件写入yourdomain.com.cn中
  String DNSTMP=DNSFILEPATH+DNSFILE+".static";
  BufferedReader sin=new BufferedReader(new FileReader(DNSTMP));
  PrintWriter sout=new PrintWriter(new FileWriter(DNSFILEPATH+DNSFILE),true);
  String s;
  while((s=sin.readLine())!=null)
  {
  if(s.startsWith("host"))
  {s="host IN A"+HOSTIP;
  sout.println(s);
  s=" IN A"+HOSTIP;
  }
  sout.println(s);
  }
  //System.out.println("User:"+User);
  //System.out.println("DNSFILE:"+DNSFILE);
  //System.out.println("HOSTIP:"+HOSTIP);
  //ndc reload
  String command="ndc reload"+DNSFILE;
  java.lang.Runtime.getRuntime().exec(command);
  }
  catch(Exception e)
  {System.out.println(e);
  }
  }
  private Socket incoming;
  private int counter;
  }
  2.客户机(windows/linux)
  ==============================================================
  #客户端每次启动时加入到开机启动(或进程中):SockTest.java
  import java.io.*;
  import java.net.*;
  public class SocketTest
  {public static void main(String[]args)
  {try
  {Socket s=new Socket("A.A.A.A",8189);
  BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
  PrintWriter out=new PrintWriter(s.getOutputStream(),true);
  InetAddress localHostAddress=InetAddress.getLocalHost();//get LocalHost Ip
  out.println("LAguest");
  out.println("LByourdomain.com");
  out.println("LC"+localHostAddress.getHostAddress());
  out.close();
  s.close();
  }
  catch(IOException e)
  {System.out.println(e);
  }
  }
  }
  =========================================================
  dns样本文件:(yourdomain.com.static)
   ns.dnsserver.com xxxxx
  xxxx
  ......
  host IN A 127.0.0.1//此处就是要更改的地方
  www IN CNAME host
  ...