普通的域名解析方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.net.*; public class Kkkk { public static void main(String args[]) throws Exception { InetAddress address = InetAddress.getByName( "wxh-PC" ); // wxh-PC是我的计算机名 System.out.println(address); System.out.println( "-----" ); InetAddress address1 = InetAddress.getLocalHost(); System.out.println(address1); InetAddress[] addresses = InetAddress .getAllByName( "www.baidu.com" ); System.out.println(addresses.length); for (InetAddress addr : addresses) { System.out.println(addr); } } } |
实现具有动态主机IP的域名解析
目的利用一台INTERNET DNS HOST 将域名定向到家中(个人)的主机上.
目前CABLEMODEM已经很快了,而且有动态IP,所以就有了将域名解析到个人机器的上可能.
只要通过很简单的设置就可以搞定.
例如你有一个域名叫 yourdomain.com ,你可以将此域名解析任意的主机.
1.服务器 (IP: A.A.A.A) 启动DNS动态解析的一个小进程.
jb51.net的域名文件为 /var/named/jb51.net
再建个/var/named/jb51.net.static (模板文件可以用来生成jb51.net的)
(JDK1.3 , linux )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# 原代码如下: 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= "jb51.net" ; 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(); //加入用户验证. //将服务器中的jb51.net.static文件写入jb51.net中 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 客户端每次启动时加入到开机启动(或进程中): 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 样本文件: ( jb51.net.static)
1
2
3
4
5
|
@ ns.dnsserver.com xxxxx xxxx host IN A 127.0.0.1 // 此处就是要更改的地方 www IN CNAME host ... |