通常のドメイン名解決方法:
import java.net.*; public class Kkkk { public static void main(String args[]) throws Exception { InetAddress address = InetAddress.getByName("wxh-PC");// wxh-PC は私のコンピュータ名です。 .println(アドレス); System.out.println("-----"); System.out.println(address1); InetAddress[] アドレス = InetAddress .getAllByName("www.baidu.com"); System.out.println(addresses.length); for (InetAddress addr : アドレス)プリントイン(アドレス); } }動的ホスト IP を使用したドメイン名解決の実装
その目的は、インターネット DNS ホストを使用して、ドメイン名を自宅 (個人) のホストに送信することです。
現在、CABLEMODEM は非常に高速で、動的 IP を備えているため、ドメイン名を個人のマシンに解決することが可能です。
非常に簡単な設定で実現できます。
たとえば、ドメイン名 yourdomain.com がある場合、このドメイン名を任意のホストに解決できます。
1. サーバー (IP: AAAA) は、DNS 動的解決の小さなプロセスを開始します。
VeVB.COm のドメイン名ファイルは /var/named/VeVB.COm です。
別の /var/named/VeVB.COm.static を作成します (テンプレート ファイルを使用して VeVB.COm を生成できます)
(JDK1.3、Linux)
# 元のコードは次のとおりです: ThreadDNSReloadServer.java import java.io.*; import java.net.*; public static void main(String[] args) { int i=1; new ServerSocket( 8189); for (;;) { ソケット受信 =s.accept(); System.out.println("新しいクライアントを受け入れます: " + 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 DNSFILEPATH="/var/named/"; USER_VALIDATED=true ; ブール値 none=false; ( !done ) { String str=in.readLine(); // ユーザーを検証します; if ( str ==null )ned=true; else { str=str.trim(); if ( str.substring(0,2).equals("LA") ) { if (str.length () >2) ユーザー=str.substring(2); } if ( str.substring(0,2).equals("LB") ) { if (str.length() >2) DNSFILE=str.substring( 2); } ( str.substring(0,2).equals("LC") ) { if (str.length() >2) HOSTIP=str.substring(2) } if ( str.trim().equals("BYE "))ned = true; } } incoming.close(); //ユーザー認証を追加します //サーバー内の VeVB.COm.static ファイルを VeVB.COm に書き込みます String DNSTMP =DNSFILEPATH + DNSFILE +".static"; DNSFILE +".static"; sin=new BufferedReader(new FileReader(DNSTMP)); ) != null) { if (s.startsWith("host")) { s="ホスト IN A " + HOSTIP; sout.println(s); s="@ IN A " + HOSTIP; } //System.out.println("User:" + User ); "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 ソケット受信;
2. クライアント (Windows/Linux)
# 起動するたびにクライアントをスタートアップ (またはプロセス) に追加します: SockTest.java import java.io.*; import java.net.*; public static void main(String[] args) { try {ソケット s=new Socket("AAAA",8189); InputStreamReader(s.getInputStream())); PrintWriter out=new PrintWriter(s.getOutputStream(),true); //LocalHost Ip out.println("LAguest"); println("LByourdomain.com"); out.println("LC" + localHostAddress.getHostAddress() ); out.close(); } catch (IOException e) { } } dns サンプル ファイル: (VeVB.COm.static)
@ ns.dnsserver.com xxxxx xxxx host IN A 127.0.0.1 // ここは www IN CNAME host を変更する場所です ...