首页 > 开发 > Java > 正文

使用Java实现DNS域名解析的简单示例

2024-07-13 09:55:50
字体:
来源:转载
供稿:网友

这篇文章主要介绍了使用Java实现DNS域名解析的简单示例,包括对一个动态IP主机的域名解析例子,需要的朋友可以参考下

普通的域名解析方法:

 

 
  1. import java.net.*;  
  2.  
  3. public class Kkkk {  
  4. public static void main(String args[]) throws Exception {  
  5. InetAddress address = InetAddress.getByName("wxh-PC");// wxh-PC是我的计算机名  
  6. System.out.println(address);  
  7. System.out.println("-----");  
  8. InetAddress address1 = InetAddress.getLocalHost();  
  9. System.out.println(address1);  
  10.  
  11.  
  12. InetAddress[] addresses = InetAddress  
  13. .getAllByName("www.baidu.com");  
  14. System.out.println(addresses.length);  
  15. for (InetAddress addr : addresses) {  
  16. System.out.println(addr);  
  17. }  
  18. }  
  19. }  

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

目的利用一台INTERNET DNS HOST 将域名定向到家中(个人)的主机上.

目前CABLEMODEM已经很快了,而且有动态IP,所以就有了将域名解析到个人机器的上可能.

只要通过很简单的设置就可以搞定.

例如你有一个域名叫 yourdomain.com ,你可以将此域名解析任意的主机.

1.服务器 (IP: A.A.A.A) 启动DNS动态解析的一个小进程.

vevb.com的域名文件为 /var/named/vevb.com

再建个/var/named/vevb.com.static (模板文件可以用来生成vevb.com的)

(JDK1.3 , linux )

 

 
  1. # 原代码如下: ThreadDNSReloadServer.java 
  2. import java.io.*; 
  3. import java.net.*; 
  4.  
  5. public class ThreadDNSReloadServer 
  6. {  public static void main(String[] args) 
  7. int i=1; 
  8. try 
  9. { ServerSocket s=new ServerSocket(8189); 
  10. for (;;) 
  11. { Socket incoming =s.accept(); 
  12. System.out.println("accept new client: " + i); 
  13. new ThreadDNSReloadHandle(incoming,i).start(); 
  14. i++ ; 
  15. catch (Exception e) 
  16. { System.out.println(e); 
  17.  
  18. class ThreadDNSReloadHandle extends Thread 
  19. public ThreadDNSReloadHandle(Socket i,int c) 
  20. { incoming= i; counter=c; } 
  21.  
  22. public void run() 
  23. try 
  24. { BufferedReader in=new BufferedReader(new InputStreamReader(incoming.getInputStream())); 
  25.  
  26. String User="Unkown"
  27. String DNSFILEPATH="/var/named/"
  28. String DNSFILE="vevb.com"
  29. String HOSTIP="127.0.0.1"
  30. boolean USER_VALIDATED=true ; 
  31. boolean done=false
  32.  
  33. while ( !done ) 
  34. {  String str=in.readLine(); 
  35. //validate user; 
  36. if ( str ==null ) done=true
  37. else 
  38. str=str.trim(); 
  39. if ( str.substring(0,2).equals("LA") ) 
  40. if (str.length() >2) User=str.substring(2); 
  41. if ( str.substring(0,2).equals("LB") ) 
  42. if (str.length() >2) DNSFILE=str.substring(2); 
  43. if ( str.substring(0,2).equals("LC") ) 
  44. if (str.length() >2) HOSTIP=str.substring(2); 
  45.  
  46. if ( str.trim().equals("BYE")) done = true
  47.  
  48. incoming.close(); 
  49. //加入用户验证. 
  50. //将服务器中的vevb.com.static文件写入vevb.com中 
  51. String DNSTMP =DNSFILEPATH + DNSFILE +".static"
  52. BufferedReader sin=new BufferedReader(new FileReader(DNSTMP)); 
  53. PrintWriter sout=new PrintWriter(new FileWriter(DNSFILEPATH + DNSFILE) , true); 
  54. String s; 
  55. while ((s=sin.readLine()) != null
  56. if (s.startsWith("host")) 
  57. { s="host IN A " + HOSTIP; 
  58. sout.println(s); 
  59. s="@ IN A " + HOSTIP; 
  60. sout.println(s); 
  61. //System.out.println("User:" + User ); 
  62. //System.out.println("DNSFILE:" + DNSFILE ); 
  63. //System.out.println("HOSTIP:" + HOSTIP ); 
  64.  
  65. //ndc reload 
  66. String command="ndc reload " + DNSFILE ; 
  67. java.lang.Runtime.getRuntime().exec(command); 
  68.  
  69. catch ( Exception e) 
  70. { System.out.println(e); 
  71.  
  72. private Socket incoming; 
  73. private int counter; 
  74.  

2.客户机(windows / linux)

 

 
  1. # 客户端每次启动时加入到开机启动(或进程中): SockTest.java 
  2.   import java.io.*; 
  3.   import java.net.*; 
  4.    
  5.   public class SocketTest 
  6.   { public static void main(String[] args) 
  7.   { try 
  8.   { Socket s=new Socket("A.A.A.A",8189); 
  9.   BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream())); 
  10.   PrintWriter out=new PrintWriter(s.getOutputStream(),true); 
  11.    
  12.   InetAddress localHostAddress =InetAddress.getLocalHost() ; //get LocalHost Ip 
  13.   out.println("LAguest"); 
  14.   out.println("LByourdomain.com"); 
  15.   out.println("LC" + localHostAddress.getHostAddress() ); 
  16.    
  17.   out.close(); 
  18.   s.close(); 
  19.    
  20.   } 
  21.   catch (IOException e) 
  22.   { System.out.println(e); 
  23.   } 
  24.   } 
  25.   } 

dns 样本文件: ( vevb.com.static)

 

  1. @ ns.dnsserver.com xxxxx 
  2. xxxx 
  3. host    IN A 127.0.0.1      // 此处就是要更改的地方 
  4. www    IN CNAME host 
  5. ... 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表