普通的域名解析方法:
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 ... |